chrome.tts

คำอธิบาย

ใช้ chrome.tts API เพื่อเล่นการอ่านออกเสียงข้อความ (TTS) แบบสังเคราะห์ โปรดดู ttsEngine API ที่เกี่ยวข้อง ซึ่งช่วยให้ส่วนขยายใช้งานเครื่องมืออ่านออกเสียงได้

Chrome มีความสามารถนี้บน Windows (ที่ใช้ SAPI 5), Mac OS X และ ChromeOS โดยใช้ความสามารถในการสังเคราะห์เสียงพูดที่ระบบปฏิบัติการมีให้ ในทุกแพลตฟอร์ม ผู้ใช้จะติดตั้งส่วนขยายที่บันทึกตัวเองเป็นเครื่องมือช่วยพูดทางเลือกได้

สิทธิ์

tts

แนวคิดและการใช้งาน

สร้างเสียงพูด

โทรไปที่ speak() จากส่วนขยายเพื่อพูด เช่น

chrome.tts.speak('Hello, world.');

หากต้องการหยุดพูดทันที เพียงโทรไปที่ stop():

chrome.tts.stop();

คุณระบุตัวเลือกที่ควบคุมพร็อพเพอร์ตี้ต่างๆ ของเสียงพูดได้ เช่น อัตรา ระดับเสียงสูงต่ำ และอื่นๆ เช่น

chrome.tts.speak('Hello, world.', {'rate': 2.0});

นอกจากนี้ ควรระบุภาษาเพื่อให้โปรแกรมสังเคราะห์ที่รองรับภาษานั้น (และภาษาถิ่นของภูมิภาค หากมี) เป็นความคิดที่ดี

chrome.tts.speak('Hello, world.', {'lang': 'en-US', 'rate': 2.0});

โดยค่าเริ่มต้น การเรียก speak() แต่ละครั้งจะขัดจังหวะการพูดที่กำลังพูดอยู่และพูดทันที หากต้องการตรวจสอบว่าการโทรจะรบกวนสิ่งใดหรือไม่ คุณสามารถโทรหา isSpeaking() นอกจากนี้ คุณยังสามารถใช้ตัวเลือก enqueue เพื่อเพิ่มการเปล่งเสียงนี้ไปยังคิวของคำพูดที่จะพูดเมื่อการเปล่งเสียงปัจจุบันสิ้นสุดลง

chrome.tts.speak('Speak this first.');
chrome.tts.speak(
    'Speak this next, when the first sentence is done.', {'enqueue': true});

ดูคำอธิบายตัวเลือกทั้งหมดโดยละเอียดได้ในส่วน tts.speak() เครื่องมืออ่านออกเสียง บางรุ่นอาจไม่รองรับบางตัวเลือก

เพื่อตรวจหาข้อผิดพลาดและตรวจสอบว่าคุณเรียกใช้ speak() อย่างถูกต้อง ให้ส่งฟังก์ชันเรียกกลับที่ไม่ต้องใช้อาร์กิวเมนต์ ในโค้ดเรียกกลับ ให้ตรวจสอบ runtime.lastError เพื่อดูว่ามีข้อผิดพลาดใดๆ หรือไม่

chrome.tts.speak(
  utterance,
  options,
  function() {
    if (chrome.runtime.lastError) {
      console.log('Error: ' + chrome.runtime.lastError.message);
    }
  }
);

โค้ดเรียกกลับจะกลับมาทันที ก่อนที่เครื่องมือจะเริ่มสร้างเสียงพูด วัตถุประสงค์ของการเรียกกลับคือการแจ้งเตือนคุณเกี่ยวกับข้อผิดพลาดทางไวยากรณ์ในการใช้ TTS API ไม่ใช่เพื่อตรวจจับข้อผิดพลาดที่เป็นไปได้ทั้งหมดที่อาจเกิดขึ้นในกระบวนการสังเคราะห์และเอาต์พุตเสียงพูด คุณต้องใช้ Listener เหตุการณ์ซึ่งอธิบายในส่วนถัดไปเพื่อให้ตรวจจับข้อผิดพลาดเหล่านี้ได้เช่นกัน

ฟังเหตุการณ์

หากต้องการข้อมูลสถานะของเสียงสังเคราะห์แบบเรียลไทม์เพิ่มเติม ให้ส่ง Listener เหตุการณ์ในตัวเลือกไปยัง speak() ดังนี้

