Remove old APIs
This commit is contained in:
parent
d8e2e69ca5
commit
75eac153d6
@ -66,21 +66,6 @@ class TextToSpeechAudio {
|
|||||||
// NOP
|
// NOP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static createFromUri(ttsUri) {
|
|
||||||
const m = /^tts:[^#?]*\?([^#]*)/.exec(ttsUri);
|
|
||||||
if (m === null) { return null; }
|
|
||||||
|
|
||||||
const searchParameters = new URLSearchParams(m[1]);
|
|
||||||
const text = searchParameters.get('text');
|
|
||||||
let voice = searchParameters.get('voice');
|
|
||||||
if (text === null || voice === null) { return null; }
|
|
||||||
|
|
||||||
voice = audioGetTextToSpeechVoice(voice);
|
|
||||||
if (voice === null) { return null; }
|
|
||||||
|
|
||||||
return new TextToSpeechAudio(text, voice);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class AudioSystem {
|
class AudioSystem {
|
||||||
@ -199,98 +184,3 @@ class AudioSystem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function audioGetFromUrl(url, willDownload) {
|
|
||||||
const tts = TextToSpeechAudio.createFromUri(url);
|
|
||||||
if (tts !== null) {
|
|
||||||
if (willDownload) {
|
|
||||||
throw new Error('AnkiConnect does not support downloading text-to-speech audio.');
|
|
||||||
}
|
|
||||||
return Promise.resolve(tts);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
const audio = new Audio(url);
|
|
||||||
audio.addEventListener('loadeddata', () => {
|
|
||||||
if (audio.duration === 5.694694 || audio.duration === 5.720718) {
|
|
||||||
// Hardcoded values for invalid audio
|
|
||||||
reject(new Error('Could not retrieve audio'));
|
|
||||||
} else {
|
|
||||||
resolve(audio);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
audio.addEventListener('error', () => reject(audio.error));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function audioGetFromSources(expression, sources, optionsContext, willDownload, cache=null) {
|
|
||||||
const key = `${expression.expression}:${expression.reading}`;
|
|
||||||
if (cache !== null) {
|
|
||||||
const cacheValue = cache.get(expression);
|
|
||||||
if (typeof cacheValue !== 'undefined') {
|
|
||||||
return cacheValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0, ii = sources.length; i < ii; ++i) {
|
|
||||||
const source = sources[i];
|
|
||||||
const url = await apiAudioGetUrl(expression, source, optionsContext);
|
|
||||||
if (url === null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
let audio = await audioGetFromUrl(url, willDownload);
|
|
||||||
if (willDownload) {
|
|
||||||
// AnkiConnect handles downloading URLs into cards
|
|
||||||
audio = null;
|
|
||||||
}
|
|
||||||
const result = {audio, url, source};
|
|
||||||
if (cache !== null) {
|
|
||||||
cache.set(key, result);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
} catch (e) {
|
|
||||||
// NOP
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return {audio: null, url: null, source: null};
|
|
||||||
}
|
|
||||||
|
|
||||||
function audioGetTextToSpeechVoice(voiceURI) {
|
|
||||||
try {
|
|
||||||
for (const voice of speechSynthesis.getVoices()) {
|
|
||||||
if (voice.voiceURI === voiceURI) {
|
|
||||||
return voice;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
// NOP
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
function audioPrepareTextToSpeech(options) {
|
|
||||||
if (
|
|
||||||
audioPrepareTextToSpeech.state ||
|
|
||||||
!options.audio.textToSpeechVoice ||
|
|
||||||
!(
|
|
||||||
options.audio.sources.includes('text-to-speech') ||
|
|
||||||
options.audio.sources.includes('text-to-speech-reading')
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
// Text-to-speech not in use.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Chrome needs this value called once before it will become populated.
|
|
||||||
// The first call will return an empty list.
|
|
||||||
audioPrepareTextToSpeech.state = true;
|
|
||||||
try {
|
|
||||||
speechSynthesis.getVoices();
|
|
||||||
} catch (e) {
|
|
||||||
// NOP
|
|
||||||
}
|
|
||||||
}
|
|
||||||
audioPrepareTextToSpeech.state = false;
|
|
||||||
|
Loading…
Reference in New Issue
Block a user