在Windows中播放音频

C++ Play audio in Windows

本文关键字:音频 播放 Windows      更新时间:2023-10-16

我目前正在做一个项目,我需要播放一个声音文件(这实际上是一个视频,但我只想播放声音)。有人告诉我,我可以使用PlaySound功能,但它目前不工作(它播放这个声音,当我运行而不是我想要的文件https://dl.dropboxusercontent.com/u/45453297/Windows%20Background.wav)

int _tmain(int argc, _TCHAR* argv[])
{
    PlaySound(TEXT("C:\Users\Ricardo\Documents\Visual Studio 2013\Projects\SomEVideo\SomEVideo\KinectAudio-02-23-32.wav"), NULL, SND_FILENAME);
    return 0;
}

在stdafx.h中我包含了这些头文件:

#include "windows.h"
#include "mmsystem.h"

我还链接了winmm。

谢谢。编辑:

在被告知路径错误后,我将文件名更改为"。wav"并将其放在硬盘根目录中以避免输入错误。我还尝试了PlaySounDW,把它当作一种资源来播放。以下是我到目前为止没有成功的信息:

int _tmain(int argc, _TCHAR* argv[])
{
    PlaySoundW(TEXT("C:/t.wav"), NULL, SND_FILENAME); //GetLastError returns 0
    PlaySoundW(TEXT("C:\t.wav"), NULL, SND_FILENAME); //GetLastError returns 0
    PlaySoundW(TEXT("t.wav"), NULL, SND_FILENAME); //GetLastError returns 0
    PlaySound(TEXT("C:/t.wav"), NULL, SND_FILENAME); //GetLastError returns 0
    PlaySound(TEXT("C:\t.wav"), NULL, SND_FILENAME); //GetLastError returns 0
    PlaySound(TEXT("t.wav"), NULL, SND_FILENAME); //GetLastError returns 0
    PlaySoundW(MAKEINTRESOURCE("C:/t.wav"), GetModuleHandle(NULL), SND_RESOURCE); //GetLastError returns 1813
    PlaySoundW(MAKEINTRESOURCE("C:\t.wav"), GetModuleHandle(NULL), SND_RESOURCE); //GetLastError returns 1813
    PlaySoundW(MAKEINTRESOURCE("t.wav"), GetModuleHandle(NULL), SND_RESOURCE); //GetLastError returns 1813
    PlaySound(MAKEINTRESOURCE("C:/t.wav"), GetModuleHandle(NULL), SND_RESOURCE); //GetLastError returns 1813
    PlaySound(MAKEINTRESOURCE("C:\t.wav"), GetModuleHandle(NULL), SND_RESOURCE); //GetLastError returns 1813
    PlaySound(MAKEINTRESOURCE("t.wav"), GetModuleHandle(NULL), SND_RESOURCE); //GetLastError returns 1813
    return 0;
}

From MSDN: "如果找不到文件,则该函数播放默认声音,除非设置了SND_NODEFAULT标志。"

检查路径

这实际上是一个视频但是我只想播放声音

你不能这样。如果文件是视频(包括AVI),那么它就不是WAV文件,即使您更改了文件扩展名。PlaySound只知道如何用WAVE块解码和播放RIFF类型的文件。

PlaySound可以播放WAV文件,其中样本用编解码器压缩。

您可以使用FFMPEG等工具从视频文件中提取音频段,并将其保存为独立的WAV文件。

另一个解决方案可能是使用一个更大的api (DirectShow或MediaFoundation)来播放视频文件,而不需要窗口来显示视频。这可能是大量的代码和工作集为您的需要。