2016-12-21 4 views
1
import pygame,sys 

pygame.init() 

size = 40,40 
screen = pygame.display.set_mode(size) 

LEFT = 1 

s = pygame.mixer.Sound("Sound.wav") 

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 
     elif event.type == pygame.MOUSEBUTTONDOWN: 
      if event.button == LEFT: 
       s.play() 

現在、私はPygameを使ってゲームを作ろうとしています。マウスをクリックするたびにサウンドが再生されるように設定しました。一度に1つの効果音しか聞こえないので、それはすべて機能しますが、私は本当に迷惑になります。非常に早く7回クリックすると、4〜6音しか聞こえないことがあります。私が2回非常に素早くクリックすると、私はただ1つのサウンドが聞こえます。何とかPythonの音が重なり合うようにすることはできますか?

私はPygameサウンドのオーバーラップに関する他のさまざまな質問をしました(これはpygame.mixer.Channelと関係がありますが、わかりません)。これまで私は何も働いていませんでした。何か案は?

答えて

0

ちょっと遊んで、私はあなたが正しいと考えていますpygame.mixer.Channelpygame.mixerpygame.mixer.Channelページをご覧になることをお勧めします。私が考えることができる最も簡単なアプローチは、pygameで空のチャンネルがあるかどうかを確認することです(デフォルトでは8チャンネル、pygame.mixer.set_num_channels()でもっと多くのチャンネルを作成できます)。空の空きがある場合は、ではなく、サウンドを再生する代わりにチャネルを使用することができます。これら二つの調整で、あなたのサンプルでは、​​このようになります。

import pygame 
import sys 

pygame.init() 
size = (200, 200) 
screen = pygame.display.set_mode(size) 
LEFT = 1 
s = pygame.mixer.Sound("Sound.wav") 

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 
     elif event.type == pygame.MOUSEBUTTONDOWN: 
      if event.button == LEFT: 
       print "click" 
       empty_channel = pygame.mixer.find_channel() 
       empty_channel.play(s) 

はそれが助け場合、私に教えてください!

+0

私はそれを適用しても何の違いもないようです。私はまだクリック音よりも音が少なくなっています。私は今のところそれを保つだろうと思う。しかし、応答に感謝します。 –

+0

@ShawnSongオーバーラップをよく聞くために長いテストサウンドを試したことがありますか?また、アプリが最初に読み込まれた直後にすぐにクリックを開始すると、音が聞こえなくなるので、数秒間待ってから急速にクリックしたときに何か変わったかどうか確認してください。また、デフォルトで 'pygame.mixer.get_num_channels()'が実際に8であるかどうかを調べるために 'pygame.mixer.get_num_channels()'をチェックしても問題ありません。 – CodeSurgeon

+0

おそらく私が使っているバージョン(Python 3.3)でしょうか?私はpygame.mixer.find_channel()がオンラインの他の人のために働くのを見たことがあるが、私にとっては違いはない。 pygame.mixer.get_num_channels()は8を返します。私はすでに試した。 –

関連する問題