0

我的目标是构建一个播放 MP3 文件的音频播放器。为此,我使用了该mciSendString()功能。所有 MP3 文件与主源文件位于同一文件夹中。尽管我无法播放 MP3 文件,但我已经在线查看了文档和一些语法。当我选择一首歌曲时,它不播放,并且代码跳到system("pause").

我的头文件

#include <iostream>
#include <windows.h>
#include <conio.h>
#pragma comment(lib, "Winmm.lib")

using namespace std;

播放 MP3 文件的功能:

void playsong()
{
    int song;
    system("cls");
    cout << "****************************" << endl;
    cout << "\tPLAYING SONG\n";
    cout << "****************************" << endl;
    cout << "List of Songs\n";
    cout << "1.0\n";
    cout << "2.AFSANAY\n";
    cout << "3.Agency\n";
       
    cin >> song;
    switch(song)
    {
        case 1:
        {
            mciSendString("open \"C:\\Users\Murad\Documents\3rd Semester\OOP\Assignments\Assignmnet 1\Assignmnet 1\0.mp3\" type mpegvideo alias mp3", NULL, 0, NULL);
            mciSendString("play mp3", NULL, 0, NULL); 
            break;
        }
        case 2:
        {
           mciSendString("open \"C:\\Users\Murad\Documents\3rd Semester\OOP\Assignments\Assignmnet 1\Assignmnet 1\AFSANAY.mp3\" type mpegvideo alias mp3", NULL, 0, NULL);
           mciSendString("play mp3", NULL, 0, NULL);
           break;
        }
        case 3:
        {
            mciSendString("open \"C:\\Users\Murad\Documents\3rd Semester\OOP\Assignments\Assignmnet 1\Assignmnet 1\Agency.mp3\" type mpegvideo alias mp3", NULL, 0, NULL);
            mciSendString("play mp3", NULL, 0, NULL);
            break;
        }
    }

    system("pause");
    system("cls");
    display();
}
4

1 回答 1

0

您的open命令没有正确转义,并且您没有检查返回值是否有错误。

但是即使没有发生错误,该play命令也是异步的,所以mciSendString()一旦开始播放,它仍然会立即退出。您需要指定wait等待播放完成的标志,否则使用该notify标志在播放完成时得到通知。请参阅等待、通知和测试标志

于 2022-01-08T20:18:52.513 回答