2017-05-03 226 views
2

だから私はこのようなコードがあります:私は「Q」キーを押すと、それが必要のようPythonで再生されているサウンドを止めるには?

import winsound 
    from msvcrt import getch 

    sound_path = "Path to sound" 

    while True: 
     key= ord(getch()) 
     if key == 27: 
      break 
     if key == 113: #theq key 
      winsound.PlaySound(sound_path, winsound.SND_FILENAME) 

だから今、それは対応するサウンドを再生します。しかし、現在のサウンドが再生される前に 'q'キーを押し続けると、現在のサウンドが終了した後に再生されます。どうすれば 'q'ボタンを押すと、現在の音を止めて次の音を鳴らすことができますか?

答えて

3

編集: は(win7の、Python3.6.1)、さらにそれに見えた、Eswcvlads答えが移動するための方法です。 winsound.SND_ASYNCフラグを使用するとすぐに別のサウンドを再生することができ、現在再生中のサウンドが停止します。

winsound.PlaySound(r'D:\seven_11.wav', winsound.SND_ASYNC) 

- >がseven_11

winsound.PlaySound(r'D:\seven_12.wav', winsound.SND_ASYNC) 

果たしている - > seven_11停止し、seven_12は、すべての再生を停止するには、しかし

の再生を開始し、私のオリジナルアプローチがまだ有効である:

winsound.PlaySound(None, winsound.SND_PURGE) 
から

winsound.PlaySound(sound, flags) ...音パラメータは任意の現在再生中の波形音が停止され、Noneある場合。

PlaySoundを呼び出す前にそれを含めて、次のものを再生する前に再生を停止する必要があります。

+0

あなたが言ったように「winsound.Playsoud(None、winsound.SND_FILENAME)」を試してみましたが、そのように実行するとプログラムがクラッシュします。その行なしで正常に実行されます。 –

+0

@JoshuaKimそれはどのようにクラッシュするのですか? 'Playsoud'は' PlaySound'と同じではありません。 –

+0

それをテストした、私の答えを編集 –

2

docsで判断すると、PlaySoundは同期しているため、サウンドが完全に再生された後にのみ返されます。そのため、スクリプトはサウンドが終了したときにだけ次のキーを処理します。それはこのようwinsound.SND_ASYNCフラグを使用非同期にするには:

winsound.PlaySound(sound_path, winsound.SND_FILENAME | winsound.SND_ASYNC) 
2
if key == 113: #theq key 
     winsound.Playsound(None, windsound.SND_FILENAME) 
     winsound.PlaySound(sound_path, winsound.SND_FILENAME) 

音パラメータがNoneの場合、任意の現在再生中の波形音が停止しています。それで、すべてのサウンドファイルが再生される前にそれをしてください。

関連する問題