You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.3 KiB
47 lines
1.3 KiB
const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:8080/api'; |
|
|
|
/** |
|
* Play pronunciation audio for a word |
|
* @param wordId The ID of the word to pronounce |
|
* @returns Promise that resolves when audio starts playing |
|
*/ |
|
export async function playWordPronunciation(wordId: number): Promise<void> { |
|
return new Promise((resolve, reject) => { |
|
const audio = new Audio(`${API_BASE_URL}/speech-sounds/pronounce/${wordId}`); |
|
|
|
audio.onloadeddata = () => { |
|
audio.play().then(() => { |
|
resolve(); |
|
}).catch((error) => { |
|
console.error('Error playing audio:', error); |
|
reject(new Error('Failed to play audio')); |
|
}); |
|
}; |
|
|
|
audio.onerror = (error) => { |
|
console.error('Audio loading error:', error); |
|
reject(new Error('Failed to load audio')); |
|
}; |
|
|
|
// Handle audio end |
|
audio.onended = () => { |
|
// Clean up |
|
}; |
|
}); |
|
} |
|
|
|
/** |
|
* Check if audio is available for a word (without playing it) |
|
* @param wordId The ID of the word to check |
|
* @returns Promise that resolves to true if audio is available |
|
*/ |
|
export async function checkAudioAvailability(wordId: number): Promise<boolean> { |
|
try { |
|
const response = await fetch(`${API_BASE_URL}/speech-sounds/pronounce/${wordId}`, { |
|
method: 'HEAD' |
|
}); |
|
return response.ok; |
|
} catch (error) { |
|
return false; |
|
} |
|
}
|
|
|