【问题标题】:PlaySound in C beeps but does not play wav fileC 中的 PlaySound 发出哔哔声但不播放 wav 文件
【发布时间】:2012-10-10 10:54:53
【问题描述】:

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

有什么建议吗?

我试过了:

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

还有:

PlaySound("song1.wav", NULL, SND_FILENAME); 

但我得到了相同的结果。

【问题讨论】:

  • 你做了什么?给我们看一些代码。并告诉我们您的 song1.wav 所在的位置。
  • 你确定它可以找到“song1.wav”文件吗?也许当前的工作目录不正确?为了确保这一点,也许您可​​以尝试在 PlaySound 调用中指定一个完整的路径名。

标签: c visual-studio-2010 winapi playsound


【解决方案1】:

而不是像你所做的那样使用相对路径:

PlaySound("song1.wav", NULL, SND_FILENAME); 

使用绝对路径,例如:

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

【讨论】:

    【解决方案2】:

    引用自 PlaySound API 描述,位于 msdn.microsoft.com:

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

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

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

    因此,将文件目录路径添加到 windows 中的PATH 环境变量中。这应该可以解决您的问题。

    【讨论】:

    • 或者使用完整路径而不是相对路径。
    • OP 的问题表明他正在使用相对路径。所以,就这么回答了。虽然,绝对路径总是好的,但对路径的更改不太灵活(一个场景,每次文件路径更改时都需要进行大量的源代码更改,这可以通过简单地在 PATH 中添加或删除路径来避免环境变量并使用相对路径)。
    • 我建议远离PATH 环境。太多的东西已经污染了它。没有理由不在代码中使用完整路径。如果您担心路径更改,请将路径存储在您在应用启动时分配的变量中并在需要时更新,然后您可以在对文件进行操作时将相对文件名附加到该值。
    • @Remy:同意,这也是我的建议。我打算为 OP 获得最简单的工作解决方案,而根本不改变代码。说明 OP 的代码可能没有问题,并且仅特定于引用的 PATH。
    【解决方案3】:

    我遇到了与 OP 相同的情况,并为我找到了解决方案。 我的解决方案是消除wav文件的元数据。

    Post (japanese)

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

    消除元数据使其工作。 在博文中,他用SoundEngine(japanese) 打开了一些“麻烦”的波形文件,然后只是“另存为”新文件以消除wav RIFF 元信息。

    【讨论】:

    • 抱歉英语不好,但我希望有人能做到,所以我尽力了:):)
    猜你喜欢
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    相关资源
    最近更新 更多