PlaySound(fName.c_str(), NULL, SND_ASYNC);
工作了,但不完美
mciSendString((L"open \"" + fName + L"\" type waveaudio alias sample").c_str(), NULL, 0, NULL);
mciSendString(L"play sample", NULL, 0, NULL);
失败命令示例:
open "C:\qisdjqldlkjsqdjqdqjslkdjqlksjlkdjqsldjlqjsdjqdksq\dajdjqjdlqjdlkjazejoizajoijoifjoifjdsfjsfszjfoijdsjfoijdsoifoidsjfojdsofjdsoijfoisjfoijoisdjfosjfqsd\Windows Critical Stop.wav" type waveaudio alias sample
但是:
我真的需要使用mciSendString而不是PlaySound(),因为PlaySound()无法播放某些文件(48 khz音频文件,有时是24位文件等)
我需要能够播放潜在具有长路径的音频文件,因为我的应用程序的最终用户可能拥有这些文件
如何使mciSendString接受长文件名?
注意事项:
我也尝试了使用mciSendCommand的MSDN示例,但结果相同。
最大路径+文件名长度为127(127:工作正常,128+:不工作)
如果真的无法使
mci*
函数与超过127个字符的文件名一起工作,那么我应该使用什么替代方法,只使用winapi(不使用外部库)?(PlaySound不是选项,因为它无法可靠地处理所有wav文件,例如48 khz:不起作用等)
mciSendString
返回的MCIERROR
是什么?可能是MCIERR_FILENAME_REQUIRED
- 文件名无效。请确保文件名不超过八个字符,并以一个点和一个扩展名结尾。关于open
命令 - 这里必须是文件名还是设备名? - RbMmC:\Windows Critical Stop.wav
,但对于C:\qisdjqldlkjsqdjqdqjslkdjqlksjlkdjqsldjlqjsdjqdksq\dajdjqjdlqjdlkjazejoizajoijoifjoifjdsfjsfszjfoijdsjfoijdsoifoidsjfojdsofjdsoijfoisjfoijoisdjfosjfqsd\Windows Critical Stop.wav
不适用。 - Basj