2016-02-15 71 views
1

我試圖在兩個Raspberry Pi之間做一個單工通信(當我解決此問題時,它將變爲半雙工)。在Raspberry Pi上用PyAudio口吃音頻

一個通過UDP協議發送音頻數據包,另一個接收這些數據包並通過它的默認音頻輸出設備播放它們。

我正在使用PyAudio庫。 我設法使溝通工作,但出來的聲音結結巴巴。 我使用的代碼如下:

客戶端(IP地址:192.168.1.40)

#!/usr/bin/env python 

import pyaudio 
import wave 
import socket 

p = pyaudio.PyAudio() 
stream = p.open(format=pyaudio.paInt16, 
      channels=1, 
      input_device_index=2, 
      rate=44100, 
      input=True, 
      frames_per_buffer=8192) 

print("Stream on.") 
while True: 
try: 
    data = stream.read(8192) 
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    sock.connect(("192.168.1.30", 1000)) 
    sock.send(data) 
    sock.close() 

except KeyboardInterrupt: 
    print("Stream off.") 
    stream.stop_stream() 
    stream.close() 
    p.terminate() 

服務器(IP地址:192.168.1.30)

#!/usr/bin/env python 

import pyaudio 
import wave 
import socket 

p = pyaudio.PyAudio() 

stream = p.open(format=pyaudio.paInt16, 
      channels=1, 
      input_device_index=2, 
      rate=44100, 
      output=True, 
      frames_per_buffer=8192) 

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
s.bind(('0.0.0.0', 1000)) 

while True: 
try: 
    data = s.recv(8192) 
    if data: 
     stream.write(data) 

except KeyboardInterrupt: 
    s.close() 
    print "Exiting code." 
    stream.stop_stream() 
    stream.close() 
    p.terminate() 

任何幫助將不勝感激!

+0

我以前也有類似的問題,一次發送更大的數據包,但增加了延遲,如果這不是一個問題,那可能是你最好的選擇 –

+0

你好,謝謝你的建議。我試圖增加數據包大小,但沒有任何改變 – user2959923

回答

0

我也面臨類似的口吃問題。這是因爲在流式傳輸過程中出現輸入溢出錯誤。如果每個通信的塊大小減少到512字節,那麼根據我的經驗,通信就會出現。