เท่าที่ลองใช้ น่าจะ support บางบราวเซอร์ ในที่นี้ทดสอบกับ chrome
ก่อนอื่นเมื่อมีการเรียกใช้งาน จะมีการขอนุญาตการใช้งาน microphone
ให้ allow หรือ กดตกลง ไม่เช่นนั้น การทดสอบก็จะไม่เห็นผล
ดูคู่มือการกำหนดค่าต่างๆ ใน web speech api ด้วยต้นเอง ได้ที่
หน้าตัวอย่างที่เอามาอ้างอิงดัดแปลง และอธิบาย
ภาษาที่รองรับ วิธีใช้ ให้ใช้ค่าในวงเว็ลปีกกาสี่เหลี่ยมแรก ในรูปแบบ xx-xx
เลือกตามใจชอบ
จะลองภาษาจีน ก็ใช้ cmn-Hans-CN
จะลองภาษาเกาหลี ก็ใช้ ko-KR
จะลองภาษาญี่ปุ่น ก็ใช้ ja-JP
แต่ในตัวอย่างจะใช้ภาษาไทย ใช้ th-TH
หรืออื่นๆ
ไฟล์ script.js แยกมาต่างหาก จะได้ดูโค้ดง่ายขึ้น
['Afrikaans', ['af-ZA']], ['Bahasa Indonesia',['id-ID']], ['Bahasa Melayu', ['ms-MY']], ['Català', ['ca-ES']], ['Čeština', ['cs-CZ']], ['Deutsch', ['de-DE']], ['English', ['en-AU', 'Australia'], ['en-CA', 'Canada'], ['en-IN', 'India'], ['en-NZ', 'New Zealand'], ['en-ZA', 'South Africa'], ['en-GB', 'United Kingdom'], ['en-US', 'United States']], ['Español', ['es-AR', 'Argentina'], ['es-BO', 'Bolivia'], ['es-CL', 'Chile'], ['es-CO', 'Colombia'], ['es-CR', 'Costa Rica'], ['es-EC', 'Ecuador'], ['es-SV', 'El Salvador'], ['es-ES', 'España'], ['es-US', 'Estados Unidos'], ['es-GT', 'Guatemala'], ['es-HN', 'Honduras'], ['es-MX', 'México'], ['es-NI', 'Nicaragua'], ['es-PA', 'Panamá'], ['es-PY', 'Paraguay'], ['es-PE', 'Perú'], ['es-PR', 'Puerto Rico'], ['es-DO', 'República Dominicana'], ['es-UY', 'Uruguay'], ['es-VE', 'Venezuela']], ['Euskara', ['eu-ES']], ['Français', ['fr-FR']], ['Galego', ['gl-ES']], ['Hrvatski', ['hr_HR']], ['IsiZulu', ['zu-ZA']], ['Íslenska', ['is-IS']], ['Italiano', ['it-IT', 'Italia'], ['it-CH', 'Svizzera']], ['Magyar', ['hu-HU']], ['Nederlands', ['nl-NL']], ['Norsk bokmål', ['nb-NO']], ['Polski', ['pl-PL']], ['Português', ['pt-BR', 'Brasil'], ['pt-PT', 'Portugal']], ['Română', ['ro-RO']], ['Slovenčina', ['sk-SK']], ['Suomi', ['fi-FI']], ['Svenska', ['sv-SE']], ['Türkçe', ['tr-TR']], ['български', ['bg-BG']], ['Pусский', ['ru-RU']], ['Српски', ['sr-RS']], ['เกาหลี', ['ko-KR']], ['จีน', ['cmn-Hans-CN', 'จีนกลาง (จีนแผ่นดินใหญ่)'], ['cmn-Hans-HK', 'จีนกลาง (ฮ่องกง)'], ['cmn-Hant-TW', 'จีน (ไต้หวัน)'], ['yue-Hant-HK', 'กวางตุ้ง (ฮ่องกง)']], ['ญี่ปุ่น', ['ja-JP']], ['Lingua latīna', ['la']], ['ภาษาไทย', ['th-TH']]];
ตัวอย่าง ทดสอบโดยกดที่ปุ่ม แล้ว allow การใช้งาน microphone
แล้วพูด ภาษาไทย อะไรก็ได้ ลองดู
โค้ดทั้งหมดสำหรับทดสอบ speech.html คำอธิบายแสดงในโค้ด
<!doctype html> <html lang=''> <head> <meta charset='utf-8'> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>HTML</title> </head> <body> <div style="margin:auto;width:80%;"> <br> <!-- textarea สำหรับใช้แสดง ข้อความที่แปลงจากเสียงพูด--> <textarea id="transcript" name="transcript" cols="50" rows="3"></textarea> <br><br> <!--div นี้ เราจะใช้แสดง คำแนะนำ การใช้งาน หรือสถานะ--> <div id="instructions"></div> <br> <!-- ปุ่มนี้ เราใช้สำหรับควบคุมการทำงาน การจดจำเสียงพูดและแปลงเป็นข้อความ--> <button id="start_button">Click to Start</button> </div> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script type="text/javascript" src="script.js"></script> </body> </html>
var final_transcript = ''; // ตัวแปร สำหรับเก็บข้อความที่แปลงจากเสียง var recognizing = false; // กำหนดค่าเริ่มต้นการจดจำเสียง เริ่มต้น ให้เป็น false ไม่ทำงาน var language = 'th-TH'; // กำหนดภาษา th-TH, $(function(){ // ตรวจสอบ browser ว่าสนับสนุนการใช้งาน Speech API หรือไม่ if (!('webkitSpeechRecognition' in window)) { alert("Your Browser does not support the Speech API"); }else{ // สร้าง recognition object และกำหนด event handlers // (onstart , onerror, onend, onresult) var recognition = new webkitSpeechRecognition(); // สร้าง recognition object recognition.continuous = true; // กำหนด true ให้รับค่า จากเสียงไปเรื่อยๆ จนกว่าจะกดปุ่มหยุด recognition.interimResults = true; // แสดงข้อความช่วงจังหวะหรือไม่ กรณีพูดยาวๆ recognition.lang = language; // กำหนดภาษา จากตัวแปรด้านบน recognition.onstart = function() { // เมื่อเกิดการเริ่มทำงานของการจดจำเสียง มาจากคำสั่ง recognition.start(); recognizing = true; // เปลี่ยนค่าให้เริ่มทำการจดสับเสียงเป็น true เริ่มทำงาน $('#instructions').html('Speak slowly and clearly'); // แสดงคำแนะนำ $('#start_button').html('Click to Stop'); // เมื่อกดแล้วเปลี่ยนข้อความปุ่มเป็น คลิกอีกทีเพื่อหยุด หรือ Stop }; recognition.onerror = function(event) { // ถ้าเกิดข้อผิดพลาด ทำงานส่วนนี้ $('#instructions').html("There was a recognition error..."); // แจ้งสถานะถ้าเกิดข้อผิดพลาด }; recognition.onend = function() { // ถ้าจบการทำงาน เช่นหยุดด้วยคำสั่ง recognition.stop(); // หรือไม่ได้พูดเพื่อใช้งาน การจดจำเสียงนาน ก็จะหยุดการทำงานเอง recognizing = false; // กำหนดให้การจดจำเสียงอยูในสถานะหยุดการทำงาน $('#instructions').html('Done'); // แสดงสถานะว่าเสร็จสิ้นแล้ว Done $('#start_button').html('Click to Start'); // เปลี่ยนข้อความปุ่มกดให้เป็นค่าเริ่มต้น }; recognition.onresult = function(event) { // เมื่อแปลงเสียงเป็นข้อความสำเร็จ ส่งผลลัธ์กลับมา // ตัวแปรไว้เก็บข้อความในช่วงจังหวะหนึ่งจังหวะใดบางช่วง กรณีพูดยาวๆ var interim_transcript = ''; // ปกติค่านี้ไม่ค่อยได้ใช้ จะใช้ค่า final มากกว่า // ถอดจากข้อความจาก array ผลลัพธ์ for (var i = event.resultIndex; i < event.results.length; ++i) { // ถ้าเป็นค่าสุดท้ายแล้ว หยุดพูด หรือไม่ได้พูดต่อ if (event.results[i].isFinal) { // เอาข้อความผลัพธ์ที่ได้ มาต่อๆ กันและกับในตัวแปร final_transcript final_transcript += event.results[i][0].transcript+' '; } else { // ถ้าเป็นค่าข้อความระหว่างช่วงเวลา ในกรณีพูดยาวๆ เก็บในตัวแปร // เก็บในตัวแปร interim_transcript interim_transcript += event.results[i][0].transcript+' '; } } // บรรทัดที่ เอาไว้ทดสอบดูค่า ใน console ไม่ได้ใช้ปิดไป // console.log("interim: " + interim_transcript); // console.log("final: " + final_transcript); if(final_transcript.length > 0) { // นับความยาวข้อความ ถ้ามากกว่า 0 แสดงว่ามีค่า // ตัวแปร final_transcript คือค่าข้อความที่ได้ เอาไปใช้งานต่อได้ $('#transcript').val(final_transcript); // แสดงค่าใน textarea } }; // ภ้ากดปุ่ม id start_button $("#start_button").click(function(e) { e.preventDefault(); // การจดจำเสียงกำลังทำงานอยู่หรือไม่ กดครั้งแรก จะยังไม่ทำงาน if (recognizing) { // ภ้าทำงานอยู่ เมื่อกดก็จะเป็นหยุด recognition.stop(); // ให้หยุดการจัดจำเสียง $('#start_button').html('Click to Start Again'); // เปลี่ยนข้อความปุ่ม แนะนำกดใหม่ ถ้าต้องการจดจำเสียงอีกครั้ง recognizing = false; // เปลี่ยนสถานะว่าหยุดทำงาน } else { // ถ้ากดแล้วสถานะการจดจำเสียงหยุดอยู่ ให้ทำงาน final_transcript = ''; // กำหนดตัวแปรเก็บข้อความเป็นค่าว่างก่อน // ขออนุญาตใช้งานการจดจำเสียงและเริ่มใช้งาน recognition.start(); // แจ้งคำแนะนำว่าให้ กด allow หรือตกลง เพื่ออนุญาตให้ใช้งาน Microphone $('#instructions').html('Allow the browser to use your Microphone'); $('#start_button').html('waiting'); // เปลี่ยนข้อความปุ่ม ว่ารอ waiting $('#transcript').val(''); // แสดงข้อความเป็นค่าว่าง } }); } });
เราสามารถนำไปประยุกต์ใช้งาน เช่นการรับคำสั่งด้วยเสียง ได้
หรืออื่นๆ แล้วแต่ใครจะคิดออก