GASで作ったnote記事読み上げツールにAivis Cloud TTSを追加してみた
こんばんは。ほったりたです。
以前、「note記事を音声で紹介するツール」をGAS(Google Apps Script)で作りました。
Gemini TTSを使って、8種類のキャラクター(アナウンサー、お笑い芸人、博士、半魚人ウオ太郎など)が記事を紹介してくれるツールです。
ただ、GeminiTTSの音声って綺麗なんですけど、あんまり差別化ができないので、日本語のTTSを色々探ってたところ、Aivis Cloud という日本語特化の音声合成APIを知り合いの方に教えていただいたので試してみました。しかも今はベータ版で無料とのことなので触り放題?です!
今回はこのAivis Cloudを既存ツールに組み込んでみた話です。
完成したツールの紹介
まずは完成したツールの様子を見てみてください。
既存の8キャラクター(Gemini TTS)に加えて、Aivis Cloudで2キャラクターを追加しました。
朗らかおじさん
アイドル
これで合計 10キャラクター になりました!
それぞれのキャラクターが、note記事の内容を分析して、そのキャラクターらしい口調で紹介してくれます。
Aivis Cloud とは
詳しくは公式サイトで。。
ベータ版の間はAPI利用も無料みたいなので使ってみました。
技術スタック
今回の実装で使用した技術は以下の通りです。
GAS(Google Apps Script):メインの実行環境
Gemini TTS API:既存の音声合成エンジン
Aivis Cloud API:新しく追加した音声合成エンジン
REST API:Aivis Cloudとの通信
既存のツールに機能を追加する形なので、基本的な構造は変えていません。
実装のポイント
やったこと
Aivis Cloud APIキーを取得
GASにAivis Cloud API呼び出し関数を追加
キャラクターごとにTTSエンジン(Gemini / Aivis)を切り替え
音声フォーマット対応(Gemini→WAV / Aivis→MP3)
Aivis Cloud モデルUUID管理
各キャラクターに対応するAivis CloudのモデルUUIDを管理します。
UUIDはAvis Hubのキャラクターの詳細からコピーできます

function getAivisModelUUID(character) {
var models = {
'hogaraka_ojisan': '47e53151-a378-46f3-abee-ce13aa07feb1',
'idol': '3328da9a-8124-4619-a853-f7fc2f37889f'
};
return models[character] || null;
}AivisHubで気に入った声を見つけたら、そのUUIDをここに追加するだけです。
Aivis Cloud API呼び出し
GASからAivis Cloud APIを呼び出す関数です。
function callAivisCloudTTS(text, character) {
var apiKey = PropertiesService.getScriptProperties().getProperty('AIVIS_API_KEY');
var modelUUID = getAivisModelUUID(character);
var url = 'https://api.aivis-project.com/v1/tts/synthesize';
var payload = {
model_uuid: modelUUID,
text: text,
use_ssml: false,
use_volume_normalizer: true,
output_format: 'mp3',
speaking_rate: 0.95 // しっとり読み上げのため少しゆっくり
};
var options = {
method: 'post',
contentType: 'application/json',
headers: { 'Authorization': 'Bearer ' + apiKey },
payload: JSON.stringify(payload)
};
var response = UrlFetchApp.fetch(url, options);
var audioBlob = response.getBlob();
return Utilities.base64Encode(audioBlob.getBytes());
}REST APIなので、GASから呼び出すのがとても簡単です。
speaking_rateで話す速度を調整できます。今回は0.95に設定することで、少しゆっくりとした読み上げになっています。
使ってみた感想
日本語のイントネーションは結構自然ですが、普通にテキストを渡すだけだと文と文のつながりが気になる。間をとったりして自然な話ぶりにしたいところなのでSSMLを活用した方が良さそうです。
最後まで読んでいただきありがとうございました!
普段は「はっきんぐパパ」として電子工作やものづくりの記事も書いていますので、こちらもぜひ覗いてみてください。
はっきんぐパパはこちら↓
いいなと思ったら応援しよう!
いつも読んで頂きありがとうございます!
いただいたサポートは子どものためのもの作りの活動費に使わせていただきます!