chrome.tts.speak(
  utterance,
  {
    onEvent: function(event) {
      console.log('Event ' + event.type + ' at position ' + event.charIndex);
      if (event.type == 'error') {
        console.log('Error: ' + event.errorMessage);
      }
    }
  },
  callback
);

แต่ละเหตุการณ์จะมีประเภทเหตุการณ์ ดัชนีอักขระของคำพูดปัจจุบันที่สัมพันธ์กับเสียงพูด และสำหรับเหตุการณ์ข้อผิดพลาด จะมีข้อความแสดงข้อผิดพลาดที่ไม่บังคับสำหรับเหตุการณ์ข้อผิดพลาด ประเภทเหตุการณ์มีดังนี้

  • 'start': เครื่องมือเริ่มพูดเสียงพูด
  • 'word': ถึงขอบเขตของคำแล้ว ใช้ event.charIndex เพื่อกำหนดตำแหน่งเสียงพูดปัจจุบัน
  • 'sentence': ถึงขอบเขตประโยคแล้ว ใช้ event.charIndex เพื่อระบุตำแหน่ง ของเสียงพูดปัจจุบัน
  • 'marker': ถึงเครื่องหมาย SSML แล้ว ใช้ event.charIndex เพื่อกำหนดตำแหน่งเสียงพูดปัจจุบัน
  • 'end': เครื่องยนต์พูดเสียงพูดจบแล้ว
  • 'interrupted': คำพูดนี้ถูกขัดจังหวะโดยการเรียก speak() หรือ stop() อีกสายหนึ่ง จึงดำเนินการไม่เสร็จ
  • 'cancelled': คำพูดนี้ได้รับการจัดคิวอยู่ในคิว แต่หลังจากนั้นมีสายที่โทรหา speak() หรือ stop() อีกครั้งและไม่เคยเริ่มพูดเลย
  • 'error': เกิดข้อผิดพลาดเฉพาะเครื่องมือ และไม่สามารถพูดข้อความนี้ได้ ดูรายละเอียดได้ที่ event.errorMessage

กิจกรรม 4 ประเภท ได้แก่ 'end', 'interrupted', 'cancelled' และ 'error' จัดเป็นแบบสุดท้าย หลังจากได้รับหนึ่งในเหตุการณ์เหล่านั้นแล้ว คำพูดนี้จะไม่พูดอีกและจะไม่ได้รับเหตุการณ์ใหม่จากข้อความนี้อีก

เสียงบางเสียงอาจไม่รองรับเหตุการณ์บางประเภท และบางเสียงอาจไม่ส่งเหตุการณ์ใดๆ เลย หากคุณไม่ต้องการใช้เสียง นอกจากเสียงจะส่งเหตุการณ์บางอย่าง ให้ส่งเหตุการณ์ที่ต้องการในสมาชิก requiredEventTypes ของออบเจ็กต์ตัวเลือก หรือใช้ getVoices() เพื่อเลือกเสียงที่ตรงกับข้อกำหนดของคุณ โดยทั้ง 2 อย่างจะมีคำอธิบายดังต่อไปนี้

มาร์กอัป SSML

เสียงพูดที่ใช้ใน API นี้อาจรวมถึงมาร์กอัปที่ใช้ Speech Synthesis Markup Language (SSML) หากคุณใช้ SSML อาร์กิวเมนต์แรกไปยัง speak() ควรเป็นเอกสาร SSML ที่สมบูรณ์ที่มีส่วนหัว XML และแท็ก <speak> ระดับบนสุด ไม่ใช่ส่วนย่อยเอกสาร

เช่น

chrome.tts.speak(
  '<?xml version="1.0"?>' +
  '<speak>' +
  '  The <emphasis>second</emphasis> ' +
  '  word of this sentence was emphasized.' +
  '</speak>'
);

เครื่องมืออ่านออกเสียงบางรายการอาจไม่รองรับแท็ก SSML บางรายการและบางรายการอาจไม่รองรับ SSML เลย แต่เครื่องมือค้นหาทั้งหมดจำเป็นต้องละเว้น SSML ใดๆ ที่ไม่รองรับและยังคงพูดข้อความที่สำคัญอยู่

เลือกเสียง

