2013-04-10 2 views
0

Я хочу записать звук/разговор с python (pyaudio), а затем использовать записанный поток и воспроизвести его на другом компьютере с использованием сокетов (без файлов, только python)Запись и воспроизведение аудиопотока, записанного с микрофона

Как я могу это сделать? какие модули я должен использовать для этого?

ответ

2

Просто отправьте необработанные кадры поверх сокета вместо записи в файл. Используйте пример воспроизведения, найденный на веб-странице аудиофайла порта. Просто замените этот код в pyaudio примеров для записи (http://people.csail.mit.edu/hubert/pyaudio/):

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() 

При отправке через сокет ((B '' Join (кадры)), FORMAT, швеллер, RATE.). Легкий способ кодирования этой информации, вероятно, является почтовым запросом, где параметрами являются FORMAT, CHANNELS и RATE, а тело - это звуковая байтовая последовательность.

import urrllib2 
url = '192.168.1.10' 
data = urllib.urlencode({'FORMAT' : format, 
         'CHANNELS' : channels, 
         'RATE' : rate}) 
response = urllib2.urlopen(url=url, data= b''.join(frames)).read() 
assert(response == "Successfully Played") 

Просто измените свой IP-адрес в этом примере, а затем создать простой веб-сервер на приемном конце (например, с помощью колбы), чтобы обработать запрос.

Затем пользователь может декодировать эту информацию на сокете и использовать пример воспроизведения, создав новый поток с правильными параметрами в примере воспроизведения.

Если вам нужна потоковая передача звука в реальном времени, инициируйте один запрос с каналами формата и скоростью, а затем просто откройте необработанный сокет tcp для отправки необработанных кадров.

Смежные вопросы