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}.")