import pyaudio
|
import wave
|
|
# Initialize PyAudio
|
p = pyaudio.PyAudio()
|
|
# List available input devices
|
print("Available audio input devices:")
|
for i in range(p.get_device_count()):
|
device_info = p.get_device_info_by_index(i)
|
if device_info['maxInputChannels'] > 0:
|
print(f"Device ID {i}: {device_info['name']} (Max channels: {device_info['maxInputChannels']})")
|
|
# Prompt user to select a device
|
device_index = int(input("Please select the device ID to use for recording: "))
|
|
# Parameters
|
CHANNELS = 19
|
SAMPLE_RATE = 48000
|
CHUNK = 2048 # Number of frames per buffer
|
FORMAT = pyaudio.paInt24 # 16-bit audio
|
RECORD_SECONDS = 10 # Duration to record (in seconds)
|
OUTPUT_FILENAME = "output.wav"
|
|
# Get the chosen device's info tso validate it can support 19 channels and 48kHz
|
device_info = p.get_device_info_by_index(device_index)
|
max_channels = device_info['maxInputChannels']
|
if max_channels < CHANNELS:
|
print(f"Error: The selected device only supports {max_channels} channels, but 19 channels are required.")
|
p.terminate()
|
exit(1)
|
|
# Open stream
|
stream = p.open(format=FORMAT,
|
channels=CHANNELS,
|
rate=SAMPLE_RATE,
|
input=True,
|
input_device_index=device_index,
|
frames_per_buffer=CHUNK)
|
|
print(f"Recording {RECORD_SECONDS} seconds of audio from device ID {device_index}...")
|
|
frames = []
|
|
print (f"Check status {stream.is_active()}")
|
|
for _ in range(int(SAMPLE_RATE / CHUNK * RECORD_SECONDS)):
|
|
try:
|
# Record audio
|
data = stream.read(CHUNK)
|
frames.append(data)
|
except:
|
print ("Error")
|
|
|
print("Finished recording.")
|
|
|
print (f"Check status {stream.is_active()}")
|
# Stop and close the stream
|
stream.stop_stream()
|
stream.close()
|
|
# Terminate PyAudio
|
p.terminate()
|
|
# Save the recorded audio to a file
|
wf = wave.open(OUTPUT_FILENAME, 'wb')
|
wf.setnchannels(CHANNELS)
|
wf.setsampwidth(p.get_sample_size(FORMAT))
|
wf.setframerate(SAMPLE_RATE)
|
wf.writeframes(b''.join(frames))
|
wf.close()
|
|
print(f"Audio saved to {OUTPUT_FILENAME}.")
|