This commit is contained in:
michalcourson
2026-02-04 18:13:56 -05:00
commit 51ad065047
26 changed files with 8383 additions and 0 deletions

92
audio-service/src/main.py Normal file
View File

@ -0,0 +1,92 @@
import argparse
import os
import sys
from osc_server import OSCRecordingServer
from audio_recorder import AudioRecorder
from windows_audio import WindowsAudioManager
import sounddevice as sd
def main():
# Create argument parser
parser = argparse.ArgumentParser(description='Audio Recording Service')
# Input device argument
parser.add_argument('--input-device',
type=str,
help='Name or index of the input audio device',
default=None)
# Recording length argument
parser.add_argument('--recording-length',
type=float,
help='Maximum recording length in seconds',
default=30.0)
# Recording save path argument
parser.add_argument('--save-path',
type=str,
help='Directory path to save recordings',
default=os.path.join(os.path.dirname(__file__), 'recordings'))
# OSC port argument
parser.add_argument('--osc-port',
type=int,
help='OSC server port number',
default=5005)
# Parse arguments
args = parser.parse_args()
# Ensure save path exists
os.makedirs(args.save_path, exist_ok=True)
audio_manager=WindowsAudioManager()
# Handle input device selection
input_device = None
devices = audio_manager.list_audio_devices('input')
if args.input_device:
try:
# Try to convert to integer first (for device index)
input_device = int(args.input_device)
except ValueError:
# If not an integer, treat as device name
print(devices)
for i, device in enumerate(devices):
if args.input_device.lower() in device['name'].lower():
input_device = device['index']
print(f"Using input device: {device['name']}")
break
# Create AudioRecorder with specified parameters
recorder = AudioRecorder(
duration=args.recording_length,
recordings_dir=args.save_path,
# channels=min(2, devices[input_device]['max_input_channels']),
)
# Create OSC server with specified port
osc_server = OSCRecordingServer(
recorder=recorder,
port=args.osc_port,
audio_manager=audio_manager
)
osc_server.set_audio_device(None, str(input_device))
osc_server.start_recording(None)
# Run the OSC server
try:
print(f"Starting OSC Recording Server on port {args.osc_port}")
print(f"Recording save path: {args.save_path}")
print(f"Max recording length: {args.recording_length} seconds")
osc_server.run_server()
except KeyboardInterrupt:
print("\nServer stopped by user.")
except Exception as e:
print(f"Error starting server: {e}")
sys.exit(1)
if __name__ == "__main__":
main()