39 lines
915 B
Python
39 lines
915 B
Python
|
|
import serial
|
|||
|
|
import numpy as np
|
|||
|
|
import wave
|
|||
|
|
import time
|
|||
|
|
|
|||
|
|
SERIAL_PORT = '/dev/ttyACM0' # Adjust if needed
|
|||
|
|
BAUD_RATE = 1500000
|
|||
|
|
CHUNK_SIZE = 256 # frames per block
|
|||
|
|
RATE = 16000 # sample rate
|
|||
|
|
CHANNELS = 2 # stereo
|
|||
|
|
|
|||
|
|
# open serial
|
|||
|
|
ser = serial.Serial(SERIAL_PORT, BAUD_RATE)
|
|||
|
|
|
|||
|
|
print("Recording 3 seconds of audio...")
|
|||
|
|
|
|||
|
|
frames = []
|
|||
|
|
start = time.time()
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
while time.time() - start < 3.0:
|
|||
|
|
# 2 channels × 2 bytes per sample = 4 bytes per frame
|
|||
|
|
data = ser.read(CHUNK_SIZE * 4)
|
|||
|
|
if not data:
|
|||
|
|
break
|
|||
|
|
frames.append(data)
|
|||
|
|
|
|||
|
|
finally:
|
|||
|
|
ser.close()
|
|||
|
|
|
|||
|
|
# write to wav
|
|||
|
|
with wave.open("capture.wav", "wb") as wf:
|
|||
|
|
wf.setnchannels(CHANNELS)
|
|||
|
|
wf.setsampwidth(2) # 16‑bit samples = 2 bytes
|
|||
|
|
wf.setframerate(RATE)
|
|||
|
|
wf.writeframes(b"".join(frames))
|
|||
|
|
|
|||
|
|
print("Saved capture.wav")
|