【发布时间】:2012-12-06 15:35:23
【问题描述】:
我正在使用mciSendString("play path repeat",0,0,0) 在我的项目中播放音乐
我专门用它来同时播放多种声音。
问题是我想把声音放在可执行路径中 所以我使用了一个函数来获取exe路径
string ExePath() {
char buffer[MAX_PATH];
GetModuleFileName( NULL, buffer, MAX_PATH );
string::size_type pos = string( buffer ).find_last_of( "\\/" );
return string( buffer ).substr( 0, pos);
}
但是mciSendString() 需要LPCSTR 所以我尝试了以下
string music_cmd="play "+ExePath()+"\\war1.mp3 repeat";
mciSendString(music_cmd.c_str(),0,0,0);
程序运行时没有错误,但不播放声音。 我该如何解决这个问题?
【问题讨论】:
-
你试过使用调试器吗?
-
你可以看看this example。此外,您可能应该使用
mciSendcommand而不是mciSendString并使用the following example from Microsoft。 -
@DuXeN0N 是的,字符串包含 mp3 文件的确切路径
-
@Stan 第一个例子是在 c# 中,第二个例子也使用 LPSTR,我面临的唯一问题是我无法将 ExePath 与 LPCSTR 中的文件名正确合并,但是如果我直接指定文件名,它工作正常,例如 mciSendString("play c:\\war1.mp3",0,0,0);
-
@AliEssam 对于同一个 API 使用哪种语言并不重要。要点是您需要首先
open文件并在其“路径/名称”周围使用引号,其次您可以playopen字符串中提到的别名。微软的例子实际上也是如此。LPCSTR和LPSTR之间也没有太大区别,它只是一个 const 修饰符。
标签: c++ audio lpcstr mcisendstring