mirror of
https://github.com/eliasstepanik/strudel-docker.git
synced 2026-01-11 13:48:34 +00:00
34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
import { Pattern, patternify2 } from './index.mjs';
|
|
|
|
const synth = window?.speechSynthesis;
|
|
let allVoices = synth?.getVoices();
|
|
// console.log('voices', allVoices);
|
|
|
|
function speak(words, lang, voice) {
|
|
synth.cancel();
|
|
const utterance = new SpeechSynthesisUtterance(words);
|
|
utterance.lang = lang;
|
|
allVoices = synth.getVoices();
|
|
const voices = allVoices.filter((v) => v.lang.includes(lang));
|
|
if (typeof voice === 'number') {
|
|
utterance.voice = voices[voice % voices.length];
|
|
} else if (typeof voice === 'string') {
|
|
utterance.voice = voices.find((voice) => voice.name === voice);
|
|
}
|
|
// console.log(utterance.voice?.name, utterance.voice?.lang);
|
|
speechSynthesis.speak(utterance);
|
|
}
|
|
|
|
Pattern.prototype._speak = function (lang, voice) {
|
|
return this._withEvent((event) => {
|
|
const onTrigger = (time, event) => {
|
|
speak(event.value, lang, voice);
|
|
};
|
|
return event.setContext({ ...event.context, onTrigger });
|
|
});
|
|
};
|
|
|
|
Pattern.prototype.speak = function (lang, voice) {
|
|
return patternify2(Pattern.prototype._speak)(reify(lang), reify(voice), this);
|
|
};
|