2017-01-27 21 views
6

との録音音声は、私が唯一のボタンがあり、簡単なGUIアプリケーションをやろうとしています。例外IOError入力がオーバーフロー:<em>録音</em>:Tkinterのインターフェース

ボタンを押すと、録音が​​開始されます。ボタンを放すと録音が停止し、録音が保存されます。私はは(彼らはhereを与えるのコード例)ボタンとTkinterのない単純なオーディオを録音に問題を持っていないしかし

Traceback (most recent call last): 
    ... 
    data = self.stream.read(self.CHUNK) 
    File (...), line 608, in read 
    return pa.read_stream(self._stream, num_frames, exception_on_overflow) 
IOError: [Errno -9981] Input overflowed 
Exception in Tkinter callback 

:私はボタンをクリックしたときに

はしかし、私は次のエラーを取得します。

これはコードです:

import Tkinter as tk 
import pyaudio, wave 

class AppRecording: 
    def __init__(self, root): 
     self.root = root 
     self.mouse_pressed = False 
     recordingButton = tk.Button(root, text = "Record") 
     recordingButton.pack() 
     recordingButton.bind("<ButtonPress-1>", self.OnMouseDown) 
     recordingButton.bind("<ButtonRelease-1>", self.OnMouseUp) 
     self.CHUNK = 1024 
     self.FORMAT = pyaudio.paInt16 
     self.CHANNELS = 2 
     self.RATE = 44100 
     self.WAVE_OUTPUT_FILENAME = "output.wav" 

     self.p = pyaudio.PyAudio() 

     try: self.stream = self.p.open(format=self.FORMAT, 
        channels=self.CHANNELS, 
        rate=self.RATE, 
        input=True, 
        frames_per_buffer=self.CHUNK) 
     except: 
      raise Exception("There is no connected microphone. Check that you connect to the left hole if you have a PC.") 
      return None 

     self.frames = [] 

    def recordFrame(self): 
     try: 
      data = self.stream.read(self.CHUNK) 
      print "after try" 
     except IOError as ex: 
      print "inside except" 
      if ex[1] != pyaudio.paInputOverflowed: 
       print "before raise" 
       raise 
       print "after raise" 

      data = '\x00' * self.CHUNK # or however you choose to handle it, e.g. return None 

     self.frames.append(data) 

    def finishRecording(self): 

     self.stream.stop_stream() 
     self.stream.close() 
     self.p.terminate() 

     wf = wave.open(self.WAVE_OUTPUT_FILENAME, 'wb') 
     wf.setnchannels(self.CHANNELS) 
     wf.setsampwidth(self.p.get_sample_size(self.FORMAT)) 
     wf.setframerate(self.RATE) 
     wf.writeframes(b''.join(self.frames)) 
     wf.close() 

    def OnMouseDown(self, event): 
     self.mouse_pressed = True 
     self.poll() 

    def OnMouseUp(self, event): 
     self.root.after_cancel(self.after_id) 
     print "Finished recording!" 
     self.finishRecording() 

    def poll(self): 
     if self.mouse_pressed: 
      self.recordFrame() 
      self.after_id = self.root.after(1, self.poll) 

root=tk.Tk() 
app = AppRecording(root) 
root.mainloop() 

私はself.CHUNKself.RATEを変更しようとしました。私のiMacの内蔵マイクは、速度が44100だと言っています。いくつかの場所では、チャンクやレートの値を変更する必要があると私は読んだが、誰も助けなかった。 0.2.10

pyaudio.get_portaudio_version():1246720

pyaudio.get_portaudio_version_text():PortAudio V19.6.0-develの、改正396fe4b6699ae929d3a685b3ef8a7e97396139a4

Tkinter.__version__:$もう一つの場所はexcept IOError as ex: (...)


PyAudioバージョンを追加するために私に言いましたリビジョン:81008 $


ご協力いただきありがとうございます。

+0

レコーディングを実行すると、 're-recall'のためにいくつかの要素/機能を無効にします。 '__init__'はデバイスと他の関数呼び出しを呼び出します。後で 'self.stream = None'(関数の下で)' self.stream = self.p.open(format = self.FORMAT、.............. ' 。?すべてのプロセスに – dsgdfg

+0

@dsgdfgは、あなたがより良い説明することができます私はこの問題を解決する方法を得ることはありません –

答えて

1

どのpython/tk/portaudio/pyaudioバージョンですか?

Ubuntu 14.04 LTS x64(portaudio19-devとPyAudio-0.2.10を使用したPython 2.7)でコードが良好(問題ありません)であることを確認していますので、Python、tk、pyaudio、portaudioバージョン...

は、あなたが最後portaudio & Tkのバージョンがコンピュータにインストールされていることを確認していますか?

+0

portaudioバージョンが必要(ここでは見られアップグレード:。https://trac.macports.org/ticket/39150 =>「私はアップグレード今朝私のportaudioが新しいバージョン19.20140130にインストールされ、私のシステム上で問題が修正されました」) –

+0

あなたが疑問に思ったすべてのバージョンを追加して私の質問を編集しました。さらに、 'portaudio'を' V19.6.0-まだdevel'と同じ問題。アプリは 'サウンドストリームpipe'を管理 –

+0

@ASTEFANI?Ubuntuではこの質問は'デバイスのねじれを開いたり、どこデバイスIDの意味。デバイスのストリームを作成するためのproccessのenumaratorをreqired? ' – dsgdfg

関連する問題