2016-08-20 23 views
0

我想這裏提到使用Windows' PlaySound功能:https://msdn.microsoft.com/en-us/library/windows/desktop/dd743680(v=vs.85).aspxPlaySound只能播放默認的「SystemAsterisk」的聲音(的Windows 10,C++,Python)的

然而,沒有什麼我嘗試可以從播放默認改變聲音「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的問題?

+0

在您的C++版本中,您需要轉義您的反斜槓:'C:\\ Users \\ Me \\ Downloads \\ sound1.wav' –

+0

Python代碼的問題可能是SYN_ASYNC標誌。 –

回答

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是不必要的,這是默認值。
+0

愚蠢downvoter,請解釋你downvoted你的感受。謝謝。 –

+0

感謝您的幫助。我試圖逃避我的反斜槓。那裏沒有運氣。感謝您使用'#include「stdafx.h」'和'return 0'信息。我只是在Visual Studio中使用標準設置(使用C++有點生疏)。 – Tallissan

+0

我試過你的代碼,也沒有運氣。另外,我是否應該在StackOverflow的代碼中包含'#include stdafx.h'?當然,這隻適用於使用Visual Studio的用戶。 – Tallissan