hyoromoのブログ

iOS/AndroidもしくはCocos2dxネタを書いています

アプリ上でText to Speech(TTS)を行う


Windows Phone 8から音声読み上げが可能になりました。音声検索などで読み上げが行われます。
この機能はシステム上だけではなく、アプリ上からも利用可能です。今回はアプリ上からテキスト読み上げを行う方法を書きます。

利用APIについて

利用するAPIのはSpeechSynthesizerになります。そのまま利用すると「設定 > 音声 > 音声認識の言語」項目で設定されている言語で読み上げが行われます。SpeechSynthesizer.SetVoiceで音声認識の言語を変更する事も可能ですが、端末で対象音声がDLされていなければ利用出来ません。

このAPIを利用する上で、事前に以下の1つの機能を利用する宣言を行う必要があります。宣言箇所は「Properties/WMAppManifest.xml」の機能タブです。

  • ID_CAP_SPEECH_RECOGNITION

コード

public partial class MainPage : PhoneApplicationPage {
    SpeechSynthesizer synthesizer;

    public MainPage() {
        InitializeComponent();

        synthesizer = new SpeechSynthesizer();
    }

    // トリガーとしてのボタンが押下された時の処理
    private async void btnSpeak_Click(object sender, RoutedEventArgs e) {
        await synthesizer.SpeakTextAsync(txtSpeak.Text);
    }
}

SpeechSynthesizer.SpeakTextAsyncの引数に読み上げさせたいテキストを設定するだけで、端末に設定されている言語で読み上げが行われます。
読み上げとして渡せる形式は、Text(テキスト)Ssml/Uri(XML)の2種類から選べます。

非同期で行う事に注意

前回も書きましたが、読み上げを行うメソッドは非同期で行われる為 async/await を使うことに注意してください。