Different start and stop sounds.
This commit is contained in:
parent
ab79f77747
commit
528bfc24e1
7 changed files with 27 additions and 10 deletions
Binary file not shown.
BIN
src-tauri/resources/rec_start.wav
Normal file
BIN
src-tauri/resources/rec_start.wav
Normal file
Binary file not shown.
BIN
src-tauri/resources/rec_stop.wav
Normal file
BIN
src-tauri/resources/rec_stop.wav
Normal file
Binary file not shown.
|
|
@ -2,7 +2,8 @@ use crate::managers::audio::AudioRecordingManager;
|
|||
use crate::managers::transcription::TranscriptionManager;
|
||||
use crate::utils;
|
||||
use crate::utils::change_tray_icon;
|
||||
use crate::utils::play_recording_sound;
|
||||
use crate::utils::play_recording_start_sound;
|
||||
use crate::utils::play_recording_stop_sound;
|
||||
use crate::utils::TrayIconState;
|
||||
use once_cell::sync::Lazy;
|
||||
use std::collections::HashMap;
|
||||
|
|
@ -25,7 +26,7 @@ impl ShortcutAction for TranscribeAction {
|
|||
change_tray_icon(app, TrayIconState::Recording);
|
||||
|
||||
// Play audio feedback for recording start
|
||||
play_recording_sound(app);
|
||||
play_recording_start_sound(app);
|
||||
|
||||
let rm = app.state::<Arc<AudioRecordingManager>>();
|
||||
rm.try_start_recording(&binding_id);
|
||||
|
|
@ -39,7 +40,7 @@ impl ShortcutAction for TranscribeAction {
|
|||
change_tray_icon(app, TrayIconState::Idle);
|
||||
|
||||
// Play audio feedback for recording stop
|
||||
play_recording_sound(app);
|
||||
play_recording_stop_sound(app);
|
||||
|
||||
let binding_id = binding_id.to_string(); // Clone binding_id for the async task
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ pub fn get_default_settings() -> AppSettings {
|
|||
AppSettings {
|
||||
bindings,
|
||||
push_to_talk: true,
|
||||
audio_feedback: true,
|
||||
audio_feedback: false,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -87,7 +87,9 @@ pub fn change_tray_icon(app: &AppHandle, icon: TrayIconState) {
|
|||
));
|
||||
}
|
||||
|
||||
pub fn play_recording_sound(app: &AppHandle) {
|
||||
/// Plays an audio resource from the resources directory.
|
||||
/// Checks if audio feedback is enabled in settings before playing.
|
||||
pub fn play_sound(app: &AppHandle, resource_path: &str) {
|
||||
// Check if audio feedback is enabled
|
||||
let settings = settings::get_settings(app);
|
||||
if !settings.audio_feedback {
|
||||
|
|
@ -95,28 +97,42 @@ pub fn play_recording_sound(app: &AppHandle) {
|
|||
}
|
||||
|
||||
let app_handle = app.clone();
|
||||
let resource_path = resource_path.to_string();
|
||||
|
||||
// Spawn a new thread to play the audio without blocking the main thread
|
||||
thread::spawn(move || {
|
||||
// Get the path to the rec.wav file in resources
|
||||
// Get the path to the audio file in resources
|
||||
let audio_path = match app_handle
|
||||
.path()
|
||||
.resolve("resources/rec.wav", tauri::path::BaseDirectory::Resource)
|
||||
.resolve(&resource_path, tauri::path::BaseDirectory::Resource)
|
||||
{
|
||||
Ok(path) => path,
|
||||
Err(e) => {
|
||||
eprintln!("Failed to resolve audio file path: {}", e);
|
||||
eprintln!(
|
||||
"Failed to resolve audio file path '{}': {}",
|
||||
resource_path, e
|
||||
);
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
// Try to play the audio file
|
||||
if let Err(e) = play_audio_file(&audio_path) {
|
||||
eprintln!("Failed to play recording sound: {}", e);
|
||||
eprintln!("Failed to play sound '{}': {}", resource_path, e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// Convenience function to play the recording start sound
|
||||
pub fn play_recording_start_sound(app: &AppHandle) {
|
||||
play_sound(app, "resources/rec_start.wav");
|
||||
}
|
||||
|
||||
/// Convenience function to play the recording stop sound
|
||||
pub fn play_recording_stop_sound(app: &AppHandle) {
|
||||
play_sound(app, "resources/rec_stop.wav");
|
||||
}
|
||||
|
||||
fn play_audio_file(path: &std::path::Path) -> Result<(), Box<dyn std::error::Error>> {
|
||||
// Get a output stream handle to the default physical sound device
|
||||
let (_stream, stream_handle) = OutputStream::try_default()?;
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ export const KeyboardShortcuts: React.FC = () => {
|
|||
const [bindings, setBindings] = React.useState<ShortcutBindingsMap>({});
|
||||
const [pttEnabled, setPttEnabled] = React.useState<boolean>(false);
|
||||
const [audioFeedbackEnabled, setAudioFeedbackEnabled] =
|
||||
React.useState<boolean>(true);
|
||||
React.useState<boolean>(false);
|
||||
const [keyPressed, setKeyPressed] = useState<string[]>([]);
|
||||
const [recordedKeys, setRecordedKeys] = useState<string[]>([]);
|
||||
const [editingShortcutId, setEditingShortcutId] = useState<string | null>(
|
||||
|
|
|
|||
Loading…
Reference in a new issue