//--------------------------------------------------------------------------- #ifndef GlobalUnitH #define GlobalUnitH //#include "commonstruct.h" //#include "Instruments.h" #include "CommonUnit.h" //--------------------------------------------------------------------------- /***************************************************************************************/ // 全局定义 /***************************************************************************************/ #define APPNAME "唱作魔方\0" #define SOFTWARE_ID e_Ac_Windows #define DLLAPI __stdcall #define CS_VERSION MAKELONG( 3, 4 ) #define MM_VERSION MAKELONG( 2, 2 ) #define SM_VERSION MAKELONG( 1, 2 ) #define MINUM_COLUMN 5 #define MINUM_ROW 6 #define MAX_PATH 260 #define URL_HOMEPAGE 0 //网站主页 #define URL_USERCENTER 1 //用户中心页 #define URL_SONGMANAGE 2 //歌曲管理页 #define URL_SOFTWARE 3 //软件下载页 #define URL_USERNOTICE 4 //用户消息页 #define URL_TECHFORUM 5 //技术论坛 #define URL_SHAREPLAY 6 //分享播放页 #define URL_JASONQUERY 7 //JASON #define URL_RECHARGE 8 //充值页 #define URL_VIPMEMBER 9 //VIP会员页 #define URL_SONGPLAY 10 //歌曲播放页 #define URL_COINSPEC 11 //唱作音符说明 #define URL_EXTFONT 12 //扩展音色库下载页 #define URL_USERAGREEMENT 13 //用户协议页 #define URL_REGCODE 14 //注册验证码接口 #define URL_RESETPASS 15 //重置密码页 #define CELL_ABSORB_WIDTH 10 #define CHORD_WHOLE_BAR 1 #define CHORD_HALF_BAR 0 #define ID_INITIAL_BAR 1 #define CHORD_TYPE_NUM 4 #define KEY_NUM 12 #define COMPOSE_INTRO_1 0x100 //前奏1 #define COMPOSE_ENDING_1 0x110 //尾奏1 #define MAX_INTRO_NUM 4 #define MAX_ENDING_NUM 4 #define COMPOSE_FILL_NUM 2 #define STAGE_VAR_NUM 4 #define PAGE_RECORDONLY 0x2 #define PAGE_SETUPRECORD 0x3 #define PAGE_COMPLETEONLY 0x10 #define PAGE_ALL 0x1F #define LIST_MELODYBARS 0x01 #define LIST_MELODYCHORDS 0x02 #define LIST_MELODYSTAGES 0x04 #define LIST_COMPOSESTAGES 0x08 #define LIST_COMPLETEVOLS 0x10 #define LIST_MELODYVOLS 0x20 #define LIST_ALL 0x3F #define OPERATION_INSERTSTAGE 0x001 #define OPERATION_DELETESTAGE 0x002 #define OPERATION_DELETECHORD 0x004 #define OPERATION_DELETEALLCHORD 0x008 #define OPERATION_STAGEVAR 0x010 #define OPERATION_FILL 0x020 #define OPERATION_CHANGETEMPLATE 0x040 #define OPERATION_COMPLEMENT 0x080 #define OPERATION_ADJUSTTRACEVOL 0x100 #define TIMER_ACCURACY 1 #define TIMER_PLAY_INTERVAL 25 //媒体时间间隔 #define POINT_RECORD_BLANK 2 //录音延迟2个点(50ms) #define TIME_HINT 500 #define CHANNEL_MELODY 0 #define MELODY_DEF_VOLUMN 90 #define MIDI_EVENT_INSTRUMENT 2 #define MIDI_EVENT_VOLUME 12 #define INPUT_TYPE_UNDEF 0x00 #define INPUT_TYPE_DIGITAL 0x01 #define INPUT_TYPE_LINE 0x02 #define INPUT_TYPE_MIC 0x03 #define INPUT_TYPE_SYNTH 0x04 #define INPUT_TYPE_CD 0x05 #define INPUT_TYPE_PHONE 0x06 #define INPUT_TYPE_SPEAKER 0x07 #define INPUT_TYPE_WAVE 0x08 #define INPUT_TYPE_AUX 0x09 #define INPUT_TYPE_ANALOG 0x0a #define MAX_FX_NUM 11 #define FX_ECHO 0x00 #define FX_DISTORTION 0x01 #define FX_ROTATE 0x02 #define FX_REVERB 0x03 #define FX_COMPRESSOR 0x04 #define FX_WAH 0x05 #define FX_CHORUS 0x06 #define FX_PARAMEQ 0x07 #define FX_PHASER 0x08 #define FX_PITCH 0x100 #define FX_APR 0x101 #define SAVE_SONG 0x01 #define SAVE_COMPOSE 0x02 #define SAVE_COMPOSESONG 0x03 #define SAVE_AUDIO 0x04 #define SAVE_BASE 0x08 #define SAVE_BASEAUDIO 0x0C #define TYPE_BASECOMPOSE 0x01 #define TYPE_COMPOSE 0x02 #define TYPE_AUDIO 0x04 #define TYPE_SONG 0x08 #define TYPE_BEAT 0x10 #define TYPE_AUDIO_BASECOMPOSE 0x05 #define TYPE_SONG_COMPOSE 0x0A #define TYPE_MUTEBEAT 0x100 #define TYPE_LOOPPLAY 0x200 #define TYPE_PREDEFINE 0x400 #define BASS_ERROR_BASE 0x80000000 #define E_PROJ_NOERROR 0x80000100 #define E_PROJ_FILENOTEXIST 0x80000101 #define E_PROJ_LATERVERSION 0x80000102 //后期版本号 #define E_PROJ_PROVERSION 0x80000103 //专业版版本号 #define E_PROJ_INVALIDVERSION 0x80000104 //无法识别的版本号 #define E_PROJ_FILECRUPT 0x80000105 #define E_PROJ_CANTLOADAUDIO 0x80000106 #define E_PROJ_INVALIDSTYLE 0x80000107 #define E_PROJ_INVALIDFONT 0x80000108 #define E_PROJ_INVALSTAGESTYLE 0x80000109 #define MAX_RECENT_PROJECT 6 #define MAX_MENU_STRLEN 80 #define AUTOSAVE_FILENAME "temp\\~last.sav" //add by tj 2013/1/3 //#define AUTOSAVE_PERIOD ( 10*60*1000 ) #define STYLESORT_UP 0 //add by tj 2013/7/1 #define STYLESORT_DOWN 1 #define STYLESORT_TIME 0 #define STYLESORT_PRICE 1 #define STYLESORT_SCORE 2 #define FILETYPE_MP3 0 #define FILETYPE_WAVE 1 #define FILETYPE_MIDI 2 #define PROJ_MODE_AUTO 0 #define PROJ_MODE_NORMAL 1 #define PROJ_MODE_UPLOAD 2 #define SAFE_FREE(p) { if(p) { free(p); (p)=NULL; } } #define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } } #define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p); (p)=NULL; } } #define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } } // 消息定义 #define MSG_PLAY_RANGE WM_USER + 0x100 #define MSG_PLAY_END WM_USER + 0x101 #define MSG_PLAY_FAILED WM_USER + 0x102 #define MSG_PLAY_ABORT WM_USER + 0x104 #define MSG_OPERATE_FAILED WM_USER + 0x105 #define MSG_OPERATE_PERCENT WM_USER + 0x106 #define MSG_OPERATE_COMPLETE WM_USER + 0x107 #define MSG_RECORD_FAILED WM_USER + 0x108 #define MSG_RECORD_COMPLETE WM_USER + 0x109 #define MSG_RECORD_VOLJUST WM_USER + 0x10A #define MSG_MEASURE_0 WM_USER + 0x110 #define MSG_MEDIATIME WM_USER + 0X115 #define MSG_SETSCROLLPOS WM_USER + 0x120 #define MSG_OPERATE_NEXTRANGE WM_USER + 0x121 #define MSG_NETWORKMESSAGE WM_USER + 0x130 #define MSG_NETWORKERROR WM_USER + 0x131 #define MSG_PAYMENTCONFIRMED WM_USER + 0x133 // 界面消息 #define UM_RESTORE WM_USER + 0x1000 #define UM_SHOWSYSMENU WM_USER + 0x1001 #define UM_SHOWNEXTPAGE WM_USER + 0x1002 #define UM_TEINVALIDATE WM_USER + 0x1003 #define UM_LOGIN WM_USER + 0x1004 #define UM_ENABLERELOAD WM_USER + 0x1005 #define UM_SELECTSTYLE WM_USER + 0x1006 #define UM_LOADPROJECT WM_USER + 0x1007 #define UM_SAVEPROJECT WM_USER + 0x1008 #define UM_NEWPROJECT WM_USER + 0x1009 #define UM_AUDIOEFFECT WM_USER + 0x100a #define UM_NEWCOMERTASK WM_USER + 0x1010 #define UM_REFRESH_PAGE_STATE WM_USER + 0x1011 #define UM_SAVEMUSIC WM_USER + 0x1012 #define UM_UPLOADMUSIC WM_USER + 0x1013 #define UM_MICSETTING WM_USER + 0x1014 #define UM_JUMP_PAGE WM_USER + 0x1100 #define UM_SHOWABOUT WM_USER + 0x110a #define UM_OPENMANUAL WM_USER + 0x110b #define UM_OPENAUTOPROJ WM_USER + 0x1110 //add by tj 2013/1/2 #define UM_HANDLEAUTOPROJ WM_USER + 0x1111 #define UM_SHOWMORE WM_USER + 0x1112 #define UM_RELOAD WM_USER + 0x1113 #define UM_NOTIFICATION WM_USER + 0x1114 //add by tj 2014/04/17 #define UM_MUSICCOVER WM_USER + 0x1115 #define UM_UPLOADUSRICON WM_USER + 0x1116 #define UM_SETFONTPOSITION WM_USER + 0x1120 #define UM_HIDEPOPCONTROL WM_USER + 0x1121 #define UM_STARTCDTIMER WM_USER + 0x1122 //#define MDPX(x) (MulDiv(x,g_xDpi,96)) //#define MDPY(y) (MulDiv(y,g_yDpi,96)) #define DPIX(x) (x) #define DPIY(y) (y) #define REGKEY_SOFTWARE L"SOFTWARE\\iChangzuo\\AccompanyCube" #define REGKEY_AUTOLOG L"{0DF44EAA-FF21-4412-828E-260A8728E7F1}" /***************************************************************************************/ // 全局常量 /***************************************************************************************/ extern const COLORREF g_clrBackground, g_clrGrid, g_clrText, g_clrChordBk, g_clrFocus, g_clrPlayLine, g_clrStage[STAGE_VAR_NUM], g_clrStageDisable[STAGE_VAR_NUM], g_clrIntro[MAX_INTRO_NUM], g_clrIntroDisable[MAX_INTRO_NUM], g_clrEnding[MAX_ENDING_NUM], g_clrEndingDisable[MAX_ENDING_NUM]; extern const char *g_strDefaultSoundSet, *g_strSoundSetExt, *g_strMelodyKey[KEY_NUM], *g_strTimeSignature[4], *g_strTSName[4], *g_strIntro[MAX_INTRO_NUM], *g_strEnding[MAX_ENDING_NUM], *g_strStage, *g_strStageVar[STAGE_VAR_NUM], *g_strProjError[10], *g_strFill[COMPOSE_FILL_NUM]; extern const DWORD g_dwProjectVersion; /***************************************************************************************/ // 全局变量 /***************************************************************************************/ #include "ComposeStageUnit.h" #include "BackupUnit.h" struct FONTINFO { char strFileName[256]; char strFontName[80]; }; typedef vector FONTINFOLIST; extern FONTINFOLIST g_lstFonts; //音色库列表 extern MELODYBARLIST g_lstMelodyBars, //旋律小节表 g_lstMelodyBars_SVD; extern MELODYSTAGELIST g_lstMelodyStages, //旋律段落表 g_lstMelodyStages_SVD; extern COMPOSESTAGELIST g_lstComposeStages, //曲式结构段落表 g_lstComposeStages_SVD; extern BARVOLSLIST g_lstCompleteVols, //全曲音波表 g_lstCompleteVols_SVD; extern wstring g_strFontPath, // 音色库路径 g_strFontFile, // 音色库文件名 g_strFontFile_SVD, // 音色库文件名(已保存) g_strLastSaveFile, // 上次保存音乐文件名 g_strExecutePath, // 执行文件路径 g_strUserPath, // 用户路径 g_strExtFontsPath, //扩展音色库路径 g_strProjectName, // 工程文件名 g_strAutoProjName; // 自动保存文件名 extern vector g_lstRecentProject; //最近的工程文件 extern HANDLE g_hProjectEvent; //工程文件读写互斥变量 extern string g_strSelectedStyleName; // 选中风格名 extern vector g_lstStyleSelected; //选中风格类型集合 extern DWORD g_iSelectedStyleType; // 选定风格类型 extern char g_strCurrentVersion[20], g_strServerURL[256], g_strPlaybackDevice[256], //指定输出设备名 g_strRecordDevice[256]; //指定录音设备名 extern int g_iSelectedStyleID, // 选定风格ID g_iLastStyleID, // 上次使用的风格 g_idFont, // 选定音色库序号 g_iMelodyKey, // 主旋律调号 g_iComposeKey, // 伴奏调号,用于录音升降调 g_iMelodyTimeSignature, // 主旋律拍号 g_nMelodyTempo, // 主旋律速度 // g_lSongParam, // 全曲参数 // g_lSongVerifyParam, // 全曲鉴权参数 g_iLastSaveOption, // 上次保存选项 g_iLastSaveType, // 上次保存文件格式 g_iCurrentPage, // 保存工程时所处的页面 g_iWindowState, // 上次窗口模式 g_iPlaybackDevice, // 指定播放设备号 g_iPlaybackOutput, // 指定播放输出源 g_iRecordDevice, // 指定录音设备号 g_iRecordInput, // 指定设备输入源 g_nRecordChannels, // 录音通道数 g_iPreStageDefault, // 用户预设段落模式 g_iPreStyleSort, // 用户预设风格排序 g_iSelectedStyleID_SVD, g_iMelodyKey_SVD, // 主旋律调号(已保存) g_iMelodyTimeSignature_SVD,// 主旋律拍号(已保存) g_nMelodyTempo_SVD, // 主旋律速度(已保存) g_iComposeKey_SVD, g_arrIntroBarNum[MAX_INTRO_NUM],//全局风格前间奏小节数 g_arrEndingBarNum[MAX_ENDING_NUM]; //全局风格尾奏小节数 extern float g_fRecordVolume, //录音音量 g_fSpeakerVolume, //喇叭音量 g_fAudioVolume, //音频音量 g_fMusicVolume, //编曲音量 g_fRecordVolume_SVD, g_fSpeakerVolume_SVD, g_fAudioVolume_SVD, g_fMusicVolume_SVD; extern double g_dblStep, //播放步长 g_dblTimePerBar; //每小节时间(毫秒) extern bool g_bRecordAutoAdjust, //录音自动音量调节 g_bRecordMoniter, //启用录音监听 g_bShowRecordHint, //噪音侦测提示 g_bUpdateMandatory, //客户端需要强制更新 g_bMidiMelody, //导入MIDI旋律 g_bWeakup, //旋律弱起 g_bShowPlayTick, //显示小节节拍或时间 g_bPredefine, //预设工程(不自动编曲/接唱) g_bAudioLoaded, //音频已加载 g_bBaseComposeLoaded, //基本编曲已加载 g_bComposeLoaded, //编曲已加载 g_bSongLoaded, //全曲已加载 // g_bSongSaved, //全曲已保存 g_bAudioChanged, //初始录音修改 g_bSongChanged, //全曲录音修改 g_bSongNeedSave, //全曲录音需保存 g_bRecProtect, //内录保护 g_bShowProtectMsg, //是否显示内录保护消息 g_bAutoSave, //是否需要恢复工程 //add by tj 2013/12/30 g_bAutoDownloadStyle, //自动下载风格 g_bAutoOpenProject, //自动打开上次工程 g_bAutoOpenProjectEnable,//自动打开上次工程使能 g_bProjStylePaid, //工程风格支付更改 g_iShowType, //false,罗马,true,英文 g_bPrebeat, //使用预设风格节拍提示 g_bExtFontUsable, //扩展音色库可用 g_bExtFont, //使用扩展音色库 g_bCanStep; extern int g_aAudioEffects[MAX_FX_NUM], //启用的音效 g_aAudioEffects_SVD[MAX_FX_NUM]; extern DWORD g_aAudioEffectTypes[MAX_FX_NUM]; //音效类型 //extern DWORD g_iMacAddressNum; //mac地址个数 extern vector g_lstMacAddress; //mac地址regedit //extern vector g_lstMacAddressNew; extern String g_strMP3File; //mp3全曲文件名 extern UINT g_xDpi, g_yDpi; //High DPI 自适应 extern int g_szFont8, g_szFont9, g_szFont16; /***************************************************************************************/ // 全局函数 /***************************************************************************************/ ///////////////////////////////////////////////////////////////////////////////////////// // 风格处理函数段 // ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*SM_GetVersion)(); //功 能:获取版本信息 //输 入:无 //返回值:版本号 LOWORD=major, HIWORD=minor ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI int (*SM_Initialize)(); //函数名: Initialize //功 能: 模块初始化 //返 回 值: 成功返回0, 否则返回错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI int (*SM_Release)(); //功 能:释放对象 //输 入:无 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI bool (*SM_CheckStyle) ( int nID ); //函数名: CheckStyle //功 能: 检测模板的可用性 //输 入: 风格ID //返 回: 成功返回true,失败返回false ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI int (*SM_GetSegmentBarNum)( int bitPos, int nID); //函数名: GetSegmentBarNum //功 能: 分别获取前间奏、尾奏的小节个数 //输 入: //bitPos:0x100 - 0x10F 前间奏序号 //bitPos:0x110 - 0x11F 尾奏序号 //返 回: 成功返回小节个数,否则-1 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*SM_GetStyleRecomInfos)( int iTS, TSTYLEINFO aStyleInfos[], int *nInfoNum ); //int aStyleID[][3] , int *nStyleNum, int nBeat); //函数名: GetStyleRecomInfos //功 能: 获取推荐风格信息 //输 入: //返 回: 成功返回0,否则为错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// //弃用 //typedef DLLAPI HRESULT (*SM_GetStyleDemoData)( int& nDataLen, BYTE* pData, int bitPos, int nID ); //函数名: GetStyleDemoData //功 能: 获取风格试听数据 //输 入: //nDataLen 返回数据长度 //pData 返回试听数据 //bitPos 试听部分 -1=完整(Vx+Ix+Ex) 0x000-0x00F=伴奏 0x100-0x10F=前奏 0x110-0x11F=尾奏 //nID 风格ID //返 回 值: 成功返回0, 否则返回错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*SM_GetStyleDemo)( int& nDataLen, BYTE* pData, int iStyleID, int iSegType, int iSegNo, int iKey, int iChordType ); //函数名: GetStyleDemo //功 能: 获取风格试听片段(指定调号及调性) //输 入: //nDataLen 返回数据长度 //pData 返回试听数据 //iStyleID 风格ID //iSegType 试听片段 -1=伴奏组合(Vx) 0=伴奏 1=前奏 2=尾奏 //iSegNo 试听类型 伴奏1-4,前尾奏1-2 iSegType=-1时忽略 //iKey 试听调号 -1=任意调 //iChordType 大小调 -1=任意 0=大调 1=小调 //返 回 值: 成功返回0, 否则返回错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*SM_GetStyleInfo)( int ID, TSTYLEINFO *tStyle ); //函数名: GetStyleInfo //功 能: 获取指定ID的信息 //输 入: //返 回: 成功返回0,否则为错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*SM_GetStyleInfos)( int iTS, TSTYLEINFO aStyleInfos[], int *nInfoNum ); //函数名: GetStyleInfos //功 能: 获取指定节拍的风格信息列表 //输 入: //返 回: 成功返回0,否则为错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*SM_InputWavNotes)( BYTE keys[], WORD delay[], int len, int tick, BYTE iTimeSignature, int nTempo, int* nBarNum ); //功 能: 针对音频输入,设置音符数组、速度(nTempo)、拍号、tick等 //输 入: key 音符序号数组 // delay 音符时长数组 // len 音符数组大小 // tick 每拍tick数 // iTimeSignature 拍号 // nTempo 速度 // nBarNum 旋律小节数(返回) //返 回: 无 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*SM_BaseCompose)( int iKey, int *nBufferLength, BYTE* pBuffer, int* nStages, int aStages[][2], int* nChords, int aChords[][2], int* nFills, int aFills[][2], //加花数量及位置 int iStyleID ); //增加默认模板文件名 //函数名: BaseCompose //功 能: 执行自动编曲与界面编曲之间的数据交互,获取伴奏文件块内存; //输 入: 0=-1获取重设调号后的当前音符数组 //返回值:实际数组大小,或错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*MM_CreateRealTimeMIDIStream)( bool bDrum ); //功 能:创建实时MIDI流 //输 入:bDrum 鼓通道 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*MM_FreeRealTimeMIDIStream)(); //功 能:释放实时MIDI流 //输 入:无 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*MM_RealTimeMIDINoteOn)(unsigned char iNote); //功 能:实时MIDI流打开音符 //输 入:iNote 音符序号 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*MM_RealTimeMIDINoteOff)(unsigned char iNote); //功 能:实时MIDI流关闭音符 //输 入:iNote 音符序号 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*MM_PlayStyleDemo)( LPBYTE lpStyleDemoData, DWORD dwDataSize, int nTempo ); //功 能:播放风格试听 //输 入:lpStyleDemoData 风格试听数据 // dwDataSize 数据长度 // nTempo 播放的速度 0=原速 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*MM_SetTempo)( int nTempo ); //功 能:设置速度 //输 入:nTempo 速度(拍/分钟) //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*MM_SetTimeSignature)( int nTimeSignature ); //功 能:设置节拍 //输 入:nTimeSignature 节拍(0=4/4, 1=3/4, 2=2/4, 3=6/8 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI DWORD (*MM_GetAudioVolume)( double dblPoint ); //功 能:旋律文件输入时获取Audio的音量 //输 入:dblPoint 指定获取音量的小节位置 //返回值:当前音量 LOWORD左声道,HIWORD右声道 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI DWORD (*MM_GetStreamVolume)( int iStreamType ); //功 能:获取音频流音量 //输 入:iStreamType 音频流类型:0=master; 1=Record; 2=Audio; 3=BaseCompose; // 4=Compose; 5=Song; 6=Output //返回值:当前音量 LOWORD左声道,HIWORD右声道 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*MM_SetStreamVolume)( int iStreamType, float fVolume ); //功 能:设置音频流音量 //输 入:iStreamType 音频流类型:0=master; 1=Record; 2=Audio; 3=BaseCompose; // 4=Compose; 5=Song // fVolume 音量大小 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI float (*MM_GetLatency)( bool bCountIn ); //功 能:获取设备延迟 //输 入:bCountIn 是否计算输入延迟 //返回值:延迟时间(ms) ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI LONG (*MM_GetStreamLength)( int iStreamType ); //功 能:获取音频流长度 //输 入:iStreamType 音频流类型:0=master; 1=Record; 2=Audio; 3=BaseCompose; // 4=Compose; 5=Song //返回值:音频流长度值,-1为无效 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*MM_SetStreamLength)( int iStreamType, DWORD msLen ); //功 能:设置音频流长度 //输 入:iStreamType 音频流类型:仅支持音频修改长度 2=Audio // msLen 时间长度(毫秒) //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*MM_ActiveAPR)( BOOL bActive ); //功 能:启用APR功能 //输 入:bActive 激活/关闭 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI long (*MM_SaveProject)( int iMode, HWND hNotifyWnd, LPCSTR strFileName ); //功 能:保存工程文件 //输 入:iMode 工程模式 0=ATUO, 1=NORMAL, 2=UPLOAD // hNotifyWnd 接收消息的窗口句柄 // strFileName 工程文件名 //返回值:写入字节数 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*MM_LoadProject)( int iMode, HWND hNotifyWnd, LPCSTR strFileName, LONG lBeginPos, DWORD dwVersion ); //功 能:载入工程文件 //输 入:iMode 工程模式 0=ATUO, 1=NORMAL, 2=UPLOAD // hNotifyWnd 接收消息的窗口句柄 // strFileName 工程文件名 // lBeginPos 开始读取的位置 // dwVersion 载入文件的版本号 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*MM_UserCanceled)(); //功 能:用户取消媒体文件操作 //输 入:无 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*MM_LoadAnalysis)( HWND hNotifyWnd, LPCWSTR strFileName, LONG lBeginPos, DWORD dwVersion ); //功 能:载入旋律分析数据 //输 入:hNotifyWnd 接收消息的窗口句柄 // pFile 读取的文件 // dwVersion 载入文件的版本号 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*MM_LoadAudioMP3)( HWND hNotifyWnd, LPCWSTR strFileName, LONG lBeginPos, DWORD dwVersion ); //功 能:载入原始录音MP3 //输 入:hNotifyWnd 接收消息的窗口句柄 // pFile 读取的文件 // lPos 开始读取的位置 // dwVersion 载入文件的版本号 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*MM_LoadSongMP3)( HWND hNotifyWnd, LPCWSTR strFileName, LONG lBeginPos, DWORD dwVersion ); //功 能:载入全曲录音mp3 //输 入:hNotifyWnd 接收消息的窗口句柄 // pFile 读取的文件 // lPos 开始读取的位置 // dwVersion 载入文件的版本号 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*MM_SetFxPreset)( DWORD iFxType, int iFxNo ); //功 能:设置音效 //输 入: // iFxType 音效号 // iFxNo 音效预置号 0=关闭 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// extern MM_GetVersion f_MM_GetVersion; extern MM_InitialObjects f_MM_InitialObjects; extern MM_DestroyObjects f_MM_DestroyObjects; extern MM_LoadMidiMelody f_MM_LoadMidiMelody; extern MM_GetFontInfo f_MM_GetFontInfo; extern MM_CheckExtFont f_MM_CheckExtFont; extern MM_SetFont f_MM_SetFont; extern MM_Record f_MM_Record; extern MM_LoadBaseCompose f_MM_LoadBaseCompose; extern MM_LoadCompose f_MM_LoadCompose; extern MM_LoadPrebeat f_MM_LoadPrebeat; extern MM_Play f_MM_Play; extern MM_Stop f_MM_Stop; extern MM_CheckIODevice f_MM_CheckIODevice; extern MM_SetIODevice f_MM_SetIODevice; extern MM_GetPlaybackDeviceInfo f_MM_GetPlaybackDeviceInfo; extern MM_GetPlaybackOutputInfo f_MM_GetPlaybackOutputInfo; extern MM_GetRecordDeviceInfo f_MM_GetRecordDeviceInfo; extern MM_GetRecordInputInfo f_MM_GetRecordInputInfo; extern MM_RecordTest f_MM_RecordTest; extern MM_SetRecordMoniter f_MM_SetRecordMoniter; extern MM_SetRecordAutoAdjust f_MM_SetRecordAutoAdjust; extern MM_SetRecordProtect f_MM_SetRecordProtect; extern MM_ShowAsioPanel f_MM_ShowAsioPanel; extern MM_RestartAsioDevice f_MM_RestartAsioDevice; extern MM_LoadAudio f_MM_LoadAudio; extern MM_ClearAudio f_MM_ClearAudio; extern MM_GetMelodyInfo f_MM_GetMelodyInfo; extern MM_GetMelody f_MM_GetMelody; extern MM_CreateRealTimeMIDIStream f_MM_CreateRealTimeMIDIStream; extern MM_FreeRealTimeMIDIStream f_MM_FreeRealTimeMIDIStream; extern MM_RealTimeMIDINoteOn f_MM_RealTimeMIDINoteOn; extern MM_RealTimeMIDINoteOff f_MM_RealTimeMIDINoteOff; extern MM_PlayStyleDemo f_MM_PlayStyleDemo; extern MM_SetTempo f_MM_SetTempo; extern MM_SetTimeSignature f_MM_SetTimeSignature; extern MM_GetAudioVolume f_MM_GetAudioVolume; extern MM_GetStreamVolume f_MM_GetStreamVolume; extern MM_SetStreamVolume f_MM_SetStreamVolume; extern MM_GetLatency f_MM_GetLatency; extern MM_GetStreamLength f_MM_GetStreamLength; extern MM_SetStreamLength f_MM_SetStreamLength; extern MM_CombineSong f_MM_CombineSong; extern MM_Save f_MM_Save; extern MM_SaveProject f_MM_SaveProject; extern MM_LoadProject f_MM_LoadProject; extern MM_UserCanceled f_MM_UserCanceled; extern MM_LoadAnalysis f_MM_LoadAnalysis; extern MM_LoadAudioMP3 f_MM_LoadAudioMP3; extern MM_LoadSongMP3 f_MM_LoadSongMP3; extern MM_ActiveAPR f_MM_ActiveAPR; extern MM_SetFxPreset f_MM_SetFxPreset; ///////////////////////////////////////////////////////////////////////////////////////// string wstr2str(const wstring& _src); wstring str2wstr(const string& _src); string UTF8ToMBCS(const char *pcUtf8); string GBToUTF8(const char* str); void DebugPrint(const char * fmt, ...); ///////////////////////////////////////////////////////////////////////////////////////// // ClientService函数段 // extern TSOFTWAREINFO g_infoSoftwareUpdate; extern int g_nBuildVersion; extern TUSERINFO g_infoUser; extern TSONGINFO g_infoSong; extern bool g_bAutoLogin, g_bLogon; ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*CS_GetVersion)(); //功 能:获取版本信息 //输 入:无 //返回值:版本号 LOWORD=major, HIWORD=minor ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*CS_InitialService)( HWND hWnd, int iClientType, PTSOFTWAREINFO pSofewareInfo, char* strURL, char* strRoot, char idDevice[6] ); //功 能:初始化客户端服务 //参 数:hWnd 函数调用窗口句柄 // iClientType 客户端类型(软件内部编号) // pSofewareInfo[in,out] 传入当前版本,获取更新版本 // strURL 网站服务器名称 http://xxx.xxx.xxx:xx/ // strRoot 资源文件根目录 // idDevice 设备号 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*CS_DestroyService)(); //功 能:解除客户端服务 //输 入:无 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*CS_Register)( PTUSERINFO pUserInfo, int isEmailOrMobile ); //功 能:用户注册 //参 数:pUserInfo[in,out] 传入用户名和密码,输出用户信息 // isEmailOrMobile 捆绑邮箱或手机号 1=邮箱 2=手机号 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*CS_Login)( PTUSERINFO pUserInfo, BOOL bSync ); //功 能:用户登录 //参 数:pUserInfo[in,out] 传入用户名和密码,输出用户信息 // bSync 同步=TURE,异步=FALSE //返回值:错误号 // 正常登录 = 0 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*CS_Logoff)(); //功 能:注销或取消登录 //参 数:无 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*CS_CancelOperation)(); //功 能:取消操作 //参 数: //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT(*CS_DownloadStyle)(UINT idStyle, HWND hProcessWnd); // 功 能:下载风格数据 // 参 数:idStyle 风格ID // hProcessWnd 消息接收窗口 // 返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*CS_GetQnA)( int& nQnANum, TSTRINGPAIR arrQnA[], bool bLocal, UINT idUser ); //功 能:获取问题与回答 //参 数:nQnANum 返回问题个数 // arrQnA 返回问题数组 // bLocal true = 本机提问, false = 常见问题 // idUser 用户ID //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*CS_SubmitQnA)( UINT idUser, char* strQuestion ); //功 能:提交问题 //参 数: // idUser 用户ID // strQuestion 问题内容 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*CS_GetNotice)( int& nNoticeNum, TSTRINGPAIR arrNotice[], UINT idUser ); //功 能:获取公告或通知 //参 数:nNoticeNum 返回通知个数 // arrNotice 返回通知数组 // idUser 用户ID //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI int (*CS_GetNewNoticeNum)( int idUser ); //功 能:获取未读公告或通知数 //参 数: // idUser 用户号,=0为公告 //返回值:通知个数 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*CS_UploadSong)( UINT idUser, TSONGINFO* pSongInfo, HWND hProcessWnd, TSHAREINFO* pShareInfo ); //功 能:上传歌曲 //参 数:idUser 用户ID // pSongInfo 歌曲信息 // hProcessWnd 进度消息接收窗口 // pShareInfo 分享信息 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*CS_GetWebPageURL)( int iType, char* strURL ); //功 能:获取网站操作URL //参 数: // iType 访问页面:0-首页,1-个人中心,2-歌曲管理 // strURL 输出URL字符串 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*CS_GetStyleNums)( int& nOnline, int& nLocal ); //功 能:获取风格数 //参 数: // nOnline 有效在线数 // nLocal 本地下载数 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*CS_CheckPayment)( UINT idUser, int iOperation, int nStyleNum, UINT arrStyleIDs[], int arrCosts[], int *pCost, int *pBalance ); //功 能:检查支付 //输 入:idUser 用户ID //--iOperation[in]:操作 0=使用 1=编辑 //--nStyleNum[in]:风格个数 //--arrStyleIDs[in]:风格ID数组 //--arrCosts[out]:风格当前消耗值 //--pCost[out]: 定义int接收实际消耗 //--pBalance[out]: 定义int变量接收用户音符数余额 //--返 回: 错误值 ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*CS_ConfirmPayment)( UINT idUser, int iOperation, int nStyleNum, UINT arrStyleIDs[], int *pBalance ); //功 能:确定支付 //输 入:idUser 用户ID //--iOperation[in]:操作 0=使用 1=编辑 //--nStyleNum[in]:风格个数 //--dwStyleID[in]:风格ID数组 //--pBalance[out]: 定义int变量接收用户音符数余额 //--返 回: 错误值 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI HRESULT (*CS_AutoDownloadStyle)( bool bSet ); //功 能:自动下载风格 //参 数: // bSet 设置/取消自动下载 //返回值:错误号 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI int (*CS_SaveProject)( LPCSTR strFileName ); //功 能:保存工程文件 //输 入: // strFileName 工程文件名 //返回值:写入字节数 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI int (*CS_LoadProject)( LPCSTR strFileName, UINT lBeginPos, DWORD dwVersion ); //功 能:载入工程文件 //输 入: // strFileName 工程文件名 // lBeginPos 开始读取的位置 // dwVersion 载入文件的版本号 //返回值:读取字节数 ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// typedef DLLAPI void (*CS_ResetProject)(); //功 能:重置工程参数 //输 入: //返回值: ///////////////////////////////////////////////////////////////////////////////////////// extern CS_GetVersion f_CS_GetVersion; extern CS_InitialService f_CS_InitialService; extern CS_DestroyService f_CS_DestroyService; extern CS_Register f_CS_Register; extern CS_Login f_CS_Login; extern CS_Logoff f_CS_Logoff; extern CS_CancelOperation f_CS_CancelOperation; extern CS_DownloadStyle f_CS_DownloadStyle; extern CS_GetQnA f_CS_GetQnA; extern CS_SubmitQnA f_CS_SubmitQnA; extern CS_GetNotice f_CS_GetNotice; extern CS_GetNewNoticeNum f_CS_GetNewNoticeNum; extern CS_UploadSong f_CS_UploadSong; extern CS_GetWebPageURL f_CS_GetWebPageURL; extern CS_GetStyleNums f_CS_GetStyleNums; extern CS_CheckPayment f_CS_CheckPayment; extern CS_ConfirmPayment f_CS_ConfirmPayment; extern CS_AutoDownloadStyle f_CS_AutoDownloadStyle; extern CS_SaveProject f_CS_SaveProject; extern CS_LoadProject f_CS_LoadProject; extern CS_ResetProject f_CS_ResetProject; ///////////////////////////////////////////////////////////////////////////////////////// // QR函数段 typedef int (*QR_Encode)( const char *string, unsigned char* pData ); extern QR_Encode f_QR_Encode; ///////////////////////////////////////////////////////////////////////////////////////// HRESULT GetMFFunctions( HINSTANCE hDll ); HRESULT GetMMFunctions( HINSTANCE hDll ); HRESULT GetCSFunctions( HINSTANCE hDll ); HRESULT GetQRFunctions( HINSTANCE hDll ); wstring GetStageName( int iStage ); wstring GetElementInfo( int iElem, int iList ); void UpdateGlobalStyle(); void ClearFontList(); void ClearGlobalVars( int iOperation=LIST_ALL ); void ClearSVDVars(); void SaveSVDVars(); //add by tj 2013/12/31 void SetPlayTimer(bool bStart, UINT& tTimer, UINT& tAccuracy, void* pUser=NULL); void GetPlayTime( int iStartBar, double dblStartPoint, char* strTime ); void CALLBACK OnMediaTimer(UINT tTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2); BOOL SaveProject( LPCSTR strProjectName, int iMode=0, HWND hNotifyWnd=NULL ); BOOL LoadProject( LPCTSTR strProjectName, HWND hNotifyWnd ); int LoadVersion1( FILE *pFile, LPCTSTR strProjectName, DWORD dwVersion, HWND hNotifyWnd ); int LoadVersion2( FILE *pFile, DWORD dwVersion, HWND hNotifyWnd, int iMode ); void UpdateRecentProject(wstring wstrProj);//更新最近工程列表 //add by tj 2013/12/31 BOOL HasProjectModified( int idStyle=-1 ); void SetInitVar( BOOL bClose=false ); void GetInitVar(); void SetAutoLogin( bool bAuto, LPCSTR strName, LPCSTR strPwd ); bool GetAutoLogin( char* strName, char* strPwd ); void GetAutoSaveReg(); void SetAutoSaveReg();//注册表增加自动保存 void ClearAutoProj(); void SaveAutoProj(); void SetMelodyTempo( int nTempo, bool bInit=false ); //设置旋律速度 void SetMelodyTS( int iTS, bool bInit=false ); //设置旋律拍号 void SetWavNotes(); bool UpdateStageBars(); bool UpdateSegmentBars(); void InitComposeStage(); bool ReloadBaseCompose(); bool GenerateBaseCompose(); bool ReloadCompose(int iKey=g_iMelodyKey); bool GenerateCompose( int iKey, bool bCombineSong ); int GetComposeData( COMPOSESTAGELIST lstComposeStages, int iKey, int& nDataSize, LPBYTE lpData, bool bCombineSong, int& nTimeSet, double (*aTimeSet)[2] ); int ActiveAPR( bool bActive ); void ResetAudioEffects(); bool IsProtected(); void SetTransparent( TComponent* pCtrl ); void UniDrawChord(TCanvas *Canvas, TRect rcDraw, int iMainKey, int iAjustKey, int iType); char* GetMacAdress(); #endif