38 lines
788 B
Python
38 lines
788 B
Python
|
|
import serial
|
|||
|
|
import pyaudio
|
|||
|
|
import numpy as np
|
|||
|
|
|
|||
|
|
SERIAL_PORT = '/dev/ttyACM0' # Change this to your serial port
|
|||
|
|
BAUD_RATE = 1500000
|
|||
|
|
CHUNK_SIZE = 256 # Number of frames in each block
|
|||
|
|
|
|||
|
|
p = pyaudio.PyAudio()
|
|||
|
|
|
|||
|
|
stream = p.open(format=pyaudio.paInt16,
|
|||
|
|
channels=2,
|
|||
|
|
rate=16000,
|
|||
|
|
output=True)
|
|||
|
|
|
|||
|
|
ser = serial.Serial(SERIAL_PORT, BAUD_RATE)
|
|||
|
|
|
|||
|
|
print("Streaming audio...")
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
while True:
|
|||
|
|
data = ser.read(CHUNK_SIZE * 4) # 2 channels × 2 bytes
|
|||
|
|
if not data:
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
audio_data = np.frombuffer(data, dtype=np.int16)
|
|||
|
|
stream.write(audio_data.tobytes())
|
|||
|
|
|
|||
|
|
except KeyboardInterrupt:
|
|||
|
|
print("Stopping audio stream...")
|
|||
|
|
|
|||
|
|
finally:
|
|||
|
|
stream.stop_stream()
|
|||
|
|
stream.close()
|
|||
|
|
p.terminate()
|
|||
|
|
ser.close()
|
|||
|
|
|