1. 程式人生 > 其它 >通訊互動 socket套接字 音訊傳輸

通訊互動 socket套接字 音訊傳輸

服務端:

#音訊檔案傳輸
import socket,wave
hostname = socket.gethostname()
port = 8888
#開始
# 基本架構
s = socket.socket()
s.bind((hostname,port))
s.listen()
a,b = s.accept()

content = a.recv(921600)
with open('text.wav','wb') as f:
f.write(content)


s.close()
#實時音訊傳輸
import socket,pyaudio
s = socket.socket()
s.bind((socket.gethostname(),8888))
s.listen()
a,b = s.accept()
#
wav = pyaudio.PyAudio()
chunk_size = 1024 # 512
audio_format = pyaudio.paInt16
channels = 1
rate = 20000
write = wav.open(format=audio_format, channels=channels, rate=rate, output=True,
frames_per_buffer=chunk_size) #輸出
while 1:
audio_data = a.recv(350)
write.write(audio_data)
s.close()

# 開啟音效卡,設定 取樣深度為16位、聲道數為2、取樣率為16、輸入、取樣點快取數量為2048
# write = wav.open(format=pyaudio.paInt16, channels=2, rate=16000, input=True, frames_per_buffer=2048)

客戶端:
#音訊檔案傳輸
import socket,wave
import numpy as np

hostname = socket.gethostname()
port = 8888
#基本架構
s = socket.socket()
s.connect((hostname,port))

with wave.open('output.wav') as f:
#讀取音訊幀數
nframes = f.getnframes()
#讀取取樣頻率
framerate = f.getframerate()
#讀取全部幀
frames = f.readframes(nframes)
print(nframes,framerate)
#以陣列形式儲存
framerates = np.frombuffer(frames,dtype='short')
s.sendall(framerates)
s.close()

#實時音訊傳輸
import socket,pyaudio
s = socket.socket()
s.connect((socket.gethostname(),8888))
#
wav = pyaudio.PyAudio()
chunk_size = 1024 # 512
audio_format = pyaudio.paInt16
channels = 1
rate = 20000
read = wav.open(format=audio_format, channels=channels, rate=rate, input=True,
frames_per_buffer=chunk_size) #錄入
while 1:
audio_data = read.read(2048) # 讀出音效卡緩衝區的音訊資料
s.sendall(audio_data)
s.close()