Pyaudio запись wav файла со звуковой карты дает пустую запись

Я пытался работать над проектом, чтобы обнаружить сдвиг во времени между двумя потоковыми аудиосигналами. Я работал с python3, Pyaudio и использую звуковую карту Motux828 с микрофоном Neumann KU-100 со стереовходом. Итак, когда я проверяю свой input_device_index, я правильно понимаю, что это четвертый подключенный к звуковой карте MOTU.

Однако, когда я записываю с:

import time
import pyaudio
import wave


CHUNK = 1024 * 3  # Chunk is the bytes which are currently processed
FORMAT = pyaudio.paInt16
RATE = 44100
RECORD_SECONDS = 2
WAVE_OUTPUT = "temp.wav"
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,channels=2,rate=RATE,input=True,frames_per_buffer=CHUNK,input_device_index=4)

frames = []  # np array storing all the data

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




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

wavef = wave.open(WAVE_OUTPUT, 'wb')  # opening the file
wavef.setnchannels(1)
wavef.setsampwidth(p.get_sample_size(FORMAT))
wavef.setframerate(RATE)
wavef.writeframes(b''.join(frames1))  # writing the data to be saved
wavef.close()

Я записываю волновой файл без звука, почти без шума(естественно)

Также я могу записывать с помощью стороннего программного обеспечения со специальным микрофоном. Полностью работает, нормально.

ПРИМЕЧАНИЕ: Звуковая карта обычно имеет 24-битную глубину, я также пробовал paInt24, которая записывает волновой файл с чистым шумом


person Omer Kaya    schedule 08.12.2016    source источник
comment
Неверное устройство ввода, некоторые отсутствуют sub index, какой входной канал перенаправляет куда? Перед использованием необходимо управлять устройствами ввода, в Linux необходимо перенаправить на ALSA.   -  person dsgdfg    schedule 08.12.2016
comment
Вы можете использовать plot_input.py, чтобы узнать, есть ли на самом деле является сигналом на вашем устройстве ввода.   -  person Matthias    schedule 10.12.2016


Ответы (1)


Я думаю, что вы упомянули неправильные имена переменных, поскольку я видел ваш код. Неправильные переменные:

data = stream1.read(CHUNK) 
frames.append(data1)
wavef.writeframes(b''.join(frames1))

правильные значения:

data = stream.read(CHUNK)
frames.append(data)
wavef.writeframes(b''.join(frames))
person shiva    schedule 30.03.2017