โดยค่าเริ่มต้น Chrome จะเลือกเสียงที่เหมาะสมที่สุดสำหรับคำพูดแต่ละคำที่คุณต้องการพูด โดยอิงตามภาษา ในระบบ Windows, Mac OS X และ ChromeOS ส่วนใหญ่ การสังเคราะห์เสียงที่มาจากระบบปฏิบัติการควรพูดข้อความใดก็ได้ในอย่างน้อย 1 ภาษา ผู้ใช้บางคนอาจมีเสียงที่หลากหลาย จากระบบปฏิบัติการและจากเครื่องมืออ่านออกเสียง ที่ส่วนขยายอื่นๆ ของ Chrome ใช้ ในกรณีเหล่านั้น คุณสามารถใช้โค้ดที่กำหนดเองเพื่อเลือกเสียงที่เหมาะสม หรือเพื่อนำเสนอรายการตัวเลือกแก่ผู้ใช้

หากต้องการดูรายการเสียงทั้งหมด ให้เรียก getVoices() แล้วส่งผ่านฟังก์ชันที่รับอาร์เรย์ของ TtsVoice ออบเจ็กต์เป็นอาร์กิวเมนต์ ดังนี้

chrome.tts.getVoices(
  function(voices) {
    for (var i = 0; i < voices.length; i++) {
      console.log('Voice ' + i + ':');
      console.log('  name: ' + voices[i].voiceName);
      console.log('  lang: ' + voices[i].lang);
      console.log('  extension id: ' + voices[i].extensionId);
      console.log('  event types: ' + voices[i].eventTypes);
    }
  }
);

ประเภท

EventType

Chrome 54 ขึ้นไป

ค่าแจกแจง

TtsEvent

เหตุการณ์จากเครื่องมือ TTS เพื่อแจ้งสถานะของคำพูด

พร็อพเพอร์ตี้

  • charIndex

    ตัวเลข ไม่บังคับ

    ดัชนีของอักขระปัจจุบันในการพูด สำหรับเหตุการณ์เกี่ยวกับคำ เหตุการณ์จะเริ่มทำงานเมื่อสิ้นสุดคำหนึ่งคำ และก่อนเริ่มของคำถัดไป charIndex แสดงจุดในข้อความที่ส่วนต้นของคำถัดไปที่จะพูด

  • errorMessage

    string ไม่บังคับ

    คำอธิบายข้อผิดพลาด หากประเภทเหตุการณ์คือ error

  • length

    ตัวเลข ไม่บังคับ

    Chrome เวอร์ชัน 74 ขึ้นไป

    ความยาวของส่วนถัดไปของคำพูด เช่น ในเหตุการณ์ word นี่คือความยาวของคําที่จะพูดถัดไป ซึ่งจะตั้งค่าเป็น -1 หากไม่ได้ตั้งค่าไว้โดยเครื่องมืออ่านออกเสียง

  • ประเภท

    ประเภทเป็นได้ start ทันทีที่เริ่มต้น, word เมื่อถึงขอบเขตของคำ, sentence เมื่อถึงขอบเขตของประโยค, marker เมื่อถึงองค์ประกอบเครื่องหมาย SSML, end เมื่อถึงจุดสิ้นสุดของเสียงพูด, interrupted เมื่อคำพูดหยุดลงหรือถูกขัดจังหวะก่อนที่จะถึงจุดสิ้นสุด, cancelled เมื่อนำออกจากคิวก่อนที่จะสังเคราะห์ หรือ error เมื่อเกิดข้อผิดพลาดอื่นๆ เมื่อหยุดพูด เหตุการณ์ pause จะเริ่มทำงานหากมีการหยุดเสียงพูดใดคำหนึ่งไว้ชั่วคราวในระหว่างกลาง และ resume หากเสียงพูดกลับมาทำงานอีกครั้ง โปรดทราบว่าเหตุการณ์หยุดชั่วคราวและทำงานต่ออาจไม่เริ่มทำงานหากมีการหยุดพูดชั่วคราวระหว่างเสียงพูด

TtsOptions

Chrome เวอร์ชัน 77 ขึ้นไป

ตัวเลือกเสียงพูดสำหรับเครื่องมือ TTS

