2016-03-25 23 views
1

私はパイゲームでゲームを作っています。私の問題は、特定のサウンドエフェクトが異なるスピードで再生することです。限り、私はそれが再生される2つのスピードがあることを伝えることができます、時々それは正常に再生され、はるかに速く再生するかもしれない別の時間。ゲーム中の音声の変化速度

ここに私のコードのいくつかのセクションがありますが、私はそれ以上のコードを含んでいますが、どこに問題があるのか​​想像できません。これを引き起こす原因は何ですか?

pygame.mixer.pre_init(44000, -16, 2, 512) 
pygame.mixer.init() 
pygame.init() 

rainbowPip = pygame.mixer.Sound('snakey_files/sounds/score up.ogg') 
allPips = [redPip,gldPip,dmdPip,crashPip,btnPip,objPip,rainbowPip] 
playSound = pygame.mixer.Sound.play 
stopSound = pygame.mixer.Sound.stop 

if stats1['chime'] == 'on': 
     playSound(rainbowPip, -1, 0, 200) 
    elif stats1['chime'] == 'off': 
     stopSound(rainbowPip) 

ありがとうございます。

答えて

1

サンプリング速度を変えることで、オーディオの速度を変えることができます。典型的なwavファイルの場合は、44100にすることができます。これを倍速化または半減させてスピードアップまたはスローダウンすることができます。

私はあなたの完全なコードを持っていないので、私はそのコンセプトを説明するデモコードを作成しました。 入力オーディオファイルpiano.wavが最初に通常の速度で再生され、元の速度の2倍の速度で再生されます。 1未満の変換係数を使用して速度を低下させるオプションを通知します。

あなたのプログラムでこのコードを使用できることを望みます。

デモコード

import pygame, wave, time 

def checkifComplete(channel): 
    while channel.get_busy():  #Check if Channel is busy 
     pygame.time.wait(800) # wait in ms 
    channel.stop() 

#Set speedUp/Slowdown Factor 
#ChangeRATE = 0.5 # set <1 to slow down audio 
ChangeRATE = 2 # set >1 to speed up audio 


#Define input/output audio files 
music_file = "piano.wav" 
changed_file = "changed.wav" 
swidth = 2 

#set up the mixer 
freq = 44100  # audio CD quality 
bitsize = -16 # unsigned 16 bit 
channels = 2  # 1 is mono, 2 is stereo 
buffer = 2048 # number of samples 

pygame.mixer.init(freq, bitsize, channels, buffer) 
pygame.mixer.init() 

#Create sound object for Audio 
myAudio1 = pygame.mixer.Sound(music_file) 

#Create a channel for audio 
myChannel1 = pygame.mixer.Channel(1) 

#Play Audio 
print "Playing audio : ", music_file 
myChannel1.play(myAudio1) 
checkifComplete(myChannel1) #Check if Audio1 complete 

#Open current audio and get parameters 
currentSound = wave.open(music_file, 'rb') #Open input file 
sampleRate = currentSound.getframerate() #Get frame rate 
channels = currentSound.getnchannels() #Get total channels 
signal = currentSound.readframes(-1) #Load all frames 

#Create new audio with changed parameters 
newSound = wave.open(changed_file, 'wb') 
newSound.setnchannels(channels) 
newSound.setsampwidth(swidth) 
print "sampleRate=", sampleRate 
newSound.setframerate(sampleRate * ChangeRATE) 
sampleRate2 = newSound.getframerate() #Get new frame rate 
print "sampleRate2=", sampleRate2 
newSound.writeframes(signal) 
newSound.close() 

#Create sound object for Changed Audio 
myAudio2 = pygame.mixer.Sound(changed_file) 

#Create a channel for Changed audio 
myChannel2 = pygame.mixer.Channel(2) 

#Add changed audio to Channel and Play Changed Audio 
print "Playing audio2 : ", changed_file 
myChannel2.play(myAudio2) 
checkifComplete(myChannel2) 

プログラム出力

Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32 
Type "copyright", "credits" or "license()" for more information. 
>>> ================================ RESTART ================================ 
>>> 
Playing audio : piano.wav 
sampleRate= 44100 
sampleRate2= 88200 
Playing audio2 : changed.wav 
>>> 
+0

これは、多くので取るために、私はこれのほとんどを理解していないです。だから私はいくつかの質問から始めます。 Q:.initのチャンネル設定は、複数のチャンネルが2つの異なるサウンドを再生することと関係していたと思っていました。しかし、ここでは、1はモノで2はステレオであると教えてくれる。しかしこれは後でオーディオを再生するための新しいチャンネルを作成するので、最初の前提が正しいように見えます。どちらですか? ありがとう! –

+1

'channels = 2#1 is mono、2 is stereo 'は、入力オーディオのチャンネルを設定することです。 Pygame.mixer.initを使用して作成したチャンネルは、ミキサーのチャンネル設定と「異なる」チャンネルです。デフォルトでは、ミキサーの初期設定で8つの別々のチャンネルが得られます。8つの高速道路と同じように、異なるペースで車を走らせることができ、他と独立しています。これが理にかなってほしい。 http://www.pygame.orgには、すべての仕組みについての詳細な説明があります。何かが必要な場合は教えてください。ソリューションが動作し、あなたの要件を満たしている場合は、答えを「受諾」します。 –

+0

あなたの投稿は忌憚のない助けになりますが、ゲームプレイ中のスピードがスピードを変えている理由はまだ分かりません。私はあなたが提案したような何もしなかったので、それは単純にパイゲーム自体の不具合だと思っています。 理論や提案があれば教えてください。グリッチが助けになることを示すビデオを投稿すると思うなら、教えてください。 –

関連する問題