3

この質問を重複として報告しないでください。すでに利用可能なソリューションはどれも私のために働いていません。私はそれらすべてをテストしました

それで、私は RaspberryPi モデル B ボードで PyAudio サンプル録音プログラムを実行しようとしています。これは私が得ているエラーです。

Traceback (most recent call last):
  File "/home/pi/pyaudio/test/testing.py", line 23, in <module>
    data = stream.read(chunk)
  File "/usr/local/lib/python2.7/dist-packages/pyaudio.py", line 605, in read
    return pa.read_stream(self._stream, num_frames)
IOError: [Errno Input overflowed] -9981

多くのユーザーの問題を解決する特定のソリューションが既に利用可能ですが、私の場合はそうではありません。

これが私が試したことです、

まず、コードは次のとおりです。

"""PyAudio example: Record a few seconds of audio and save to a WAVE file."""

import pyaudio
import wave

CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"

p = pyaudio.PyAudio()

stream = p.open(format=FORMAT,
            channels=CHANNELS,
            rate=RATE,
            input=True,
            frames_per_buffer=CHUNK)

print("* recording")

frames = []

for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
   data = stream.read(CHUNK)
   frames.append(data)

print("* done recording")

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

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

現在の構成がサポートされているかどうかも試しましたが、

import pyaudio
p = pyaudio.PyAudio()
if p.is_format_supported(48000.0, 
    input_device=1,
    input_channels=1,
    input_format=pyaudio.paInt16):
    print 'True!'

44,000 と 44,100 の両方がサポートされていますが、それでも同じエラーが何度も発生します。

これは私の USB オーディオ カードのデバイス情報です。

p.get_device_info_by_index(1)

{'defaultSampleRate': 44100.0, 
'defaultLowOutputLatency': 0.011609977324263039, 
'defaultLowInputLatency': 0.011609977324263039, 
'maxInputChannels': 1L, 
'structVersion': 2L, 
'hostApi': 0L, 
'index': 1, 
'defaultHighOutputLatency': 0.046439909297052155, 
'maxOutputChannels': 2L, 
'name': u'Generic USB Audio Device: USB Audio (hw:1,0)', 
'defaultHighInputLatency': 0.046439909297052155}

なぜまだエラーが発生するのか、誰にも分かりますか?

4

5 に答える 5

5

チャンク パラメータを 1024 ではなく 8192 に変更します。うまくいきました。参照: IOError: [Errno 入力オーバーフロー] -9981

于 2015-02-20T10:33:21.913 に答える
3

exception_on_overflow を False に設定してみましたか? Pyaudioのドキュメントから:

read(num_frames, exception_on_overflow=True)

ストリームからサンプルを読み取ります。ノンブロッキング モードを使用している場合は呼び出さないでください。

パラメータ: num_frames – 読み取るフレーム数。exception_on_overflow – 入力バッファ オーバーフローで IOError 例外をスローする (または黙って無視する) かどうかを指定します。デフォルトは真です。stream が入力ストリームでない場合、または読み取り操作が失敗した場合は、IOError を発生させます。戻り値の型:
文字列

于 2016-02-03T04:21:42.887 に答える
0
# importing modules for sound handling
# importing modules for sound handling
from sys import byteorder
from array import array
from struct import pack

import pyaudio
import wave

def audioeffect():
    CHUNK = 16 # played with, this can be 2048 1024, 512, 256 etc
    FORMAT = pyaudio.paInt16
    CHANNELS = 1
    RATE = 48000

    p = pyaudio.PyAudio()

    stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                output=True,
                frames_per_buffer=CHUNK)
    r = array('h') # define r
    snd_data = array('h', stream.read(CHUNK)) # read sounddata from input
    r.extend(snd_data)
    stream.stop_stream()
    stream.close()
    p.terminate()
    N = 1
    SumOfSquars = 0
    for i in snd_data:  # determing the value for tel of  
        N = N +1

    # adding all quadrates
    for i in range(0, N-1):
        SumOfSquars = snd_data[i]**2
    Rms_Value = np.sqrt(SumOfSquars / N)

    #print("Rms_Value is  :", Rms_Value)
    return int(Rms_Value)
于 2016-02-24T14:14:16.553 に答える