การใช้ Text-to-Speech API กับ Node.js

1. ภาพรวม

Google Cloud Text-to-Speech API ช่วยให้นักพัฒนาแอปสามารถใส่เสียงพูดสังเคราะห์ของมนุษย์ที่ฟังดูเป็นธรรมชาติเป็นเสียงที่เล่นได้ในแอปพลิเคชันของตน Text-to-Speech API จะแปลงข้อความหรืออินพุต Speech Synthesis Markup Language (SSML) เป็นข้อมูลเสียง เช่น MP3 หรือ LINEAR16 (การเข้ารหัสที่ใช้ในไฟล์ WAV)

ใน Codelab นี้ คุณจะมุ่งเน้นการใช้ Text-to-Speech API กับ Node.js คุณจะได้เรียนรู้วิธีแสดงรายการเสียงที่พร้อมใช้งานและสังเคราะห์เสียงจากข้อความ

สิ่งที่คุณจะได้เรียนรู้

  • วิธีใช้ Cloud Shell
  • วิธีเปิดใช้ Text-to-Speech API
  • วิธีตรวจสอบสิทธิ์คำขอ API
  • วิธีติดตั้งไลบรารีของไคลเอ็นต์ Google Cloud สำหรับ Node.js
  • วิธีแสดงรายการเสียงที่มี
  • วิธีสังเคราะห์เสียงจากข้อความ

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud Platform
  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • คุ้นเคยกับการใช้ Node.js

แบบสำรวจ

คุณจะใช้บทแนะนำนี้อย่างไร

อ่านอย่างเดียว อ่านและทำแบบฝึกหัด

คุณจะให้คะแนนประสบการณ์การใช้งาน Node.js เท่าใด

ผู้ฝึกหัด ขั้นกลาง ผู้ชำนาญ

คุณจะให้คะแนนประสบการณ์การใช้บริการ Google Cloud Platform เท่าใด

ผู้ฝึกหัด ขั้นกลาง ผู้ชำนาญ

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ (หากยังไม่มีบัญชี Gmail หรือ G Suite คุณต้องสร้างบัญชี)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีผู้ใช้แล้วและจะใช้ไม่ได้ ขออภัย) ซึ่งจะเรียกว่า PROJECT_ID ในภายหลังใน Codelab นี้

  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud

การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย โปรดทำตามวิธีการในส่วน "การล้างข้อมูล" ซึ่งจะแนะนำวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่มต้น Cloud Shell

แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

เปิดใช้งาน Cloud Shell

  1. จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

หากไม่เคยเริ่มใช้ Cloud Shell มาก่อน คุณจะเห็นหน้าจอระดับกลาง (ด้านล่าง) ที่อธิบายว่า Cloud Shell คืออะไร ในกรณีนี้ ให้คลิกต่อไป (และคุณจะไม่เห็นหน้าจอนี้อีก) หน้าจอแบบครั้งเดียวจะมีลักษณะดังนี้

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

การจัดสรรและเชื่อมต่อกับ Cloud Shell จะใช้เวลาไม่นาน

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานในโค้ดแล็บนี้ได้โดยใช้เพียงเบราว์เซอร์หรือ Chromebook

เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นว่าคุณได้รับการตรวจสอบสิทธิ์แล้วและโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์ของคุณแล้ว

  1. เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list

เอาต์พุตของคำสั่ง

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

เอาต์พุตของคำสั่ง

[core]
project = <PROJECT_ID>

หากไม่ได้ตั้งค่าไว้ คุณตั้งค่าได้ด้วยคำสั่งนี้

gcloud config set project <PROJECT_ID>

เอาต์พุตของคำสั่ง

Updated property [core/project].

3. เปิดใช้ Text-to-Speech API

คุณต้องเปิดใช้ Text-to-Speech API ก่อนจึงจะเริ่มใช้งานได้ คุณเปิดใช้ API ได้โดยใช้คำสั่งต่อไปนี้ใน Cloud Shell

gcloud services enable texttospeech.googleapis.com

4. ตรวจสอบสิทธิ์คำขอ API

หากต้องการส่งคำขอไปยัง Text-to-Speech API คุณต้องใช้บัญชีบริการ บัญชีบริการเป็นของโปรเจ็กต์ของคุณ และไลบรารี Node.js ของไคลเอ็นต์ Google จะใช้บัญชีนี้เพื่อส่งคำขอ Text-to-Speech API บัญชีบริการจะแสดงด้วยอีเมลเช่นเดียวกับบัญชีผู้ใช้อื่นๆ ในส่วนนี้ คุณจะใช้ Cloud SDK เพื่อสร้างบัญชีบริการ จากนั้นสร้างข้อมูลเข้าสู่ระบบที่คุณจะต้องใช้เพื่อตรวจสอบสิทธิ์ในฐานะบัญชีบริการ

ก่อนอื่น ให้ตั้งค่าตัวแปรสภาพแวดล้อมด้วย GOOGLE_CLOUD_PROJECT ซึ่งคุณจะใช้ตลอด Codelab นี้

export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)

จากนั้นสร้างบัญชีบริการใหม่เพื่อเข้าถึง Text-to-Speech API โดยใช้ข้อมูลต่อไปนี้

gcloud iam service-accounts create my-text-to-speech-sa \
  --display-name "my text-to-speech codelab service account"

จากนั้นสร้างข้อมูลเข้าสู่ระบบที่โค้ด Node.js จะใช้เพื่อเข้าสู่ระบบในฐานะบัญชีบริการใหม่ สร้างข้อมูลเข้าสู่ระบบเหล่านี้และบันทึกเป็นไฟล์ JSON "~/key.json" โดยใช้คำสั่งต่อไปนี้

