実現したいこと
- リアルタイムにオーディオを再生したい。
前提
webrtcをpythonで実装できる、aiortcのライブラリを使用して、
zoomやmeetのような、リアルタイムに通話できるシステムを作成しています。
発生している問題・エラーメッセージ
ピア接続が確立後、
以下のコードで、PyAVのAudioFrameをNumpy配列に変換し、
ノンブロッキングに、wirte()しています。
wirte()が5回ほど行われると、フリーズしてしまうのですが、
原因は何が考えられるでしょうか?
該当のソースコード
python
1import sounddevice as sd 2import numpy as np 3 4 # リモートのトラックを受信する 5 @peer_connection.on("track") 6 async def on_track(track): 7 print("receive track") 8 if track.kind == "audio": 9 print("audio track") 10 sample_rate = 48000 # サンプルレートを定義 11 channels = 2 # ステレオなのでチャンネル数を2に設定 12 13 stream = sd.OutputStream(samplerate=sample_rate, channels=channels) 14 15 stream.start() 16 17 try: 18 while True: 19 frame = await track.recv() 20 # pyavのAudioFrameをnumpy配列に変換 21 frame_data = frame.to_ndarray() 22 stereo_data = frame_data.reshape(960, 2) 23 print(f"Channels: {len(frame.layout.channels)}, Shape: {stereo_data.shape}") 24 # sounddeviceで再生 25 stream.write(stereo_data.astype(np.float32).copy()) 26 except Exception as e: 27 print(f"Error during audio playback: {e}") 28 finally: 29 stream.stop() 30 stream.close()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。