AppleScriptのビルトインコマンド「say」が日本語環境で一部のTTSボイスを正しく指定できなくなっている今日このごろ。
macOSのTTS環境がアップデートされ続けている中で、これに「say」コマンドが追いつけるのかどうか、非常に怪しい雰囲気になってきました。
そこで、AVSpeechSynthesizerを呼び出してsayコマンドを使わずにテキスト音声読み上げする方法を調べてみました。そんなに難しくはありません。
注意点は、TTS Voiceキャラクタのうち、com.apple.voiceのMac OS X系TSSキャラクタは使える。com.apple.speechのClassic MacOS系のTTSキャラクタも使える。com.apple.eloquenceのEloquence系TTSキャラクタも使える。Siri系のTTSのみ使えないということです。
これで、読み上げ内容のファイルへの保存さえできれば、sayコマンドはAppleScript自体でコマンドをのっとって、sayコマンド側ではなくAppleScript側で処理を肩代わりすることが可能になるでしょう。
AppleScript名:AVSpeechSynthesizerで読み上げテスト(言語とテキストを指定).scptd |
— – Created by: Takaaki Naganoya – Created on: 2024/10/12 — – Copyright © 2024 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use framework "AVFoundation" use scripting additions set aSynth to current application’s AVSpeechSynthesizer’s alloc()’s init() set aText to "昔、昔、ある所に、おじいさんとおばあさんが住んでいました。" set aUttr to current application’s AVSpeechUtterance’s speechUtteranceWithString:(aText) set aVoice to current application’s AVSpeechSynthesisVoice’s voiceWithLanguage:"ja-JP" –日本語のデフォルトボイスで読み上げ aUttr’s setVoice:aVoice aUttr’s setRate:0.6 aSynth’s speakUtterance:aUttr |
AppleScript名:AVSpeechSynthesizerで読み上げテスト(Voice IDとテキストを指定).scptd |
— – Created by: Takaaki Naganoya – Created on: 2024/10/12 — – Copyright © 2024 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use framework "AVFoundation" use scripting additions set aSynth to current application’s AVSpeechSynthesizer’s alloc()’s init() set aText to "むかーし、むかし、ある所に、おじいさんとおばあさんが住んでいました。" set aUttr to current application’s AVSpeechUtterance’s speechUtteranceWithString:(aText) set aVoice to current application’s AVSpeechSynthesisVoice’s voiceWithIdentifier:"com.apple.voice.enhanced.ja-JP.Kyoko" –voice系、eloquence系はOK。Siri系は指定できない(はず) aUttr’s setVoice:aVoice aUttr’s setRate:0.6 –0.0から1.0まで。1.0が高速 aSynth’s speakUtterance:aUttr |