From b40c7292b755d0fc056ccb979488ef452a94a9ad Mon Sep 17 00:00:00 2001 From: Christophe Weis <christopheweis@hotmail.fr> Date: Mon, 20 Jan 2025 18:24:05 +0100 Subject: [PATCH] Add PythonExample_Recording_Startup.py --- PythonExample_Recording_Startup.py | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 101 insertions(+), 0 deletions(-) diff --git a/PythonExample_Recording_Startup.py b/PythonExample_Recording_Startup.py new file mode 100644 index 0000000..2299f88 --- /dev/null +++ b/PythonExample_Recording_Startup.py @@ -0,0 +1,101 @@ +import pyaudio +import wave +from datetime import datetime + +# Generate a file name from current date and time +current_date_time = datetime.now().strftime("%Y-%m-%d--%H-%M-%S") +file_name = 'recording_' + current_date_time + +# Initialize PyAudio +p = pyaudio.PyAudio() + +# No prompts needed for the startup version of this script +''' +# 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: ")) +n_channels = int(input("Please enter the number of channels to use for recording: ")) +duration_sec = int(input("Please enter the desired duration (in seconds) of the recording: ")) +#file_name = str(input("Please enter a name for the output file: ")) +''' + +# Parameters +CHANNELS = 19 # Number of channels +SAMPLE_RATE = 48000 +CHUNK = 32 # Number of frames per buffer +FORMAT = pyaudio.paInt16 # 16-bit audio +RECORD_SECONDS = 10 # Duration to record (in seconds) +OUTPUT_FILENAME = "/home/rpi1/Desktop/" + file_name + ".wav" +MONITORING = True # To write to a text file as long as the device is recording + +# Get the chosen device's info to validate it can support the entered number of channels and 48kHz +device_info = p.get_device_info_by_index(2) +max_channels = device_info['maxInputChannels'] +if max_channels < CHANNELS: + print(f"Error: The selected device only supports {max_channels} channels, but {CHANNELS} channels are required.") + p.terminate() + exit(1) + +# Open stream +stream = p.open(format=FORMAT, + channels=CHANNELS, + rate=SAMPLE_RATE, + input=True, + input_device_index=2, + frames_per_buffer=CHUNK) + +print(f"Recording {RECORD_SECONDS} seconds of audio from device ID {2}...") + +frames = [] + +print (f"Check status {stream.is_active()}") + +if MONITORING: + open("/home/rpi1/Desktop/current_recording_" + current_date_time + ".txt","w+") + +for i in range(int(SAMPLE_RATE / CHUNK * RECORD_SECONDS)): + + # print (i, f"RECORDING: Check status {stream.is_active()}") # this line is for testing + + try: + # Record audio + # data = stream.read(CHUNK) + data = stream.read(CHUNK, exception_on_overflow = False) # this line is for testing + frames.append(data) + + if MONITORING: + if i%int(10*SAMPLE_RATE/CHUNK) == 0: # writing current time into "current_recording.txt" every 10 seconds + current_second = int(i*CHUNK/SAMPLE_RATE) + with open('current_recording_' + current_date_time + '.txt', 'a') as f: + f.write(f"{current_second}\n") + + 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}.") + -- Gitblit v1.9.1