Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中播放声音会发出蜂鸣音,但不会播放wav文件_C_Visual Studio 2010_Winapi_Playsound - Fatal编程技术网

在C中播放声音会发出蜂鸣音,但不会播放wav文件

在C中播放声音会发出蜂鸣音,但不会播放wav文件,c,visual-studio-2010,winapi,playsound,C,Visual Studio 2010,Winapi,Playsound,在C中,我的PlaySound没有抛出任何错误。。。但它不是播放我想要的文件,而是发出嘟嘟声 有什么建议吗 我试过: PlaySound("song1.wav", NULL, SND_ALIAS | SND_APPLICATION); 以及: 但是我得到了相同的结果。而不是像您那样使用相对路径: PlaySound("song1.wav", NULL, SND_FILENAME); 使用绝对路径,如: PlaySound("F:\\path\\to\\your\\song\\song1.

在C中,我的
PlaySound
没有抛出任何错误。。。但它不是播放我想要的文件,而是发出嘟嘟声

有什么建议吗

我试过:

PlaySound("song1.wav", NULL, SND_ALIAS | SND_APPLICATION); 
以及:


但是我得到了相同的结果。

而不是像您那样使用相对路径:

PlaySound("song1.wav", NULL, SND_FILENAME); 
使用绝对路径,如:

PlaySound("F:\\path\\to\\your\\song\\song1.wav", NULL, SND_FILENAME); 

引用msdn.microsoft.com上的PlaySound API说明:

PlaySound
在以下目录中搜索声音文件: 当前目录;Windows目录;Windows系统 目录
PATH
环境变量中列出的目录;和 网络中映射的目录列表

如果函数找不到指定的声音和
SND_NODEFAULT
标志未指定,
PlaySound
使用默认值 改为系统事件声音(在您的情况下为嘟嘟声)

如果函数既找不到系统默认条目,也找不到 默认声音,它不发出声音并返回
FALSE


因此,将文件目录路径添加到windows中的
path
环境变量中。这会解决你的问题。

我遇到了和OP一样的麻烦,并为我找到了解决办法。 我的解决方案是消除wav文件的元数据

参考post,PlaySound()API无法播放使用著名音频工具导出的一些wav文件。(如ProTools、CUBASE、StudioOne等)

而消除元数据则使其有效。
在博文中,他打开了一些“麻烦”的wave文件,只是“另存为”新文件,以消除wav RIFF元信息。

你做了什么?给我们看一些代码。并告诉我们您的song1.wav所在的位置。您确定它可以找到“song1.wav”文件吗?可能当前工作目录不正确?为了确保这一点,您可以尝试在PlaySound调用中指定完整路径名。或者使用完整路径而不是相对路径。OP的问题表明他使用的是相对路径。所以,根据这个回答。尽管绝对路径总是好的,但对路径的更改不太灵活(sceanrio,每次文件路径更改时都需要进行大量源代码更改,这可以通过简单地在path环境变量中添加或删除路径并使用相对路径来避免).我建议远离
路径
环境。太多的东西已经污染了它。没有理由不在代码中使用完整路径。如果您担心路径更改,请将路径存储在应用程序启动时指定的变量中,并在需要时进行更新,然后您可以在对文件进行操作时将相对文件名附加到该值。@Remy:同意,我也建议这样做。我打算在不修改代码的情况下,为OP获得最简单的工作解决方案。为了说明OP的代码可能没有问题,并且只针对引用的路径。很抱歉英语不好,但我希望有人能让它工作,所以我尽了最大努力:):)
PlaySound("F:\\path\\to\\your\\song\\song1.wav", NULL, SND_FILENAME);