[問題] MCI播放音樂問題

看板C_and_CPP (C/C++)作者 (安安你好)時間11年前 (2015/01/05 12:03), 11年前編輯推噓0(002)
留言2則, 1人參與, 最新討論串1/1
最近在寫一個小程式,需要播放語音檔案,第一次用MCI遇到了一點問題 以下是我的程式(開發平台Visual Studio 2010) int main(){ PlayMp3 (( char *) _T ( "D:\\talkkk\\voice\\0001.mp3")) ; system ( "pause" ); return 0; } void PlayMp3 ( char * pName ) { UINT DeviceID ; DeviceID = mciOpen . wDeviceID ; if ( pName != NULL ){ mciSendCommand ( DeviceID , MCI_CLOSE , NULL , ( DWORD )& mciPlay ); char buf [128]; mciOpen . lpstrDeviceType = ( LPCWSTR ) _T ( "mpegvideo" ); mciOpen . lpstrElementName = ( LPCWSTR ) pName ; mciError = mciSendCommand (0, MCI_OPEN , MCI_WAIT | MCI_OPEN_TYPE | MCI_OPEN_ELEMENT | MCI_CLOSE | MCI_STOP | MCI_RESUME | MCI_PAUSE | MCI_PLAY ,( DWORD )& mciOpen ); if ( mciError ){ mciGetErrorString ( mciError ,( LPWSTR ) buf ,128); return ; } DeviceID = mciOpen . wDeviceID ; mciError = mciSendCommand ( DeviceID , MCI_PLAY ,0 ,( DWORD )& mciPlay ); } else{ if ( mciError ){ printf("播放語音失敗\n"); return ; } } } 這個樣子是可以播放音樂的,但因為我要傳送到PlayMp3這個function的檔名是一個變數 ,所以我把他改寫成 int main(){ char f_voice[30]="D:\\talkkk\\voice\\"; char f_voiceend[10]=".mp3"; char namebuffer[50]="0001";//這個變數會隨需求改變 char f_voicefinal[40]; strcpy(f_voicefinal,f_voice); strcat(f_voicefinal,namebuffer); strcat(f_voicefinal,f_voiceend); PlayMp3 (( char *) voicefinal); system ( "pause" ); return 0; } 當然這樣是不能播放的,試過fv.Format(_T("%S"),f_voicefinal);將char轉成CString也 不行,想請問應該要怎麼寫才能順利地將變數傳入播放,謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 182.234.145.107 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1420430608.A.A94.html

01/05 13:11, , 1F
有error message 嗎? 這樣只看到你voicefinal名字寫錯
01/05 13:11, 1F

01/05 13:11, , 2F
少了f_
01/05 13:11, 2F
哈竟然不小心刪掉f_ error message是亂碼所以我也看不懂但我猜是資料型別的問題 我後來發現有人用wchar_t轉換 嘗試加入wchar_t後就解決了!! CString fv; fv.Format(_T("%S"),f_voicefinal); wchar_t command[40]; wcsncpy(command, fv, 40); play=PlayMp3 (( char *)command) ; 謝謝你的回答唷:) ※ 編輯: gingerr (182.234.145.107), 01/05/2015 21:38:18
文章代碼(AID): #1KgWqGgK (C_and_CPP)
文章代碼(AID): #1KgWqGgK (C_and_CPP)