Web Speech APIã®èœåãæ¢æ±ããã·ãŒã ã¬ã¹ãªé³å£°èªèãšèªç¶ãªé³å£°åæã§ãäžçäžã®ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã«ããããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã«é©åœããããããŸãã
ãŠã§ãã®åãè§£ãæŸã€ïŒããã³ããšã³ãWeb Speech APIã«ããé³å£°èªèãšåæã®åŸ¹åºè§£èª¬
仿¥ã®æ¥éã«é²åããããžã¿ã«ç°å¢ã«ãããŠããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã¯æãéèŠã§ããç§ãã¡ã¯åŸæ¥ã®ããŒããŒããããŠã¹å ¥åãããããã€ã¹ãšå¯Ÿè©±ããããã®ããçŽæçã§èªç¶ãªæ¹æ³ãžãšç§»è¡ããŠããŸãããã®é©åœã®æåç·ã«ããã®ãWeb Speech APIã§ããããã¯ãããã³ããšã³ãéçºè ãé«åºŠãªé³å£°èªèãšèªç¶ãªé³å£°åææ©èœããŠã§ãã¢ããªã±ãŒã·ã§ã³ã«çŽæ¥çµ±åã§ããããã«ããã匷åãªãã©ãŠã¶ãã€ãã£ãã®ã€ã³ã¿ãŒãã§ãŒã¹ã§ãããã®å æ¬çãªã¬ã€ãã§ã¯ããã®APIã®è€éããæ¢æ±ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå€é©ããã¢ã¯ã»ã·ããªãã£ãåäžããã倿§ãªãŠã§ããã©ãããã©ãŒã å šäœã§ã€ãããŒã·ã§ã³ãæšé²ããå¯èœæ§ã«ã€ããŠãã°ããŒãã«ãªèŠç¹ãã解説ããŸãã
Web Speech APIïŒé³å£°å¯Ÿå¿ãŠã§ãäœéšãžã®ã²ãŒããŠã§ã€
Web Speech APIã¯ãäž»ã«é³å£°èªèãšé³å£°åæãšãã2ã€ã®æ©èœãæäŸããŸãããããã®æ©èœã¯ããã€ãŠã¯å°çšã¢ããªã±ãŒã·ã§ã³ãè€éãªãµãŒããŒãµã€ãåŠçã«éå®ãããŠããŸããããä»ã§ã¯ææ°ã®ãŠã§ããã©ãŠã¶ãéããŠããã³ããšã³ãéçºè ã容æã«å©çšã§ããããã«ãªããŸããããã®é³å£°æè¡ã®æ°äž»åã¯ãäžçäžã®ãŠãŒã¶ãŒã«ãšã£ãŠãããé åçã§ãå¹ççã§ãã¢ã¯ã»ã¹ãããããŠã§ãã¢ããªã±ãŒã·ã§ã³ãäœæããããã®å¯èœæ§ã®äžçãåãéããŸãã
äžå¿ãšãªãAPIã¯æšæºåãããŠããŸããããã©ãŠã¶ã®å®è£ ã¯ç°ãªãå Žåãããããšã«æ³šæãå¿ èŠã§ããæé©ãªã¯ãã¹ãã©ãŠã¶äºææ§ã確ä¿ããããã«ãéçºè ã¯ãã°ãã°ããªãã£ã«ãç¹å®ã®ãã©ãŠã¶ãã§ãã¯ã«äŸåããŸããããã«ãé³å£°èªèãšåæã®å©çšå¯èœæ§ãå質ã¯ããŠãŒã¶ãŒã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãèšèªèšå®ãã€ã³ã¹ããŒã«ãããŠããé³å£°ãšã³ãžã³ã«ãã£ãŠç°ãªãå ŽåããããŸãã
ããŒã1ïŒé³å£°èªè â ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã«è³ãäžãã
é³å£°èªèã¯ãèªåé³å£°èªèïŒASRïŒãšãåŒã°ããã³ã³ãã¥ãŒã¿ã人éã®é³å£°ãçè§£ããããã¹ãã«æžãèµ·ããããšãå¯èœã«ããæè¡ã§ããWeb Speech APIã¯ããã©ãŠã¶ã«çµã¿èŸŒãŸããASRæ©èœã掻çšãããããããã³ããšã³ãã§ã®å®è£ ãéåžžã«å®¹æã§ãã
`SpeechRecognition`ãªããžã§ã¯ã
Web Speech APIã«ãããé³å£°èªèã®åºç€ãšãªãã®ã`SpeechRecognition`ãªããžã§ã¯ãã§ãããã®ãªããžã§ã¯ãã¯ãé³å£°èªèããã»ã¹ãå¶åŸ¡ããã³ç®¡çããããã®äžå¿çãªã€ã³ã¿ãŒãã§ãŒã¹ãšããŠæ©èœããŸãã
`SpeechRecognition`ã€ã³ã¹ã¿ã³ã¹ã®äœæïŒ
const recognition = new SpeechRecognition();
ãã©ãŠã¶ã®äºææ§ãåŠçããããšãéèŠã§ãã`SpeechRecognition`ãå©çšã§ããªãå Žåãå€ãChromeããŒãžã§ã³åãã«`webkitSpeechRecognition`ã詊ãããšãã§ããŸãããããã¯ãŸããŸãçšã«ãªã£ãŠããŸãã
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();
`SpeechRecognition`ã®äž»èŠãªããããã£
`SpeechRecognition`ãªããžã§ã¯ãã«ã¯ãèªèããã»ã¹ã埮調æŽããããã®ããã€ãã®ããããã£ããããŸãïŒ
- `lang`ïŒé³å£°èªèã®èšèªãæå®ããŸããããã¯åœéçãªå©çšè
ã察象ãšããå Žåã«äžå¯æ¬ ã§ããäŸãã°ãã¢ã¡ãªã«è±èªã«ã¯
'en-US'ãã€ã®ãªã¹è±èªã«ã¯'en-GB'ããã©ã³ã¹èªã«ã¯'fr-FR'ãã¹ãã€ã³èªã«ã¯'es-ES'ãå京èªã«ã¯'zh-CN'ãšèšå®ããããšã§ãç°ãªãå°åã®ãŠãŒã¶ãŒã«å¯ŸããŠæ£ç¢ºãªæåèµ·ãããä¿èšŒããŸãã - `continuous`ïŒé³å£°èªèãçãäŒæ¢ã®åŸãèãåããç¶ããã¹ããã瀺ãããŒã«å€ãããã
trueã«èšå®ãããšé£ç¶çãªãã£ã¯ããŒã·ã§ã³ãå¯èœã«ãªããfalseïŒããã©ã«ãïŒã«èšå®ãããšæåã®çºè©±ãæ€åºãããåŸã«èªèã忢ããŸãã - `interimResults`ïŒããŒã«å€ã
trueã«èšå®ãããšãé³å£°ãåŠçãããŠããéã«äžéçµæãè¿ããããå¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããŸããfalseïŒããã©ã«ãïŒã«èšå®ãããšãæçµçã«ç¢ºå®ããæåèµ·ããã®ã¿ãè¿ããŸãã - `maxAlternatives`ïŒè¿ã代æ¿ã®æåèµ·ããã®æå€§æ°ãæå®ããŸããããã©ã«ãã§ã¯1ã€ã ãè¿ããŸãã
- `grammars`ïŒéçºè ãèªèãšã³ãžã³ã«åªå ãããã¹ãåèªããã¬ãŒãºã®ã»ãããå®çŸ©ã§ããããã«ããŸããããã¯ãã³ãã³ãïŒã³ã³ãããŒã«ã€ã³ã¿ãŒãã§ãŒã¹ãç¹å®ã®ãã¡ã€ã³ã®ã¢ããªã±ãŒã·ã§ã³ã«éåžžã«äŸ¿å©ã§ãã
èªèããã»ã¹ã管çããããã®ã€ãã³ã
`SpeechRecognition`ãªããžã§ã¯ãã¯ã€ãã³ãé§ååã§ãããèªèããã»ã¹ã®ããŸããŸãªæ®µéã«å¯Ÿå¿ã§ããŸãïŒ
- `onstart`ïŒé³å£°èªèãµãŒãã¹ãèãåããéå§ãããšãã«çºçããŸããUIãæŽæ°ããŠèãåããå§ãŸã£ãããšã瀺ãã®ã«é©ããŠããŸãã
- `onend`ïŒé³å£°èªèãµãŒãã¹ãèãåãã忢ãããšãã«çºçããŸããUIããªã»ããããããæ¬¡ã®èãåãã»ãã·ã§ã³ã®æºåããããããããã«äœ¿çšã§ããŸãã
- `onresult`ïŒé³å£°ã®çµæãå©çšå¯èœã«ãªã£ããšãã«çºçããŸããããã§éåžžãæåèµ·ãããããããã¹ããåŠçããŸããã€ãã³ããªããžã§ã¯ãã«ã¯`results`ããããã£ãå«ãŸããŠãããããã¯`SpeechRecognitionResultList`ã§ããå`SpeechRecognitionResult`ã«ã¯ã1ã€ä»¥äžã®`SpeechRecognitionAlternative`ãªããžã§ã¯ããå«ãŸãããããããç°ãªãå¯èœæ§ã®ããæåèµ·ããã衚ããŸãã
- `onerror`ïŒèªèããã»ã¹äžã«ãšã©ãŒãçºçãããšãã«çºçããŸããå
ç¢ãªã¢ããªã±ãŒã·ã§ã³ã®ããã«ã¯ããšã©ãŒãé©åã«åŠçããããšãäžå¯æ¬ ã§ããäžè¬çãªãšã©ãŒã«ã¯ã
no-speechïŒé³å£°ãæ€åºãããªãã£ãïŒãaudio-captureïŒãã€ã¯ãžã®ã¢ã¯ã»ã¹ãæåŠãããïŒãlanguage-not-supportedãªã©ããããŸãã - `onnomatch`ïŒé³å£°èªèãµãŒãã¹ã話ãããå ¥åã«å¯ŸããŠé©åãªäžèŽãèŠã€ããããªãã£ããšãã«çºçããŸãã
- `onspeechstart`ïŒãŠãŒã¶ãŒãšãŒãžã§ã³ãã«ãã£ãŠé³å£°ãæ€åºããããšãã«çºçããŸãã
- `onspeechend`ïŒãŠãŒã¶ãŒãšãŒãžã§ã³ãã«ãã£ãŠé³å£°ãæ€åºãããªããªã£ããšãã«çºçããŸãã
èªèã®éå§ãšåæ¢
é³å£°èªèããã»ã¹ãéå§ããã«ã¯ãstart()ã¡ãœããã䜿çšããŸãïŒ
recognition.start();
èªèã忢ããã«ã¯ãstop()ã¡ãœããã䜿çšããŸãïŒ
recognition.stop();
ãŸããabort()ã䜿çšããŠèªèã忢ããçµæãå³åº§ã«ç Žæ£ããããcontinuousã䜿çšããŠç¶ç¶çãªèãåãã管çãããããããšãã§ããŸãã
é³å£°èªèçµæã®åŠç
`onresult`ã€ãã³ãã§éæ³ãèµ·ãããŸããããã§æåèµ·ãããããããã¹ãã«ã¢ã¯ã»ã¹ããã¢ããªã±ãŒã·ã§ã³å ã§äœ¿çšããŸãã
recognition.onresult = (event) => {
const transcript = event.results[0][0].transcript;
console.log('User said:', transcript);
// Now you can use the transcript in your application, e.g., update a text field,
// trigger an action, or perform a search.
};
`interimResults`ã`true`ã«èšå®ãããŠããå Žåãè€æ°ã®`onresult`ã€ãã³ããåãåããŸãã`SpeechRecognitionResult`ãªããžã§ã¯ãã®`isFinal`ããããã£ããã§ãã¯ããããšã§ãäžéçµæãšæçµçµæãåºå¥ã§ããŸãïŒ
recognition.onresult = (event) => {
let interimTranscript = '';
let finalTranscript = '';
for (let i = 0; i < event.results.length; i++) {
const result = event.results[i];
if (result.isFinal) {
finalTranscript += result[0].transcript;
} else {
interimTranscript += result[0].transcript;
}
}
console.log('Interim:', interimTranscript);
console.log('Final:', finalTranscript);
// Update your UI accordingly.
};
å®è·µçãªå¿çšïŒé³å£°æ€çŽ¢
ãŠãŒã¶ãŒãé³å£°ã§ååãæ€çŽ¢ã§ããã°ããŒãã«ãªEã³ããŒã¹ãã©ãããã©ãŒã ãæ³åããŠã¿ãŠãã ããããŠãŒã¶ãŒã®å¥œã¿ããã©ãŠã¶ã®èšå®ã«åºã¥ããŠ`lang`ããããã£ãåçã«èšå®ããããšã¯ãã·ãŒã ã¬ã¹ãªåœéäœéšã®ããã«äžå¯æ¬ ã§ãã
äŸïŒé³å£°å¯Ÿå¿ã®æ€çŽ¢å ¥å
const searchInput = document.getElementById('searchInput');
const voiceSearchButton = document.getElementById('voiceSearchButton');
voiceSearchButton.addEventListener('click', () => {
const recognition = new SpeechRecognition();
recognition.lang = 'en-US'; // Or dynamically set based on user locale
recognition.interimResults = true;
recognition.onresult = (event) => {
const transcript = event.results[0][0].transcript;
searchInput.value = transcript;
if (event.results[0].isFinal) {
// Automatically trigger search on final result
searchForm.submit();
}
};
recognition.onend = () => {
console.log('Voice recognition ended.');
};
recognition.onerror = (event) => {
console.error('Speech recognition error:', event.error);
};
recognition.start();
});
ãã®ç°¡åãªäŸã¯ãé³å£°èªèãããã«ç°¡åã«çµ±åã§ãããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãåäžãããããšãã§ãããã瀺ããŠããŸããã°ããŒãã«ãªå©çšè ã察象ãšããå Žåã`lang`屿§ãåçã«èšå®ããŠè€æ°ã®èšèªããµããŒãããããšãéèŠãªèæ ®äºé ã§ãã
é³å£°èªèã«é¢ããåœéçãªèæ ®äºé
- èšèªãµããŒãïŒãã©ãŠã¶ãšåºç€ãšãªãé³å£°ãšã³ãžã³ãããŠãŒã¶ãŒã話ãèšèªããµããŒãããŠããããšã確èªããŠãã ãããèšèªéžæã¡ã«ããºã ãæäŸããããšãè³¢æã§ãã
- å°åçãªã¢ã¯ã»ã³ãïŒé³å£°èªèã¢ãã«ã¯èšå€§ãªããŒã¿ã»ããã§ãã¬ãŒãã³ã°ãããŠããŸããäžè¬çã«å ç¢ã§ããã匷ãå°åçãªã¢ã¯ã»ã³ãã«å¯ŸããŠã¯ããã©ãŒãã³ã¹ãç°ãªãå ŽåããããŸãã倿§ãªãŠãŒã¶ãŒã»ããã§ã®ãã¹ããæšå¥šãããŸãã
- çºé³ã®ããªãšãŒã·ã§ã³ïŒã¢ã¯ã»ã³ããšåæ§ã«ãèšèªå ã®äžè¬çãªçºé³ã®ããªãšãŒã·ã§ã³ãèæ ®ã«å ¥ããã¹ãã§ãã
- èæ¯éé³ïŒçŸå®äžçã®ç°å¢ã¯å€§ããç°ãªããŸããAPIã®ããã©ãŒãã³ã¹ã¯èæ¯éé³ã®åœ±é¿ãåããå¯èœæ§ããããŸããèªèç¶æ³ã«é¢ããèŠèŠçãªãã£ãŒãããã¯ãæäŸããUIèŠçŽ ã¯ããŠãŒã¶ãŒããã€ã¯ã£ãããšè©±ãã¹ãããçè§£ããã®ã«åœ¹ç«ã¡ãŸãã
ããŒã2ïŒé³å£°åæ â ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã«å£°ãäžãã
é³å£°åæã¯ãããã¹ãèªã¿äžãïŒTTSïŒãšãåŒã°ããã³ã³ãã¥ãŒã¿ãããã¹ããã人éã®ãããªé³å£°ãçæããæè¡ã§ããWeb Speech APIã®é³å£°åæã¢ãžã¥ãŒã«ã¯ãäž»ã«`SpeechSynthesisUtterance`ããã³`speechSynthesis`ãªããžã§ã¯ããéããŠããŠã§ãã¢ããªã±ãŒã·ã§ã³ã«çºè©±æ©èœãæãããããšãã§ããŸãã
`SpeechSynthesis`ãš`SpeechSynthesisUtterance`ãªããžã§ã¯ã
speechSynthesisãªããžã§ã¯ãã¯ãé³å£°åæã®ã³ã³ãããŒã©ãŒã§ããçºè©±ã®ãã¥ãŒã管çããåçãå¶åŸ¡ããã¡ãœãããæäŸããŸãã
`speechSynthesis`ãªããžã§ã¯ããžã®ã¢ã¯ã»ã¹ïŒ
const synth = window.speechSynthesis;
SpeechSynthesisUtteranceãªããžã§ã¯ãã¯ãåäžã®çºè©±ãªã¯ãšã¹ãã衚ããŸããçºè©±ããããããã¹ãããšã«ããã®ãªããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã
`SpeechSynthesisUtterance`ã®äœæïŒ
const utterance = new SpeechSynthesisUtterance('Hello, world!');
çºè©±ããããããã¹ãã§åæåã§ããŸãããã®ããã¹ãã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ããååŸããåçãªãã®ã§ãã£ãŠãããŸããŸããã
`SpeechSynthesisUtterance`ã®äž»èŠãªããããã£
`SpeechSynthesisUtterance`ãªããžã§ã¯ãã¯ãåºç¯ãªã«ã¹ã¿ãã€ãºãæäŸããŸãïŒ
- `text`ïŒçºè©±ãããããã¹ããããã¯æãåºæ¬çãªããããã£ã§ãã
- `lang`ïŒé³å£°ã®èšèªãèªèãšåæ§ã«ãããã¯åœéçãªã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠäžå¯æ¬ ã§ããäŸïŒ
'en-US'ã'fr-FR'ã'de-DE'ïŒãã€ãèªïŒã'ja-JP'ïŒæ¥æ¬èªïŒã - `pitch`ïŒå£°ã®é«ãã0ïŒæäœïŒãã2ïŒæé«ïŒã®ç¯å²ã§ã1ãéåžžã®é«ãã§ãã
- `rate`ïŒè©±ãéãã0.1ïŒæãé ãïŒãã10ïŒæãéãïŒã®ç¯å²ã§ã1ãéåžžã®éãã§ãã
- `volume`ïŒé³å£°ã®é³éã0ïŒç¡é³ïŒãã1ïŒæå€§ïŒã®ç¯å²ã§ãã
- `voice`ïŒç¹å®ã®å£°ãéžæã§ããŸãããã©ãŠã¶ã¯å©çšå¯èœãªå£°ã®ãªã¹ããæäŸããããã¯`speechSynthesis.getVoices()`ã䜿çšããŠéåæã«ååŸã§ããŸãã
- `onboundary`ïŒé³å£°åæãšã³ãžã³ãåèªãŸãã¯æã®å¢çã«ééãããšãã«çºçããŸãã
- `onend`ïŒçºè©±ãçµäºãããšãã«çºçããŸãã
- `onerror`ïŒé³å£°åæäžã«ãšã©ãŒãçºçãããšãã«çºçããŸãã
- `onpause`ïŒé³å£°åæãäžæåæ¢ãããšãã«çºçããŸãã
- `onresume`ïŒäžæåæ¢åŸã«é³å£°åæãåéãããšãã«çºçããŸãã
- `onstart`ïŒçºè©±ãéå§ããããšãã«çºçããŸãã
ããã¹ãã®çºè©±
ãã©ãŠã¶ã«çºè©±ãããã«ã¯ã`speechSynthesis`ãªããžã§ã¯ãã®`speak()`ã¡ãœããã䜿çšããŸãïŒ
synth.speak(utterance);
`speak()`ã¡ãœããã¯ãçºè©±ãé³å£°åæã®ãã¥ãŒã«è¿œå ããŸãããã§ã«çºè©±äžã®ãã®ãããã°ãæ°ãããã®ã¯é çªãåŸ ã¡ãŸãã
çºè©±ã®å¶åŸ¡
`speechSynthesis`ãªããžã§ã¯ãã䜿çšããŠãé³å£°ã®åçãå¶åŸ¡ã§ããŸãïŒ
- `synth.pause()`ïŒçŸåšã®çºè©±ãäžæåæ¢ããŸãã
- `synth.resume()`ïŒäžæåæ¢ãããšããããçºè©±ãåéããŸãã
- `synth.cancel()`ïŒãã¹ãŠã®çºè©±ã忢ãããã¥ãŒãã¯ãªã¢ããŸãã
é³å£°ã®éžæ
é³å£°ã®å©çšå¯èœæ§ãšå質ã¯ããã©ãŠã¶ãšãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«å€§ããäŸåããŸããç¹å®ã®é³å£°ã䜿çšããã«ã¯ããŸãå©çšå¯èœãªé³å£°ã®ãªã¹ããååŸããå¿ èŠããããŸãïŒ
let voices = [];
function populateVoiceList() {
voices = synth.getVoices().filter(voice => voice.lang.startsWith('en')); // Filter for English voices
// Populate a dropdown menu with voice names
const voiceSelect = document.getElementById('voiceSelect');
voices.forEach((voice, i) => {
const option = document.createElement('option');
option.textContent = `${voice.name} (${voice.lang})`;
option.setAttribute('data-lang', voice.lang);
option.setAttribute('data-name', voice.name);
voiceSelect.appendChild(option);
});
}
if (speechSynthesis.onvoiceschanged !== undefined) {
speechSynthesis.onvoiceschanged = populateVoiceList;
}
// Handle voice selection from a dropdown
const voiceSelect = document.getElementById('voiceSelect');
voiceSelect.addEventListener('change', () => {
const selectedVoiceName = voiceSelect.selectedOptions[0].getAttribute('data-name');
const selectedVoice = voices.find(voice => voice.name === selectedVoiceName);
const utterance = new SpeechSynthesisUtterance('This is a test with a selected voice.');
utterance.voice = selectedVoice;
synth.speak(utterance);
});
// Initial population if voices are already available
populateVoiceList();
éèŠãªæ³šæïŒspeechSynthesis.getVoices()ã¯æã
éåæã§åäœããããšããããŸããonvoiceschangedã€ãã³ããã³ãã©ããå®å
šãªé³å£°ãªã¹ããååŸããããã®æãä¿¡é Œæ§ã®é«ãæ¹æ³ã§ãã
å®è·µçãªå¿çšïŒã€ã³ã¿ã©ã¯ãã£ããªãã¥ãŒããªã¢ã«ãšéç¥
ãŠãŒã¶ãŒãã€ã³ã¿ã©ã¯ãã£ããªãã¥ãŒããªã¢ã«ãé²ãããªã³ã©ã€ã³åŠç¿ãã©ãããã©ãŒã ãèããŠã¿ãŸããããé³å£°åæã¯ãæç€ºãèªã¿äžãããããã£ãŒãããã¯ãæäŸãããããããšã§ãç¹ã«èŠèŠé害ã®ãããŠãŒã¶ãŒããã«ãã¿ã¹ã¯äžã®ãŠãŒã¶ãŒã®åŠç¿äœéšãåäžãããããšãã§ããŸããã°ããŒãã«ãªå©çšè ã察象ãšããå Žåãè€æ°ã®èšèªããµããŒãããããšãæãéèŠã§ãã
äŸïŒãã¥ãŒããªã¢ã«ã®ã¹ããããèªã¿äžãã
const tutorialSteps = [
{ text: 'Welcome to our interactive tutorial. First, locate the "Start" button.', lang: 'en-US' },
{ text: 'Bienvenue dans notre tutoriel interactif. D\'abord, trouvez le bouton \'Démarrer\'.', lang: 'fr-FR' },
// Add steps for other languages
];
let currentStepIndex = 0;
function speakStep(index) {
if (index >= tutorialSteps.length) {
console.log('Tutorial finished.');
return;
}
const step = tutorialSteps[index];
const utterance = new SpeechSynthesisUtterance(step.text);
utterance.lang = step.lang;
// Optionally, select a voice based on the language
const preferredVoice = voices.find(voice => voice.lang === step.lang);
if (preferredVoice) {
utterance.voice = preferredVoice;
}
utterance.onend = () => {
currentStepIndex++;
setTimeout(() => speakStep(currentStepIndex), 1000); // Wait for 1 second before the next step
};
utterance.onerror = (event) => {
console.error('Speech synthesis error:', event.error);
currentStepIndex++;
setTimeout(() => speakStep(currentStepIndex), 1000); // Continue even if there's an error
};
synth.speak(utterance);
}
// To start the tutorial:
// speakStep(currentStepIndex);
é³å£°åæã«é¢ããåœéçãªèæ ®äºé
- é³å£°ã®å©çšå¯èœæ§ãšå質ïŒé³å£°ã®å€æ§æ§ã¯ãã©ãŠã¶ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ãã£ãŠå€§ããç°ãªããŸããé«å質ã§èªç¶ãªé³å£°ãæäŸãããã®ãããã°ãããããã®ããã«èããããã®ããããŸãã
- èšèªãšã¢ã¯ã»ã³ãã®ãµããŒãïŒéžæããé³å£°ããæå³ããèšèªãå°åçãªã¢ã¯ã»ã³ãïŒè©²åœããå ŽåïŒãæ£ç¢ºã«è¡šçŸããŠããããšã確èªããŠãã ãããåœã«ãã£ãŠããŠãŒã¶ãŒã¯ç¹å®ã®é³å£°ç¹æ§ãæåŸ ãããããããŸããã
- ããã¹ãã®æ£èŠåïŒæ°åãç¥èªãèšå·ã®çºé³æ¹æ³ã¯ç°ãªãå ŽåããããŸããAPIã¯ãããåŠçããããšããŸãããè€éãªã±ãŒã¹ã§ã¯ããã¹ãã®ååŠçãå¿ èŠã«ãªãããšããããŸããäŸãã°ãã2023-10-27ãã®ãããªæ¥ä»ãç°ãªããã±ãŒã«ã§æ£ããèªã¿äžããããããã«ãããªã©ã§ãã
- æåæ°å¶éïŒäžéšã®é³å£°åæãšã³ãžã³ã«ã¯ã1åã®çºè©±ã§åŠçã§ããããã¹ãã®é·ãã«å¶éãããå ŽåããããŸããé·ãããã¹ããå°ããªãã£ã³ã¯ã«åå²ããããšã¯è¯ãç¿æ £ã§ãã
é«åºŠãªãã¯ããã¯ãšãã¹ããã©ã¯ãã£ã¹
æ¬åœã«åªããé³å£°å¯Ÿå¿ãŠã§ãäœéšãåµé ããããã«ããããã®é«åºŠãªãã¯ããã¯ãšãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠãã ããïŒ
èªèãšåæã®çµã¿åãã
Web Speech APIã®çã®åã¯ãé³å£°èªèãšåæãçµã¿åãããŠã察話çã§äŒè©±åã®äœéšãåµé ããèœåã«ãããŸããæ è¡äºçŽãµã€ãã®é³å£°ã¢ã·ã¹ã¿ã³ããæ³åããŠã¿ãŠãã ããïŒ
- ãŠãŒã¶ãŒãå°ããïŒããã³ãã³è¡ãã®ãã©ã€ããäºçŽããŠããïŒé³å£°èªèïŒ
- ã¢ããªã±ãŒã·ã§ã³ããªã¯ãšã¹ããåŠçããå°ããïŒãã©ã®æ¥ä»ã§é£è¡ããŸããïŒãïŒé³å£°åæïŒ
- ãŠãŒã¶ãŒãçããïŒãææ¥ããïŒé³å£°èªèïŒ
- ã¢ããªã±ãŒã·ã§ã³ã確èªããïŒãææ¥ããã³ãã³è¡ãã®ãã©ã€ããäºçŽããŸããããããã§ããïŒãïŒé³å£°åæïŒ
ããã«ããããŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ããé«ããèªç¶ãªäŒè©±ã®æµããçãŸããŸãã
ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãšãšã¯ã¹ããªãšã³ã¹ãã¶ã€ã³
- æç¢ºãªèŠèŠçåå³ïŒãã€ã¯ãã¢ã¯ãã£ããªãšããã·ã¹ãã ãèãåã£ãŠãããšãã話ããŠãããšãã瀺ãããã«ãåžžã«æç¢ºãªèŠèŠçãã£ãŒãããã¯ãæäŸããŠãã ãããã¢ã€ã³ã³ãã¢ãã¡ãŒã·ã§ã³ãããã¹ãã«ããã¹ããŒã¿ã¹æŽæ°ã¯äžå¯æ¬ ã§ãã
- æš©éã®åŠçïŒå¿ èŠãªå Žåã«ã®ã¿ãã€ã¯ãžã®ã¢ã¯ã»ã¹ãèŠæ±ãããªããããå¿ èŠãªã®ãããŠãŒã¶ãŒã«äŒããŠãã ãããæš©éãæåŠãããå Žåã¯ãé©åã«åŠçããŠãã ããã
- ãšã©ãŒåŠçãšãã£ãŒãããã¯ïŒé³å£°èªèãåæã倱æããå Žåãæç¢ºã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªãšã©ãŒã¡ãã»ãŒãžãšã¬ã€ãã³ã¹ãæäŸããŠãã ãããäŸãã°ããçè§£ã§ããŸããã§ãããã¯ã£ãããšè©±ããŠã¿ãŠãã ãããããéžæããé³å£°ã¯å©çšã§ããŸãããããã©ã«ãã®é³å£°ã䜿çšããŸãããªã©ã§ãã
- ã¢ã¯ã»ã·ããªãã£ç¬¬äžïŒã¢ã¯ã»ã·ããªãã£ã念é ã«çœ®ããŠèšèšããŠãã ãããé³å£°æäœã¯é害ãæã€ãŠãŒã¶ãŒã«ãšã£ãŠäž»èŠãªå ¥åæ¹æ³ãšãªãåŸããããå®è£ ãå ç¢ã§ã¢ã¯ã»ã·ããªãã£ã¬ã€ãã©ã€ã³ïŒäŸïŒWCAGïŒã«åŸã£ãŠããããšã確èªããŠãã ããã
- ããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãïŒé³å£°æ©èœã䜿çšã§ããªãããŸãã¯äœ¿çšããªãããšãéžæãããŠãŒã¶ãŒã«å¯ŸããŠãããŠã§ãã¢ããªã±ãŒã·ã§ã³ãæ©èœãç¶ããããã«ããŠãã ããã
ããã©ãŒãã³ã¹ã®æé©å
- `interimResults`ã®ç®¡çïŒäžéçµæã衚瀺ããå ŽåãUIã®æŽæ°ãé å»¶ãåŒãèµ·ãããã«å¹ççã«è¡ãããããã«ããŠãã ãããæŽæ°ããããŠã³ã¹ãŸãã¯ã¹ããããªã³ã°ããããšã圹ç«ã¡ãŸãã
- é³å£°èªã¿èŸŒã¿ã®æé©åïŒå¯èœãªå Žåã¯é³å£°ããŒã¿ãäºåã«ãã§ããããããå°ãªããšã`onvoiceschanged`ã€ãã³ããè¿ éã«åŠçãããé³å£°ãããæ©ãå©çšå¯èœã«ãªãããã«ããŠãã ããã
- ãªãœãŒã¹ç®¡çïŒäžèŠã«ãªã£ãé³å£°èªèãšåæãé©åã«åæ¢ãŸãã¯ãã£ã³ã»ã«ããŠãã·ã¹ãã ãªãœãŒã¹ãè§£æŸããŠãã ããã
ã¯ãã¹ãã©ãããã©ãŒã ãšãã©ãŠã¶ã«é¢ããèæ ®äºé
Web Speech APIã¯ãŠã§ãæšæºã®äžéšã§ãããå®è£ ã®è©³çŽ°ãæ©èœã®å©çšå¯èœæ§ã¯ç°ãªãå ŽåããããŸãïŒ
- ãã©ãŠã¶ãµããŒãïŒé³å£°èªèãšé³å£°åæã®äž¡æ¹ã«ã€ããŠãcaniuse.comãªã©ã®ãªãœãŒã¹ã§åžžã«ææ°ã®ãã©ãŠã¶ãµããŒãæ å ±ã確èªããŠãã ããã
- ã¢ãã€ã«å¯Ÿãã¹ã¯ãããïŒãã€ã¯ãžã®ã¢ã¯ã»ã¹ãããã©ãŒãã³ã¹ã¯ããã¹ã¯ããããšã¢ãã€ã«ãã©ãŠã¶ã§ç°ãªãå ŽåããããŸããã¢ãã€ã«ããã€ã¹ã¯ããã°ãã°ããé«åºŠãªçµã¿èŸŒã¿é³å£°ãšã³ãžã³ãæã£ãŠããŸãã
- ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãžã®äŸåïŒé³å£°ã®çš®é¡ãå質ãé³å£°èªèã®ç²ŸåºŠã¯ãåºç€ãšãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®é³å£°æ©èœã«å€§ãã圱é¿ãããŸãã
- ãã©ã€ãã·ãŒãžã®æžå¿µïŒãŠãŒã¶ãŒã¯ãã©ã€ãã·ãŒã«å¯ŸããæèããŸããŸãé«ããŠããŸããé³å£°ããŒã¿ãã©ã®ããã«æ±ããããã«ã€ããŠéææ§ã確ä¿ããŠãã ãããæ©å¯æ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã»ãã¥ãªãã£ãšå¶åŸ¡ã匷åããããã«ãµãŒããŒãµã€ãåŠçãæ€èšããããšãã§ããŸãããããã¯ããã³ããšã³ãã®Web Speech APIã®çŽæ¥ã®ç¯å²ãè¶ ããŸãã
ã°ããŒãã«ãªãŠãŒã¹ã±ãŒã¹ãšã€ã³ã¹ãã¬ãŒã·ã§ã³
Web Speech APIã¯åãªãæè¡çãªæ©èœã§ã¯ãªããã°ããŒãã«ãªã€ãããŒã·ã§ã³ãå¯èœã«ãããã®ã§ãã以äžã«ããã€ãã®åœéçãªãŠãŒã¹ã±ãŒã¹ãæããŸãïŒ
- å€èšèªå¯Ÿå¿ã®ã«ã¹ã¿ããŒãµããŒããããïŒäŒæ¥ã®ãŠã§ããµã€ãã§ãè€æ°ã®èšèªã«ããé³å£°èµ·ååã®ã«ã¹ã¿ããŒãµããŒããæäŸãããŠãŒã¶ãŒãé¢é£ããFAQãã©ã€ããšãŒãžã§ã³ãã«èªå°ã§ããŸãã
- æ°èåžå Žã«ãããæè²ãã©ãããã©ãŒã ïŒèåçãäœãããŸãã¯ã¿ã€ãã³ã°å¯èœãªããã€ã¹ãžã®ã¢ã¯ã»ã¹ãéãããŠããå°åã§ã¯ãé³å£°ã€ã³ã¿ãŒãã§ãŒã¹ã«ãã£ãŠãªã³ã©ã€ã³åŠç¿ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãå€§å¹ ã«åäžããŸãã
- é³å£°å¶åŸ¡ã®å ¬å ±æ å ±ããªã¹ã¯ïŒäžçäžã®ç©ºæž¯ãé§ ãå ¬å ±åç©é€šãªã©ã§ãé³å£°ã€ã³ã¿ãŒãã§ãŒã¹ã¯ãŠãŒã¶ãŒã®åžæããèšèªã§æ å ±ãæäŸããæ è¡è ã®ã¢ã¯ã»ã·ããªãã£ãåäžãããããšãã§ããŸãã
- 倿§ãªåŠç¿è ã®ããã®ã¢ã¯ã»ã·ããªãã£ããŒã«ïŒå€±èªçããã®ä»ã®åŠç¿é害ãæã€åŠçã¯ãããã¹ããèªã¿äžããŠãããããšã§å€§ããªæ©æµãåããããšãã§ããããŸããŸãªæè²ã·ã¹ãã ã«ããã£ãŠçè§£ãšãšã³ã²ãŒãžã¡ã³ãããµããŒãããŸãã
- ã€ã³ã¿ã©ã¯ãã£ããªã¹ããŒãªãŒããªã³ã°ãšã²ãŒã ïŒäžçäžã®å©çšè ããèªåã®å£°ã䜿ã£ãŠãã£ã©ã¯ã¿ãŒãšå¯Ÿè©±ããã¢ããªã±ãŒã·ã§ã³ããã®ãã£ã©ã¯ã¿ãŒã®èšèªãšã¢ã¯ã»ã³ãã§å¿çããåäŸåãç©èªã¢ããªã±ãŒã·ã§ã³ãæ³åããŠã¿ãŠãã ããã
ãŠã§ãã«ãããé³å£°ã®æªæ¥
Web Speech APIã¯ãããèªç¶ã§çŽæçãªãŠã§ããžã®éèŠãªäžæ©ã§ãããã©ãŠã¶ãã³ããŒãASR/TTSæè¡ãããã€ããŒã鲿©ãç¶ããã«ã€ããŠãããã«é«åºŠãªæ©èœãæåŸ ã§ããŸãïŒ
- 粟床ãšèªç¶ãã®åäžïŒç¶ç¶çã«æ¹åãããASRã¢ãã«ã¯ãããå€ãã®èšèªãšã¢ã¯ã»ã³ãã§ããè¯ã粟床ãããããã§ããããTTSãšã³ãžã³ã¯ããŸããŸã人éãšåºå¥ãã€ããªã声ãçæããããã«ãªããŸãã
- æèçè§£ïŒå°æ¥ã®APIã¯ãããè¯ãæèçè§£ãæäŸãããããã¥ã¢ã³ã¹ã®ããäŒè©±ãç©æ¥µçãªæ¯æŽãå¯èœã«ãããããããŸããã
- ææ ãšããŒã³ã®æ€åº/åæïŒé³å£°ãããŠãŒã¶ãŒã®ææ ãæ€åºããç¹å®ã®ææ çãªããŒã³ã§é³å£°ãåæããèœåã¯ãå šãæ°ããã¬ãã«ã®å ±æçãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãè§£ãæŸã€å¯èœæ§ããããŸãã
- ãªã³ããã€ã¹åŠçïŒASRãšTTSã®ãªã³ããã€ã¹åŠçãžã®æ³šåãé«ãŸãããšã§ããã©ã€ãã·ãŒãåäžããé å»¶ãæžå°ãããªãã©ã€ã³æ©èœã匷åãããŸãã
çµè«
Web Speech APIã¯ãé åçã§ãã¢ã¯ã»ã¹ããããã驿°çãªãŠã§ãäœéšãåµé ããããšãããã¹ãŠã®ããã³ããšã³ãéçºè ã«ãšã£ãŠåŒ·åãªããŒã«ã§ããé³å£°èªèãšåæãçè§£ãã广çã«å®è£ ããããšã§ããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã®æ°ãããã©ãã€ã ãè§£ãæŸã€ããšãã§ããŸãããŠã§ããé³å£°æè¡ãåãå ¥ãç¶ããäžã§ããã®APIãç¿åŸããããšã¯ãã°ããŒãã«ãªå©çšè ã«é¿ããå æ¬çã§æå 端ã®ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«ãŸããŸãéèŠã«ãªãã§ããããã¢ã¯ã»ã·ããªãã£ã®åäžãè€éãªã¿ã¹ã¯ã®ç°¡çŽ åããŸãã¯å šãæ°ãã圢ã®ããžã¿ã«ã€ã³ã¿ã©ã¯ã·ã§ã³ã®åµé ã®ããã§ãããWeb Speech APIã¯ãŠã§ãã®æªæ¥ãã€ãŸãã³ãã¥ãã±ãŒã·ã§ã³ã話ãããšãšåããããèªç¶ã«ãªãæªæ¥ãžã®é åçãªäžç«¯ã瀺ããŠããŸãã