c++ - 用 C++ 播放音乐
问题描述
我在用 c++ 播放 mp3 文件时遇到了一些问题(我为我的英语道歉,这不是我的第一语言)。我在程序中使用 winapi 播放音乐(我正在使用函数 mciSendStringW)。我的程序将使用 3 个线程。主线程,一个用于输入/输出操作的线程和一个用于播放音乐的线程。我有两个问题:
- 我不知道,音乐什么时候结束(我不知道歌曲的大小和长度)。我可以用:
mciSendStringW(LR"(play SongPath1.mp3 wait)", NULL, 0, NULL)
但我有第二个问题
- 我无法停止音乐,如果我使用:
mciSendStringW(LR"(play SongPath1.mp3 wait)", NULL, 0, NULL);
因为,程序会停在这一行,直到歌曲结束。例如,用户关闭音乐,但是,我不能说停止音乐,也不能杀死另一个线程中的音乐线程。但是如果我使用
mciSendStringW(LR"(play SongPath1.mp3)", NULL, 0, NULL);
没有标志“等待”我可以写这样的东西:
mciSendStringW(LR"(play SongPath1.mp3 )", NULL, 0, NULL);
while(true){
g_song_mutex.lock(); /*global mutex for g_switch_off_music*/
if(g_switch_off_music) { /*global bool for switch off music*/
mciSendStringW(LR"(stop SongPath1.mp3)", NULL, 0, NULL);
return;
this_thread::sleep_for(chrono::milliseconds(300));
}
g_song_mutex.unlock();
}
但是我有不止一首歌曲,当第一首歌曲结束时,将开始 secong。但我不知道,歌曲何时结束。如果我使用编程:
mciSendStringW(LR"(play SongPath1.mp3)", NULL, 0, NULL);
无法播放第二首歌曲(或第一首重复),或者如果我使用:
mciSendStringW(LR"(play SongPath1.mp3 wait)", NULL, 0, NULL);
程序无法关闭歌曲。
解决方案
推荐阅读
- c# - 如何获取当前的 Azure FunctionNameAttribute?
- javascript - 使用 Input html 在 ReactJS 中的搜索栏 UI
- excel - 如何为 Win32 API 声明变量?
- scala - 在 Scala spark 中使用任何数据类型
- javascript - 如何使用moment.js获取从当前月份到过去一个月的所有月份列表
- javascript - 我如何编写一个脚本来不断重新加载并向端点发出请求,直到添加特定项目
- reactjs - 将 material-ui 类转换为函数
- python - python中文本分类的过采样?
- html - “rvest”未使用 html_nodes() 获取产品详细信息
- javascript - 如何使用命令在 discord.js 中获取服务器 ID 和频道 ID?