[問題] MCI播放音樂問題
最近在寫一個小程式,需要播放語音檔案,第一次用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
01/05 13:11, 1F
→
01/05 13:11, , 2F
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
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章