Files
2026-06-13 00:10:11 +08:00

359 lines
7.6 KiB
C

//---------------------------------------------------------------------------
#ifndef CommonUnitH
#define CommonUnitH
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma once
#define MAX_STYLE_NUM 80
enum EClientType{
e_Ac_Windows,
e_Ac_Android,
e_Ac_iOS,
e_SM_Recreator,
e_SM_Checker,
e_Web,
e_Pro_Windows
};
enum EStyleState{
e_OffLine = -2, //下线
e_CheckFail, //审核未通过
e_Checking, //待审核
e_Distribute, //发布
e_UnDownload, //未下载
e_Downloading, //在下载
e_Downloaded //已下载
};
enum EPaymentOperation{
e_PO_Pay4Basic = 0x01, //基本功能费
e_PO_Pay4Compose = 0x02, //保存编曲
e_PO_Pay4Midi = 0x04, //导出MIDI
e_PO_Pay4Audios = 0x08, //多音轨输出
e_PO_Pay4Fonts = 0x10, //多音色库
e_PO_End
};
enum EMessageType{
e_InvalidMessage,
e_versionRequest = 0x01,
e_versionResponse,
e_connectRequest = 0x11,
e_connectResponse,
e_loginRequest = 0x21,
e_loginResponse,
e_verifyRequest,
e_verifyResponse,
e_purchaseRequest,
e_purchaseResponse,
e_registerRequest,
e_registerResponse,
e_checkPaymentRequest,
e_checkPaymentResponse,
e_payRequest,
e_payResponse,
e_iconRequest,
e_iconResponse,
e_logoffRequest,
e_logoffResponse,
e_dataSendRequest = 0x41,
e_dataSendResponse,
e_dataReceiveRequest,
e_dataReceiveResponse,
e_styleUpdateRequest = 0x61,
e_styleUpdateResponse,
e_styleInfoRequest,
e_styleInfoResponse,
e_styleDataRequest,
e_styleDataResponse,
e_styleCheckRequest,
e_styleCheckResponse,
e_styleRecomRequest,
e_styleRecomResponse,
e_uploadStyleRequest = 0x81,
e_uploadStyleResponse,
e_uploadSongRequest,
e_uploadSongResponse,
e_qnaUpdateRequest = 0x91,
e_qnaUpdateResponse,
e_qnaSubmitRequest,
e_qnaSubmitResponse,
e_noticeUpdateRequest,
e_noticeUpdateResponse,
e_MessgeTypeEnd
};
enum EExtraInfo{
e_RequestSuccess,
e_UpdateNoNeed, //已是最新版本
e_UpdateOptional, //版本可选更新
e_UpdateMandatory, //版本强制更新
e_VerifyInsufficient,
e_RequestFailed = 0x8000,
e_SocketError,
e_WaitTimeout,
e_DatabaseError,
e_ParamError,
e_LoginPasswordError,
e_LoginUserNotExist,
e_InvalidUserID,
e_InvalidStyleID,
e_UserCanceled,
e_NoService,
e_ServiceBusy,
e_InvalidDataID,
e_InvalidPackID,
e_OutOfBound,
e_InvalidData,
e_InvalidAuthority, //无操作权限
e_CheckedAlready, //风格已被审核
e_UsernameExist,
e_OpenFileFailed,
e_NeedRepeat, //需重发消息
e_VipExceeded, //VIP用户设备数超限
e_UserLocked, //账户被冻结
e_UserDeleted, //账户已删除
e_ExtraEnd
};
#pragma pack (2)
/////////////////////////////////////////////////////////
// 通道信息
typedef struct tagChan{
char no; //通道号
char prog; //乐器号
char vol; //音量
tagChan(){
no = prog = vol = -1;
}
}TCHAN, *PTCHAN;
//风格详细信息结构体
typedef struct tagStyleDetail{
int size;
int idAuthor; //作者ID
short iTempo; //原速
short iTimesignature; //节拍 ( 0=4/4, 1=3/4, 2=2/4, 3=6/8 )
char type[4]; //风格分类
char nSegNum[4]; //伴奏/加花/前奏/尾奏个数
//以下部分可变长度传输和存储
char strAuthor[40]; //作者名称 UTF8
char strStyleName[40]; //风格名称 UTF8
char strDescription[120]; //风格描述 UTF8
char aIntroBars[8]; //前奏小节数
char aEndingBars[8]; //尾奏小节数
char chordRecom[8]; //推荐和声进行
TCHAN tracks[4][8][16]; //伴奏/加花/前奏/尾奏轨道信息 (前/尾奏0/2/4/6大调 1/3/5/7小调)
// char progs[4][8][3]; //伴奏/加花/前奏/尾奏主要乐器 (前/尾奏0/2/4/6大调 1/3/5/7小调)
tagStyleDetail(){
size = sizeof(tagStyleDetail);
idAuthor = iTempo = iTimesignature = 0;
memset( type, -1, sizeof(type) );
memset( nSegNum, 0, sizeof(nSegNum) );
memset( strAuthor, 0, sizeof(strAuthor) );
memset( strStyleName, 0, sizeof(strStyleName) );
memset( strDescription, 0, sizeof(strDescription) );
memset( aIntroBars, 0, sizeof(aIntroBars) );
memset( aEndingBars, 0, sizeof(aEndingBars) );
memset( chordRecom, -1, sizeof(chordRecom) );
// memset( progs, -1, sizeof(progs) );
}
}TSTYLEDETAIL, *PTSTYLEDETAIL;
//风格信息结构体
typedef struct tagStyleInfo{
UINT idStyle; //风格ID
WORD cost; //使用消费
WORD score; //评分 (score/100)10分制
int paid; //支付次数
int state; //状态
TSTYLEDETAIL detail; //详细信息
tagStyleInfo(){
idStyle = 0;
cost = 0;
score = 0;
paid = 0;
state = 0;
}
}TSTYLEINFO, *PTSTYLEINFO;
typedef struct tagMyStyleInfo
{
TSTYLEINFO tStyleInfo;
int iStyleDownSate; /* 风格下载状态 */
tagMyStyleInfo(){
iStyleDownSate = 0;
}
}DEFTSTYLEINFO,*LPDEFTSTYLEINFO;
//版本结构体
typedef struct
{
WORD majorVersion; //主版本号
WORD minorVersion; //次版本号(客户端类型0=Windows版, 1=Android版, 2=iOS版, 3=风格合成, 4=风格审核 )
WORD modifyVersion; //修改版本号
WORD buildVersion; //编译版本号
}TVERSION, *PTVERSION;
#define MAX_DESCRIB_LENGTH 1024
//软件信息结构体
typedef struct tSoftwareInfo{
int size;
TVERSION version;
UINT nFileSize;
UINT tIssueDate;
char strDescribe[MAX_DESCRIB_LENGTH];
tSoftwareInfo(){
memset( this, 0, sizeof(tSoftwareInfo) );
size = sizeof(tSoftwareInfo);
};
} TSOFTWAREINFO, *PTSOFTWAREINFO;
#pragma pack (4)
//账户信息结构体
typedef struct tAccountInfo{
int ID; //用户ID
UINT authority; //用户权限
int balance; //帐户余额(唱作音符)
int pops; //魅力值
int fans; //粉丝数
int songs; //歌曲数
int vipPeriod; //VIP时长:-1=终身 0=非VIP 其它=vip剩余秒数
tAccountInfo(){
memset( this, 0, sizeof(tAccountInfo) );
};
}TACCOUNTINFO, *PTACCOUNTINFO;
//用户信息结构体
typedef struct tUserInfo{
char strUserName[32];
char strPassword[80];
char strNickName[32]; //用户昵称
char strIconFile[32]; //用户头像
TACCOUNTINFO accountInfo; //账户信息
int ownStyleNum; //已购买风格数
int arrStyleId[16]; //已购买风格ID数组
tUserInfo(){
memset( strUserName, 0, 32 );
memset( strPassword, 0, 80 );
memset( strNickName, 0, 32 );
memset( strIconFile, 0, 32 );
memset( arrStyleId, 0, 16 );
ownStyleNum = 0;
};
}TUSERINFO,*PTUSERINFO;
//字符串对结构体
typedef struct tStringPair{
char str1[320];
char str2[640];
tStringPair(){
memset( str1, 0, 320 );
memset( str2, 0, 640 );
}
} TSTRINGPAIR, *PTSTRINGPAIR;
//上传歌曲信息结构体
typedef struct tSongInfo{
int size; //结构大小
char strSongName[64]; //歌曲名
int iTempo; //速度
char iTS; //节拍
char iCreation; //创作类型 (1:原创 3:改编)
char iSubmit; //提交审核状态(0:不提交,1:自动提交)
char iSingerType; //演唱人类别 (1:男;2:女;3:组合;4:其他;0:未知)
char strSinger[32]; //演唱
char strOriginal[32]; //原唱
char strLyricist[32]; //作词
char strComposer[32]; //作曲
char strArranger[32]; //编曲
char iMusicStyle[4]; //曲风
UINT aStyleIDs[32]; //使用的风格ID
char strDescription[640];//歌曲描述
char* strLyric; //歌词
char* strMp3Name; //mp3临时文件
char* strIconName; //封面临时文件
//上传工程文件
UINT cpjVersion; //工程版本号
int cpjPrice; //下载收费
char* strCpjName; //工程文件名
tSongInfo(){
memset( this, 0, sizeof(tSongInfo) );
memset( iMusicStyle, -1, 4 );
size = sizeof(tSongInfo);
};
~tSongInfo(){
if( strLyric )
delete[] strLyric;
if( strMp3Name )
delete[] strMp3Name;
if( strIconName )
delete[] strIconName;
if( strCpjName )
delete[] strCpjName;
};
} TSONGINFO, *PTSONGINFO;
//上传歌曲返回分享信息结构
typedef struct tShareInfo{
UINT idSong; //歌曲ID
char strSongURL[256]; //歌曲文件URL
char strCoverURL[256]; //歌曲封面URL
tShareInfo(){
memset( this, 0, sizeof(tShareInfo) );
};
} TSHAREINFO, *PTSHAREINFO;
#pragma pack()
extern String u_strTable[];
extern String u_strAlphaTable[];
extern char * GM_INSTRUMENT[];
extern char * LSZ_STYLTYPES[];
#endif