settings work

This commit is contained in:
michalcourson
2026-02-22 14:57:04 -05:00
parent f2718282c7
commit d49ac95fa2
16 changed files with 205 additions and 103 deletions

View File

@ -1,10 +1,16 @@
{
"input_device": {
"default_samplerate": 44100.0,
"index": 1,
"max_input_channels": 8,
"name": "VM Mic mix (VB-Audio Voicemeete"
"index": 49,
"name": "Microphone (Logi C615 HD WebCam)",
"max_input_channels": 1,
"default_samplerate": 48000.0
},
"save_path": "C:\\Users\\mickl\\Desktop\\cliptrim-ui\\ClipTrimApp\\audio-service\\recordings",
"recording_length": 30
"recording_length": 30,
"output_device": {
"index": 40,
"name": "Speakers (Realtek(R) Audio)",
"max_output_channels": 2,
"default_samplerate": 48000.0
}
}

View File

@ -30,7 +30,6 @@ class AudioRecorder:
self.recordings_dir = "recordings"
self.stream = sd.InputStream(
samplerate=self.sample_rate,
callback=self.record_callback
)
@ -45,7 +44,6 @@ class AudioRecorder:
self.buffer = np.zeros((int(self.duration * self.sample_rate), self.channels), dtype=np.float32)
print(f"AudioRecorder initialized with duration={self.duration}s, sample_rate={self.sample_rate}Hz, channels={self.channels}")
self.stream = sd.InputStream(
samplerate=self.sample_rate,
callback=self.record_callback
)

View File

@ -19,13 +19,13 @@ recorder = AudioRecorder()
# except Exception as e:
# return jsonify({'status': 'error', 'message': str(e)}), 400
@device_bp.route('/device/get', methods=['GET'])
def get_audio_device():
try:
device_info = audio_manager.get_default_device('input')
return jsonify({'status': 'success', 'device_info': device_info})
except Exception as e:
return jsonify({'status': 'error', 'message': str(e)}), 400
# @device_bp.route('/device/get', methods=['GET'])
# def get_audio_device():
# try:
# device_info = audio_manager.get_default_device('input')
# return jsonify({'status': 'success', 'device_info': device_info})
# except Exception as e:
# return jsonify({'status': 'error', 'message': str(e)}), 400
@device_bp.route('/device/list', methods=['GET'])
def list_audio_devices():

View File

@ -20,21 +20,44 @@ class SettingsManager:
else:
self.settings = {
"input_device": None,
"output_device": None,
"save_path": os.path.join(os.getcwd(), "recordings"),
"recording_length": 15
}
audio_manager = WindowsAudioManager()
devices = audio_manager.list_audio_devices('input')
print(f"Available input devices: {self.settings}")
input = self.settings["input_device"]
input_devices = audio_manager.list_audio_devices('input')
output_devices = audio_manager.list_audio_devices('output')
# print("Available input devices:")
# for i, dev in enumerate(input_devices):
# print(i, dev['name'])
# print("Available output devices:")
# for i, dev in enumerate(output_devices):
# print(i, dev['name'])
# print(f"Available input devices: {input_devices}")
# print(f"Available output devices: {output_devices}")
input = None
output = None
if("input_device" in self.settings):
input = self.settings["input_device"]
if("output_device" in self.settings):
output = self.settings["output_device"]
#see if input device is in "devices", if not set to the first index
if input is not None and any(d['name'] == input["name"] for d in devices):
if input is not None and any(d['name'] == input["name"] for d in input_devices):
print(f"Using saved input device index: {input}")
else:
input = devices[0] if devices else None
input = input_devices[0] if input_devices else None
self.settings["input_device"] = input
#see if output device is in "devices", if not set to the first index
if output is not None and any(d['name'] == output["name"] for d in output_devices):
print(f"Using saved output device index: {output}")
else:
output = output_devices[0] if output_devices else None
self.settings["output_device"] = output
self.save_settings()

View File

@ -18,7 +18,19 @@ class WindowsAudioManager:
"""
Initialize Windows audio device and volume management.
"""
self.devices = sd.query_devices()
host_apis = sd.query_hostapis()
wasapi_device_indexes = None
for api in host_apis:
if api['name'].lower() == 'Windows WASAPI'.lower():
wasapi_device_indexes = api['devices']
break
# print(f"Host APIs: {host_apis}")
print(f"WASAPI Device Indexes: {wasapi_device_indexes}")
wasapi_device_indexes = set(wasapi_device_indexes) if wasapi_device_indexes is not None else set()
self.devices = [dev for dev in sd.query_devices() if dev['index'] in wasapi_device_indexes]
# self.devices = sd.query_devices()
print(f"devices: {self.devices}")
self.default_input = sd.default.device[0]
self.default_output = sd.default.device[1]
@ -34,7 +46,7 @@ class WindowsAudioManager:
{
'index': dev['index'],
'name': dev['name'],
'max_input_channels': dev['max_input_channels'],
'channels': dev['max_input_channels'],
'default_samplerate': dev['default_samplerate']
}
for dev in self.devices if dev['max_input_channels'] > 0
@ -44,7 +56,7 @@ class WindowsAudioManager:
{
'index': dev['index'],
'name': dev['name'],
'max_output_channels': dev['max_output_channels'],
'channels': dev['max_output_channels'],
'default_samplerate': dev['default_samplerate']
}
for dev in self.devices if dev['max_output_channels'] > 0