2011-08-05 10 views
4

pyaudioのサンプル素材は理解できませんでした。彼らは小さなプログラム全体を書いていて、それは私を捨てたようだ。単一のオーディオファイルを再生するにはどうすればよいですか?フォーマットは問題ではなく、オーディオファイルを再生するのに必要な最低限のコードを知りたいだけです。pyaudioファイルを再生するのに役立ちます

答えて

9

この例はかなりわかりやすいようです。

python playwav.py my_fav_wav.wav

いくつかの余分なコメントを波例:

import pyaudio 
import wave 
import sys 

# length of data to read. 
chunk = 1024 

# validation. If a wave file hasn't been specified, exit. 
if len(sys.argv) < 2: 
    print "Plays a wave file.\n\n" +\ 
      "Usage: %s filename.wav" % sys.argv[0] 
    sys.exit(-1) 

''' 
************************************************************************ 
     This is the start of the "minimum needed to read a wave" 
************************************************************************ 
''' 
# open the file for reading. 
wf = wave.open(sys.argv[1], 'rb') 

# create an audio object 
p = pyaudio.PyAudio() 

# open stream based on the wave object which has been input. 
stream = p.open(format = 
       p.get_format_from_width(wf.getsampwidth()), 
       channels = wf.getnchannels(), 
       rate = wf.getframerate(), 
       output = True) 

# read data (based on the chunk size) 
data = wf.readframes(chunk) 

# play stream (looping from beginning of file to the end) 
while data != '': 
    # writing to the stream is what *actually* plays the sound. 
    stream.write(data) 
    data = wf.readframes(chunk) 

# cleanup stuff. 
stream.close()  
p.terminate() 
+0

しかし、私は印刷物が必要ですか? – JShoe

+0

ありがとう!全く複雑すぎるもの! LOL ... – JShoe

+0

私は 'サーバーのリクエストチャンネルに接続できません ' 'ジャックサーバーが起動していない、または起動できません。' –

12

例のこの小さなラッパー(警告:ひざまずいて作成されたもの)は、作成したコードの意味を理解するのに役立ちます。

import pyaudio 
import wave 
import sys 

class AudioFile: 
    chunk = 1024 

    def __init__(self, file): 
     """ Init audio stream """ 
     self.wf = wave.open(file, 'rb') 
     self.p = pyaudio.PyAudio() 
     self.stream = self.p.open(
      format = self.p.get_format_from_width(self.wf.getsampwidth()), 
      channels = self.wf.getnchannels(), 
      rate = self.wf.getframerate(), 
      output = True 
     ) 

    def play(self): 
     """ Play entire file """ 
     data = self.wf.readframes(self.chunk) 
     while data != '': 
      self.stream.write(data) 
      data = self.wf.readframes(self.chunk) 

    def close(self): 
     """ Graceful shutdown """ 
     self.stream.close() 
     self.p.terminate() 

# Usage example for pyaudio 
a = AudioFile("1.wav") 
a.play() 
a.close() 
+0

そして、これは私が必要とするすべてであるあなたは、単にplaywav.pyコールなどの例を保存しますか?私は、保存されたサンプルを持っている必要はありません...?ちょうどPyaudioの権利ですか?これはスタンドアロンですか? – JShoe

+0

@JShoe:もちろん、* .pyファイル(例: "somefile.py")に保存し、Pythonでそれを実行する必要があります。もちろん、作業ディレクトリに "1.wav"というオーディオファイルが必要です。 –

+0

そうです。ちなみに、MacとWindowsの両方のデフォルトの作業ディレクトリは何ですか? – JShoe

関連する問題