我正在尝试在c ++中的Mac上伴随glfw窗口播放声音。我目前的方法是在单独的线程中发出系统调用(afplay)来播放声音,并在需要时在主线程中使用“ killall afplay”将其停止。
当前情况是,killall系统调用正在阻止主线程,并且glfw窗口没有响应。当按ctrl + c时,提示“找不到属于您的匹配进程”,并且killall系统调用返回256。该ctrl + c退出系统调用。再次按ctrl + c组合键,我们退出主线程。
类似的方法适用于linux计算机。
直接从终端发出afplay和killall命令可以正常工作。
1,当我在“位置0”处调用stop_sound()时,它可以工作(第一个二进制文件正在播放声音,第二个二进制文件运行时声音被杀死),所以我认为这与glfw有关。 / p>
2,当我在“位置1”处调用stop_sound时,它仍然会阻塞。
3,使用新线程停止声音甚至分离声音都没有影响
void play_sound(){
system("afplay my_sound_file.wav");
}
void stop_sound(){
system("killall afplay");
}
main(){
//position 0
while (!glfwWindowShouldClose(window)) {
if(gui.R_key_pressed() && !play_sound){
std::thread audio(play_sound);
audio.detach();
play_sound = true;
}
if(gui.R_key_pressed() && play_sound){
stop_sound();
play_sound = false;
}
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
//position 1
exit(EXIT_SUCCESS);
}