gcloud iam service-accounts keys create ~/key.json \
  --iam-account  my-text-to-speech-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

สุดท้าย ให้ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS ซึ่งใช้โดยไลบรารี Node.js ของ Text-to-Speech API ที่จะกล่าวถึงในขั้นตอนถัดไป เพื่อค้นหาข้อมูลเข้าสู่ระบบ ควรตั้งค่าตัวแปรสภาพแวดล้อมเป็นเส้นทางแบบเต็มของไฟล์ JSON ข้อมูลเข้าสู่ระบบที่คุณสร้างขึ้นโดยใช้คำสั่งต่อไปนี้

export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"

5. ติดตั้งไลบรารีของไคลเอ็นต์ Google Cloud Text-to-Speech API สำหรับ Node.js

ก่อนอื่น ให้สร้างโปรเจ็กต์ที่จะใช้เรียกใช้ห้องทดลอง Text-to-Speech API นี้ จากนั้นเริ่มต้นแพ็กเกจ Node.js ใหม่ในโฟลเดอร์ที่คุณเลือก

npm init

NPM จะถามคำถามหลายข้อเกี่ยวกับการกำหนดค่าโปรเจ็กต์ เช่น ชื่อและเวอร์ชัน สำหรับคำถามแต่ละข้อ ให้กด ENTER เพื่อยอมรับค่าเริ่มต้น จุดแรกเข้าเริ่มต้นคือไฟล์ชื่อ index.js

จากนั้นติดตั้งไลบรารี Google Cloud Speech ในโปรเจ็กต์โดยทำดังนี้

npm install --save @google-cloud/text-to-speech

ดูวิธีการเพิ่มเติมในการตั้งค่าการพัฒนา Node.js สำหรับ Google Cloud ได้ที่คู่มือการตั้งค่า

ตอนนี้คุณพร้อมใช้ Text-to-Speech API แล้ว

6. แสดงรายการเสียงที่พร้อมใช้งาน

ในส่วนนี้ คุณจะแสดงรายการเสียงทั้งหมดที่มีเป็นภาษาอังกฤษสำหรับการสังเคราะห์เสียงก่อน

ไปที่ไฟล์ index.js ภายใน แล้วแทนที่โค้ดด้วยโค้ดต่อไปนี้

'use strict';

/**
 * Lists available voices for the specified language.
 *
 * @param {string} languageCode - The language code.
 */
async function listVoices(languageCode) {
  const textToSpeech = require('@google-cloud/text-to-speech');

  const client = new textToSpeech.TextToSpeechClient();

  const [result] = await client.listVoices({languageCode});
  const voices = result.voices;

  voices.forEach((voice) => {
    console.log(`${voice.name} (${voice.ssmlGender}): ${voice.languageCodes}`);
  });
}

listVoices('en');

ใช้เวลาสักครู่เพื่อศึกษาโค้ด เรียกใช้แอปโดยทำดังนี้

node . 

คุณควรเห็นเอาต์พุตต่อไปนี้

en-US-Standard-A (MALE): en-US
en-US-Standard-B (MALE): en-US
en-US-Standard-C (FEMALE): en-US
en-US-Standard-D (MALE): en-US
en-US-Standard-E (FEMALE): en-US
en-US-Standard-F (FEMALE): en-US
...

7. สังเคราะห์เสียงจากข้อความ

คุณใช้ Text-to-Speech API เพื่อแปลงสตริงเป็นข้อมูลเสียงได้ คุณกำหนดค่าเอาต์พุตของการสังเคราะห์เสียงพูดได้หลายวิธี เช่น เลือกเสียงที่ไม่ซ้ำ หรือปรับเอาต์พุตในระดับเสียงสูงต่ำ ระดับความดังของเสียง อัตราการพูด และอัตราการสุ่มตัวอย่าง

ไปที่ไฟล์ index.js ใน และเพิ่มโค้ดต่อไปนี้

/**
 * Sythesizes sample text into an .mp3 file.
 */
async function synthesize() {
  const textToSpeech = require('@google-cloud/text-to-speech');
  const fs = require('fs');
  const util = require('util');

  const client = new textToSpeech.TextToSpeechClient();

  const text = 'This is a demonstration of the Google Cloud Text-to-Speech API';

  const request = {
    input: {text: text},
    voice: {languageCode: 'en-US', ssmlGender: 'NEUTRAL'},
    audioConfig: {audioEncoding: 'MP3'},
  };

  const [response] = await client.synthesizeSpeech(request);
  // Write the binary audio content to a local file
  const writeFile = util.promisify(fs.writeFile);
  await writeFile('output.mp3', response.audioContent, 'binary');
  console.log('Audio content written to file: output.mp3');
}

synthesize();

ใช้เวลาสักครู่เพื่อศึกษาโค้ดและดูวิธีใช้โค้ดเพื่อสร้างไฟล์เสียงจากข้อความ

node .

คุณควรเห็นเอาต์พุตต่อไปนี้

Audio content written to file "output.mp3"

8. ยินดีด้วย

คุณได้เรียนรู้วิธีใช้ Text-to-Speech API โดยใช้ Node.js เพื่อถอดเสียงประเภทต่างๆ ในไฟล์เสียงแล้ว

ล้างข้อมูล

เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud Platform สำหรับทรัพยากรที่ใช้ในการเริ่มต้นอย่างรวดเร็วนี้ ควรทำดังนี้

  • ไปที่คอนโซล Cloud Platform
  • เลือกโปรเจ็กต์ที่ต้องการปิด แล้วคลิก "ลบ" ที่ด้านบน ซึ่งจะเป็นการกำหนดเวลาให้ลบโปรเจ็กต์

ดูข้อมูลเพิ่มเติม

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป