chrome.tts

คำอธิบาย

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

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);
    }
  }
);

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

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

หากต้องการดูข้อมูลแบบเรียลไทม์เพิ่มเติมเกี่ยวกับสถานะของคำพูดที่สังเคราะห์ ให้ส่ง 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 ขึ้นไป

ค่าแจกแจง

"start"

"end"

"word"

"sentence"

"marker"

"interrupted"

"ยกเลิกแล้ว"

"ข้อผิดพลาด"

"pause"

"เล่นต่อ"

TtsEvent

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

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

  • charIndex

    หมายเลข ไม่บังคับ

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

  • errorMessage

    สตริง ไม่บังคับ

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

  • ความยาว

    หมายเลข ไม่บังคับ

    Chrome 74 ขึ้นไป

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

  • ประเภท

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

TtsOptions

Chrome 77 ขึ้นไป

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

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

  • desiredEventTypes

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

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

  • เพิ่มลงในคิว

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

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

  • extensionId

    สตริง ไม่บังคับ

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

  • gender

    VoiceGender ไม่บังคับ

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

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

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

  • lang

    สตริง ไม่บังคับ

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

  • พิช

    หมายเลข ไม่บังคับ

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

  • อัตรา

    หมายเลข ไม่บังคับ

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

  • requiredEventTypes

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

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

  • voiceName

    สตริง ไม่บังคับ

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

  • ระดับเสียง

    หมายเลข ไม่บังคับ

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

  • onEvent

    void optional

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

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

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

    • เหตุการณ์

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

TtsVoice

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

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

  • eventTypes

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

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

  • extensionId

    สตริง ไม่บังคับ

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

  • gender

    VoiceGender ไม่บังคับ

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

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

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

  • lang

    สตริง ไม่บังคับ

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

  • รีโมต

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

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

  • voiceName

    สตริง ไม่บังคับ

    ชื่อเสียง

VoiceGender

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

เลิกใช้งานเพศแล้วและระบบจะไม่สนใจ

ค่าแจกแจง

"ชาย"

"female"

เมธอด

getVoices()

chrome.tts.getVoices(): Promise<TtsVoice[]>

รับอาร์เรย์ของเสียงทั้งหมดที่พร้อมใช้งาน

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

  • Promise<TtsVoice[]>

    Chrome 101 ขึ้นไป

isSpeaking()

chrome.tts.isSpeaking(): Promise<boolean>

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

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

  • Promise<boolean>

    Chrome 101 ขึ้นไป

pause()

chrome.tts.pause(): void

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

resume()

chrome.tts.resume(): void

หากหยุดพูดชั่วคราว ฟีเจอร์นี้จะกลับมาพูดต่อจากจุดที่หยุดไว้

speak()

chrome.tts.speak(
  utterance: string,
  options?: TtsOptions,
)
: Promise<void>

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

พารามิเตอร์

  • คำพูด

    สตริง

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

  • ตัวเลือก

    TtsOptions ไม่บังคับ

    ตัวเลือกการพูด

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

  • Promise<void>

    Chrome 101 ขึ้นไป

stop()

chrome.tts.stop(): void

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

กิจกรรม

onVoicesChanged

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

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

พารามิเตอร์

  • callback

    ฟังก์ชัน

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

    () => void