【问题标题】:PlaySound only plays default "SystemAsterisk" sound (Windows 10, C++, Python)PlaySound 仅播放默认的“SystemAsterisk”声音(Windows 10、C++、Python)
【发布时间】:2023-03-11 18:44:01
【问题描述】:

我正在尝试使用此处提到的 Windows 的 PlaySound 功能:https://msdn.microsoft.com/en-us/library/windows/desktop/dd743680(v=vs.85).aspx

但是,我尝试任何方法都无法改变它播放默认声音“SystemAsterisk”。

我尝试过同时使用 C++ 和 Python 并得到相同的结果:

C++:

#include "stdafx.h"
#include <Windows.h>
#include <playsoundapi.h>

int main()
{
    PlaySound(TEXT("SystemWelcome"), NULL, SND_ALIAS);
    PlaySound(TEXT("C:\Users\Me\Downloads\sound1.wav"), NULL, SND_FILENAME);
    return 0;
}

以上两次尝试播放不同的声音仍会返回默认的 Asterisk 声音。

Python:

#!/usr/bin/python

import winsound

winsound.PlaySound("c:/Users/Me/Downloads/sound1.wav", winsound.SYN_ASYNC|winsound.SYN_FILENAME)

再次,我得到了相同的结果。

对正在发生的事情有任何想法吗?也许这是 Windows 10 的问题?

【问题讨论】:

  • 在您的 c++ 版本中,您需要转义反斜杠:C:\\Users\\Me\\Downloads\\sound1.wav
  • Python 代码的问题可能是 SYN_ASYNC 标志。

标签: python c++ audio windows-10 playsound


【解决方案1】:

只是为新的 python 用户提供它。 当我使用 IDE(具体来说是 VS 代码)运行脚本时,我遇到了同样的问题。 但是,如果我使用命令提示符使用“python script.py”运行脚本,则会播放正确的文件。 很奇怪。

【讨论】:

    【解决方案2】:

    这适用于我在 Windows 7 和 Windows 10 中:

    #undef UNICODE
    #define UNICODE
    #include <windows.h>
    
    #include <stdlib.h>
    
    auto main()
        -> int
    {
        bool const ok = !!PlaySound( L"c:/windows/media/ringout.wav", 0, SND_ALIAS );
        return (ok? EXIT_SUCCESS : EXIT_FAILURE);
    }
    

    C++ 代码的一个直接问题是字符串文字

    "C:\Users\Me\Downloads\sound1.wav"
    

    每个\ 开始一个无效的转义序列。一种简单的解决方法是使用正斜杠/,而不是\ 反斜杠。

    您的 Python 代码可能存在的一个问题是 SYN_ASYNC 标志。这可能会导致函数立即返回。如果脚本随后立即退出,您可能不一定会听到任何声音。


    在其他新闻中:

    • #include "stdafx.h" 是一个非标准标头,会阻止某些读者直接尝试您的代码(他们没有生成的标头)。
    • TEXT 已过时,在现代 Windows 中使用 Unicode。
    • return 0; 对于main 来说是不必要的,它是默认值。

    【讨论】:

    • 愚蠢的投反对票,请解释你投反对票时的感受。谢谢。
    • 感谢您的帮助。我试图逃避我的反斜杠。那里没有运气。感谢您对#include "stdafx.h" 和return 0 信息的额外帮助。我只是在 Visual Studio 中使用标准设置(对 C++ 有点生疏)。
    • 我试过你的代码,也没有运气。另外,我不应该在 StackOverflow 上的代码中包含 #include stdafx.h 吗?当然它只适用于那些使用 Visual Studio 的人。
    • 更新:好的,我让您使用 ringout.wav 文件。我会解决这个问题并尝试让我自己的文件正常工作。谢谢!
    • 最终更新:好的,我的文件可以使用您的代码工作。我的 .wav 文件特别不起作用。我使用 Audacity 将它们转换为 16 位 PCM,然后它们也开始工作。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2012-05-07
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多