0

我正在尝试使用此处提到的 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 的问题?

4

2 回答 2

1

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

于 2020-01-04T13:41:36.370 回答
0

这适用于 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,它是默认值。
于 2016-08-20T22:39:14.087 回答