พร็อพเพอร์ตี้

  • desiredEventTypes

    string[] ไม่บังคับ

    ประเภทเหตุการณ์ TTS ที่คุณสนใจฟัง หากไม่มี ระบบอาจส่งประเภทเหตุการณ์ทั้งหมด

  • ลำดับคิว

    บูลีน ไม่บังคับ

    หากเป็น "จริง" ให้จัดคิวคำพูดนี้หาก TTS อยู่ระหว่างดำเนินการแล้ว หากเป็น "เท็จ" (ค่าเริ่มต้น) จะขัดจังหวะเสียงพูดปัจจุบันและล้างคิวเสียงพูดก่อนพูดคำพูดใหม่นี้

  • extensionId

    string ไม่บังคับ

    รหัสส่วนขยายของเครื่องมือเสียงพูดที่จะใช้ หากทราบ

  • gender

    VoiceGender ไม่บังคับ

    เลิกใช้งานตั้งแต่ Chrome 77

    เพศเลิกใช้งานแล้วและจะไม่มีผล

    เพศของเสียงสำหรับเสียงสังเคราะห์

  • lang

    string ไม่บังคับ

    ภาษาที่จะใช้ในการสังเคราะห์ในรูปแบบ language-region เช่น "en", "en-US", "en-GB", "zh-CN"

  • พิช

    ตัวเลข ไม่บังคับ

    ระดับเสียงสูงอยู่ระหว่าง 0 ถึง 2 โดย 0 คือต่ำสุดและ 2 หมายถึงสูงสุด 1.0 สอดคล้องกับระดับเสียงเริ่มต้นของเสียง

  • อัตรา

    ตัวเลข ไม่บังคับ

    อัตราการพูดเมื่อเทียบกับอัตราเริ่มต้นของเสียงนี้ 1.0 คืออัตราเริ่มต้น โดยปกติจะอยู่ที่ประมาณ 180-220 คำต่อนาที ซึ่ง 2.0 เร็วกว่า 0.5 และเร็วกว่า 0.5 เป็นครึ่งหนึ่ง เราไม่อนุญาตให้ใช้ค่าที่ต่ำกว่า 0.1 หรือสูงกว่า 10.0 โดยเด็ดขาด แต่เสียงจำนวนมากจะบังคับอัตราต่ำสุดและสูงสุดให้ต่ำลง เช่น บางเสียงอาจไม่ได้พูดเร็วกว่าปกติ 3 เท่า แม้ว่าคุณจะระบุค่าที่สูงกว่า 3.0 ก็ตาม

  • requiredEventTypes

    string[] ไม่บังคับ

    เหตุการณ์ TTS ประเภทที่เสียงต้องรองรับ

  • voiceName

    string ไม่บังคับ

    ชื่อเสียงที่จะใช้ในการสังเคราะห์ หากเว้นว่างไว้ ให้ใช้เสียงใดก็ได้ที่มี

  • ระดับเสียง

    ตัวเลข ไม่บังคับ

    แสดงระดับเสียงตั้งแต่ 0 ถึง 1 โดย 0 หมายถึงต่ำสุด และ 1 คือสูงสุด และมีค่าเริ่มต้นเป็น 1.0

  • onEvent

    เป็นโมฆะ ไม่บังคับ

    ฟังก์ชันนี้จะถูกเรียกพร้อมกับเหตุการณ์ที่เกิดขึ้นในกระบวนการพูด

    ฟังก์ชัน onEvent มีลักษณะดังนี้

    (event: TtsEvent)=> {...}

    • เหตุการณ์

      กิจกรรมการอัปเดตจากเครื่องมืออ่านออกเสียงข้อความที่ระบุสถานะของคำพูดนี้

TtsVoice

คำอธิบายเสียงที่ใช้สำหรับการสังเคราะห์เสียงได้

พร็อพเพอร์ตี้

  • eventTypes

    EventType[] ไม่บังคับ

    เหตุการณ์การติดต่อกลับทั้งหมดที่เสียงนี้ส่งได้

  • extensionId

    string ไม่บังคับ

    รหัสของส่วนขยายที่ให้เสียงนี้

  • gender

    VoiceGender ไม่บังคับ

    เลิกใช้งานตั้งแต่ Chrome 70 เป็นต้นไป

    เพศเลิกใช้งานแล้วและจะไม่มีผล

    เพศของเสียงนี้

  • lang

    string ไม่บังคับ

    ภาษาที่เสียงนี้รองรับในรูปแบบ language-region เช่น "en", "en-US", "en-GB", "zh-CN"

  • รีโมต

    บูลีน ไม่บังคับ

    หากเป็นจริง เครื่องมือสังเคราะห์เป็นทรัพยากรเครือข่ายระยะไกล ซึ่งอาจต้องใช้เวลาในการตอบสนองสูงขึ้นและมีค่าบริการแบนด์วิดท์

  • voiceName

    string ไม่บังคับ

    ชื่อของเสียง

