본문 바로가기
컴퓨터

[Chrome Extensions] Chrome.tts

by Luyin 2013. 9. 27.

chrome.tts

Availability: chrome tts API는 Chrome 14 이후 버전 부터 지원한다.
Permissions: manifest.json의 Permissions 항목에 tts를 추가해준다.
(* Chrome.*API 들을 사용하기 위해서는 Permission 항목에 사용할 API를 구체적으로 명시해 주어야 한다.)
{
  "app": {
    "launch": {
       "local_path": "ttsdemo.html"
    }
  },
  "description": "Demo Chrome's synthesized text-to-speech capabilities.",
  "icons": {
    "16": "16.png",
    "128": "128.png",
    "256": "256.png"
  },
  "minimum_chrome_version": "14",
  "name": "Chrome Smart Reader",
  "permissions": [ "tts" ],
  "version": "2.1",

  "manifest_version": 2
}

TTS option

  • Voice : 음성 종류 (대부분의 OS에는 하나 이상의 Voice가 설치 되어 있다. Plug-In 과 같은 개념이며 사용자가 설치한 음성을 사용할 수 있다.) 음성별로 지원 가능한 언어, 성별이 있다.
  • Pitch : 음의 높이 (수치가 높을 수록 높은 톤의 목소리로 말한다)
  • Rate : 말하는 속도 (기본값 1.0 은 1분당 180에서 220개의 단어들을 말하는 속도이며 2.0은 1.0의 2배 속도이다.)
  • Volume : 음량
  • Gender : 음성의 성별
  • Queuing mode :
    • Interrupt : 현재 말하고 있는 음성 재생이 강제 중단되고 출력하려는 음성이 재생 된다.
    • Enqueue : 출력하려는 음성이 큐에 싸이게 되고 현재 음성 재생이 모두 끝난 후 이어서 재생 된다.


Vocabulary

  • TTS Engine : 텍스트를 일련의 음성으로 바꿔주는 알고리즘을 가진 프로그램

(컴퓨터 프로그래밍에서 엔진이란 다른 프로그램들을 위해 핵심적이고 본질적인 기능을 수행해주는 프로그램을 지칭하는 전문 용어이다. ex) 언리얼 엔진, 검색 엔진)

The component of Speech Engine Services (SES) that processes text input and produces speech output by synthesizing words and phrases. SES is a component of Speech Server.

TTS API 와 TTS Engine 개념이 햇갈리거든 http://luyin.tistory.com/345 링크로 들어가 API와 Engine 설명부분을 읽어보라.

SSML : 

Methods

speak  (음성 출력 함수)

chrome.tts.speak(string utteranceobject optionsfunction callback)

TTS엔진을 사용하여 텍스트를 읽어 준다.

Parameters

utterance ( string )

TTS가 읽을 텍스트이다. Plain Text로 입력하여도 되고 SSML을 이용하여 입력하여도 된다.

단, TTS 엔진이 SSML을 지원하지 않는 경우 <>로 표현된 태그들을 모두 지워버리고 텍스트만 읽어준다. 최대 텍스트의 길이는 32,768 문자이다.

options optional object )
TTS 옵션이다.

enqueue optional boolean )

True 일 경우 Enqueue모드로 동작하고, Flase일 경우 Interrupt 모드로 동작한다.

voiceName optional string )

TTS에 사용할 Voice이름이다. 선택하지 않을 경우 사용가능한 음성을 자동으로 선택한다.

extensionId optional string )

사용할 TTS 엔진의 extension ID??

lang optional string )

TTS에서 사용할 언어를 선택한다. 입력하는 언어는 language Codes 표에 나와있는 방식으로 기술하면 된다.

chrome 지원 language codes : https://developers.google.com/chrome/web-store/docs/i18n

ex) en-us, ko

gender optional enum of "male", or "female" )

TTS에서 사용할 음성의 성별을 선택한다.

rate optional double )

음성 출력의 빠르기를 선택한다. 1.0 이 기본값이며 0.1에서 10사이의 값이 허용된다. 하지만 일반적으로 3배 이상의 속도로 빨라지지는 않는다.

pitch optional double )

음의 높이를 선택하며 0부터 2사이 값을 입력할 수 있다.

volume optional double )

음량을 선택할 수 있으며 0부터 1사이의 값을 입력할 수 있다.

onEvent optional function )

말하는 도중 발생한 이벤트 핸들러를 등록한다. 이벤트에 대한 설명은 아래에 있다.

callback optional function )

말하기 전, 에러 발생시에 호출되는 함수를 등록한다.


stop (음성 출력 정지 함수)

chrome.tts.stop()

현재 출력 중인 음성을 중단하고 queue를 비워준다.


pause (음성 출력 일시 정지 함수)

chrome.tts.pause()

현재 출력 중인 음성을 일시 중지 한다.


resume (음성 출력 이어서 재생 함수)

chrome.tts.resume()

현재 일시 정지된 음성을 이어서 재생 한다.


isSpeaking (현재 음성 출력 사용 여부 확인 함수)

chrome.tts.isSpeaking(function callback)

현재 음성출력을 사용하고 있는지 확인한다. callback 함수를 등록해서 사용한다. True일 경우 사용중이고 False일경우 비사용 중이다.

Parameters

       callback optional function )


getVoices (사용 가능한 음성 확인 함수)

chrome.tts.getVoices(function callback)

Parameters

        callback optional function )
function(array of TtsVoice voices) {...};
voices ( array of TtsVoice )
사용 가능한 음성에 대한 정보가 Array 에 담겨 출력된다.


Sample Codes

1. 사용 가능한 음성 출력 코드

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('  gender: ' + voices[i].gender);
        console.log('  extension id: ' + voices[i].extensionId);
        console.log('  event types: ' + voices[i].eventTypes);
      }
    });


2. 음성 출력 함수 및 이벤트 등록 함수 사용 코드

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

{

'lang': 'en-US', 

'rate': 2.0, 

'enqueue': true

onEvent : function(event) {    //말하는 도중 발생하는 이벤트

console.log('Event '+ event.type ' at position ' + event.charIndex);

if(event.type == 'error') {

console.log('Error: ' + event.errorMessage);

}

}

},

function() {    //말하기 전 TTS 엔진의 에러 작동시 호출된다.

if (chrome.runtime.lastError) {

console.log('Error: ' + chrome.runtime.lastError.message);

}

);


말하는 도중 호출되는 이벤트 종류

  • 'start': TTS엔진이 음성을 말하기 시작할 때 발생하는 이벤트
  • 'word': 단어의 끝에 도달했을 때 발생하는 이벤트 event.charIndex 를 사용하면 현재 말하고 있는 위치를 알 수 있다.
  • 'sentence': 문장의 끝에 도달했을 때 발생하는 이벤트. event.charIndex 를 사용하면 현재 말하고 있는 위치를 알 수 있다.
  • 'end': TTS엔진이 음성말하기를 끝냈을 때 발생하는 이벤트
  • 'interrupted': speak() orstop() 함수를 사용하여 현재 작동 중인 음성이 강제 중지 되었을때 발생하는 이벤트
  • 'cancelled': queue에 음성출력할 텍스트가 싸여있는데 speak() or stop() 함수의 호출로 정지되었을때 발생하는 이벤트
  • 'error':TTS의 엔진 에러로 음성이 출력 되지 않을 때 발생하는 이벤트 event.errorMessage 를 확인하면 에러의 정확한 원인을 알 수 있다.