用C ++播放音乐

时间:2018-12-05 11:07:21

标签: c++ multithreading winapi audio

我在用c ++播放mp3文件时遇到了一些问题(我为英语表示歉意,这不是我的母语)。我在程序中使用winapi播放音乐(我正在使用函数mciSendStringW)。我的程序将使用3个线程。主线程,用于输入/输出操作的线程,一个用于播放音乐的线程。我有两个问题:

  1. 我不知道音乐何时结束(我不知道歌曲的大小和长度)。我可以使用:

File "<ipython-input-42-76ab838299bc>", line 23, in dict_value_finder results = dict_value_finder(value, field, partial_match) NameError: name 'dict_value_finder' is not defined

但是我有第二个问题

  1. 如果我使用,我将无法停止音乐

mciSendStringW(LR"(play SongPath1.mp3 wait)", NULL, 0, NULL)

因为,程序将在此行中停止,直到歌曲结束。例如,用户关闭音乐,但是我不能说踩踏音乐,也不能杀死另一个线程中的音乐线程。但是如果我使用

mciSendStringW(LR"(play SongPath1.mp3 wait)", NULL, 0, NULL);

没有标记“ wait”,我可以这样写:

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();
}

不能播放第二首歌曲(或先播放一首),或者如果我使用:

mciSendStringW(LR"(play SongPath1.mp3)", NULL, 0, NULL);

程序无法关闭歌曲。

0 个答案:

没有答案
相关问题