python service http refactor start

This commit is contained in:
michalcourson
2026-02-14 11:24:09 -05:00
parent 5516ce9212
commit f3b883602e
27 changed files with 415 additions and 205 deletions

View File

@ -1,92 +1,75 @@
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
from metadata_manager import MetaDataManager
from settings import SettingsManager
from flask import Flask
from routes.recording import recording_bp
from routes.device import device_bp
from routes.metadata import metadata_bp
from routes.settings import settings_bp
import threading
app = Flask(__name__)
def main():
global recorder, audio_manager
# 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)
default=5010)
# Parse arguments
args = parser.parse_args()
audio_manager = WindowsAudioManager()
settings = SettingsManager()
# 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
os.makedirs(settings.get_settings('save_path'), exist_ok=True)
# Create AudioRecorder with specified parameters
# Handle input device selection
# Create Singletons with correct parameters
recorder = AudioRecorder(
duration=args.recording_length,
recordings_dir=args.save_path,
duration=settings.get_settings('recording_length'),
recordings_dir=settings.get_settings('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
)
meta = MetaDataManager()
audio_manager = WindowsAudioManager()
# Register blueprints
app.register_blueprint(recording_bp)
app.register_blueprint(device_bp)
app.register_blueprint(metadata_bp)
app.register_blueprint(settings_bp)
app.run(host='127.0.0.1', port=args.osc_port, debug=False, use_reloader=True)
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()
# 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()