Форум сайта python.su
Стоит задача считать звук с микрофона и воспроизвести его.
Но при попытке воспроизведения слышен монотонный шум.
Помогите найти проблему
import pyaudio import numpy.fft import math import wave CHUNK = 1024 WIDTH = 2 CHANNELS = 2 RATE = 44100 RECORD_SECONDS = 5 p = pyaudio.PyAudio() stream = p.open(format=p.get_format_from_width(WIDTH), channels=CHANNELS, rate=RATE, input=True, output=True, frames_per_buffer=CHUNK) print("* recording") for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) #при выполнении этого блока воспроизводится шум while data != '': stream.write(data) stream.stop_stream() stream.close() p.terminate()
Офлайн
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) stream.write(data, CHUNK)
Офлайн
Aris_P@Такую конструкцию видел, но она мне немного не подходит.
Офлайн
тогда сохраняйте в список, типа
data=[] for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data.append(stream.read(CHUNK)) while data: stream.write(data.pop(0), CHUNK)
Офлайн
Aris_P@Возник еще один вопрос:
тогда сохраняйте в список, типа
Sh= numpy.fft.irfft(b)
Офлайн
массив чисел надо перевести в строку, не забывая, что у вас размер сэмпла равен 2 байтам.
Что-то типа такого
from struct import pack buf = pack('H',1234)
Офлайн
Aris_P@Не понял данной конструкции.
массив чисел надо перевести в строку, не забывая, что у вас размер сэмпла равен 2 байтам.Что-то типа такого
Офлайн
получившуюся строку надо передавать в функцию
stream.write(строка, CHUNK)
Офлайн
Aris_P@
buf = pack('H',1234)
Отредактировано 12301230 (Ноя. 28, 2014 21:21:15)
Офлайн
Надо перевести 1024 чисел в 1024 сэмплов (реально у вас 2048 будет, так как канала 2, но не суть, попробуйте для одного канала сначала). Размер каждого сэмпла определен - 2 байта(WIDTH = 2).
Эта конструкция
buf = pack('H',1234)
from struct import pack a=[1,2,3,4,5,6,7,8] b=''.join([pack('H',s) for s in a])
'\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00'
b=''.join([pack('H',s)[::-1] for s in a])
Офлайн