2014-12-01 2 views
4

Я собираюсь реализовать голосовую беседу с помощью python. Поэтому я видел несколько примеров, как играть в звук и как записывать. Во многих примерах они использовали библиотеку pyAudio.
Я могу записать голос и сохранить его в файле .wav. И я могу сыграть файл .wav. Но я ищу рекордный голос в течение 5 секунд, а затем играю. Я не хочу сохранять его в файл, а затем играть, это не хорошо для голосового чата.Запись и воспроизведение аудио - python

Вот мой код аудио записи:

p = pyaudio.PyAudio() 
    stream = p.open(format=FORMAT, channels=1, rate=RATE, 
     input=True, output=True, 
     frames_per_buffer=CHUNK_SIZE) 
num_silent = 0 
snd_started = False 

r = array('h') 

while 1: 
    # little endian, signed short 
    snd_data = array('h', stream.read(CHUNK_SIZE)) 
    if byteorder == 'big': 
     snd_data.byteswap() 
    r.extend(snd_data) 

    silent = is_silent(snd_data) 

    if silent and snd_started: 
     num_silent += 1 
    elif not silent and not snd_started: 
     snd_started = True 

    if snd_started and num_silent > 30: 
     break 

Теперь я хочу играть без сохранения. Я не знаю, как это сделать.

ответ

1

Просмотрев PyAudio Documentation, у вас есть все это, как это должно быть, но то, что вы забываете, что stream является дуплексом дескриптора. Это означает, что вы можете читать с него, чтобы записать звук (как вы это делали с stream.read), и вы пишете ему, чтобы воспроизводить звук (с stream.write).

Таким образом, последние несколько строк вашего примера кода должны быть:

# Play back collected sound. 
stream.write(r) 

# Cleanup the stream and stop PyAudio 
stream.stop_stream() 
stream.close() 
p.terminate() 
Смежные вопросы