Ошибка типа Pyaudio в OSX

Я получаю ошибку типа при попытке сделать базовую запись с микрофона с помощью pyaudio на OSX. Я только что установил portaudio с помощью brew и установил самую последнюю версию pyaudio с помощью pip. Вроде нормально устанавливаются. Однако при запуске моего кода я получаю:

Traceback (most recent call last):
  File "micTest.py", line 37, in <module>
    data = stream.read(CHUNK)
  File "/usr/local/lib/python2.7/site-packages/pyaudio.py", line 608, in read
    return pa.read_stream(self._stream, num_frames, exception_on_overflow)
TypeError: function takes exactly 2 arguments (3 given)

Рассматриваемый код:

import audioop
import pyaudio
import wave

FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
CHUNK = 1024
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "file.wav"

audio = pyaudio.PyAudio()
print(audio.get_default_input_device_info())

# start Recording
stream = audio.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)
    mx = audioop.max(data, 2)
    print mx
    frames.append(data)


print "finished recording"


# stop Recording
stream.stop_stream()
stream.close()
audio.terminate()

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

default_audio_device_info выглядит так:

{
 'defaultSampleRate': 44100.0,
 'defaultLowOutputLatency': 0.01,
 'defaultLowInputLatency': 0.00199546485260771,
 'maxInputChannels': 2L,
 'structVersion': 2L,
 'hostApi': 0L,
 'index': 0L,
 'defaultHighOutputLatency': 0.1,
 'maxOutputChannels': 0L,
 'name': u'Built-in Microph',
 'defaultHighInputLatency': 0.012154195011337868
}

Понятия не имею, что здесь может пойти не так или почему «я» в методе чтения считается аргументом.


person aferriss    schedule 14.03.2016    source источник


Ответы (1)


Я не знаю, что не так с PyAudio, но, возможно, вы захотите попробовать модуль sounddevice?

import sounddevice as sd
fs = 44100
myrec = sd.rec(RECORD_SECONDS * fs, fs, channels=2)

Чтобы сохранить myrec в виде файла, вы можете использовать модуль звуковой файл.

person Matthias    schedule 20.03.2016