VoiceGender

Chrome 54+ เลิกใช้งานตั้งแต่ Chrome 70

เพศเลิกใช้งานแล้วและจะไม่มีผล

ค่าแจกแจง

วิธีการ

getVoices()

สัญญา
chrome.tts.getVoices(
  callback?: function,
)

รับอาร์เรย์ของเสียงทั้งหมดที่มีอยู่

พารามิเตอร์

  • Callback

    ฟังก์ชัน ไม่บังคับ

    พารามิเตอร์ callback มีลักษณะดังนี้

    (voices: TtsVoice[])=>void

    • เสียง

      อาร์เรย์ของวัตถุ tts.TtsVoice ที่แสดงถึงเสียงที่ใช้สังเคราะห์เสียงได้

การคืนสินค้า

  • Promise<TtsVoice[]>

    Chrome 101 ขึ้นไป

    Manifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ

isSpeaking()

สัญญา
chrome.tts.isSpeaking(
  callback?: function,
)

ตรวจสอบว่าเครื่องมือกำลังพูดอยู่หรือไม่ ใน Mac OS X ผลลัพธ์จะเป็นจริงทุกครั้งที่ระบบอ่านออกเสียงของระบบพูด แม้ว่า Chrome จะไม่ได้เป็นผู้เริ่มเสียงพูดก็ตาม

พารามิเตอร์

  • Callback

    ฟังก์ชัน ไม่บังคับ

    พารามิเตอร์ callback มีลักษณะดังนี้

    (speaking: boolean)=>void

    • การพูด

      boolean

      "จริง" หากพูด แต่หากไม่พูดจะเป็นเท็จ

การคืนสินค้า

  • Promise<boolean>

    Chrome 101 ขึ้นไป

    Manifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ

pause()

chrome.tts.pause()

หยุดการสังเคราะห์เสียงชั่วคราว ซึ่งอาจอยู่ระหว่างเสียงพูด การโทรให้กลับมาทำงานอีกครั้งหรือหยุดจะเลิกหยุดเสียงพูดชั่วคราว

resume()

chrome.tts.resume()

หากเสียงพูดหยุดชั่วคราว ให้พูดต่อจากที่ค้างไว้

speak()

สัญญา
chrome.tts.speak(
  utterance: string,
  options?: TtsOptions,
  callback?: function,
)

พูดข้อความโดยใช้เครื่องมืออ่านออกเสียงข้อความ

พารามิเตอร์

  • คำพูด

    string

    ข้อความที่จะพูด ไม่ว่าจะเป็นข้อความธรรมดาหรือเอกสาร SSML ที่สมบูรณ์และสมบูรณ์ เครื่องมืออ่านออกเสียงที่ไม่รองรับ SSML จะตัดแท็กออกและพูดข้อความ ความยาวสูงสุดของข้อความคือ 32,768 อักขระ

  • ตัวเลือก

    TtsOptions ไม่บังคับ

    ตัวเลือกเสียงพูด

  • Callback

    ฟังก์ชัน ไม่บังคับ

    พารามิเตอร์ callback มีลักษณะดังนี้

    ()=>void

การคืนสินค้า

  • Promise<void>

    Chrome 101 ขึ้นไป

    Manifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ

stop()

chrome.tts.stop()

หยุดเสียงพูดปัจจุบันและล้างคิวของเสียงพูดที่รอดำเนินการ นอกจากนี้ หากหยุดการพูดไว้ชั่วคราว ระบบจะเลิกหยุดชั่วคราวสำหรับการโทรครั้งถัดไป

กิจกรรม

onVoicesChanged

Chrome 124 ขึ้นไป
chrome.tts.onVoicesChanged.addListener(
  callback: function,
)

เรียกใช้เมื่อรายการ tts.TtsVoice ที่ getVoices จะแสดงมีการเปลี่ยนแปลง

พารามิเตอร์

  • Callback

    ฟังก์ชัน

    พารามิเตอร์ callback มีลักษณะดังนี้

    ()=>void