Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9225

Node.jsからVOICEVOXを使ってみる。

$
0
0
思い出しながらソースをペーストしているので違ってる部分もあるかも 解説というより思い出す為のメモ程度だと思ってください。 VOICEVOXとは つよつよエンジニアが作った音声読み上げソフト、詳しくはここ見て https://voicevox.hiroshiba.jp/ こんなツイートがあったので試してみた 「 #VOICEVOX を外部のソフトウェアから使えますか?」という質問をよく貰います。すごく簡単に使えます!VOICEVOXの音声合成エンジンはローカルにHTTPサーバーが立っているだけなので、こんな感じでPOSTを叩けばテキスト読み上げができます。詳しくは localhost:50021/docs をご覧ください。 pic.twitter.com/JFg2xMLgGK— ヒホ(ヒロシバ)🗑️ (@hiho_karuta) August 4, 2021 とりあえずやりたいこと Node.jsを使用してVOICEVOXで読み上げデータを作りたい。 準備&インストール npm install axios npm install fs VOICEVOXに含まれている VOICEVOX-0.1.1-win/run.exe を起動しておく すると http://localhost:50021 に接続することができる。 http://localhost:50021/docs にかかれているメソッドの結果を組み合わせると音声パラメータや音源を生成することができる。 実装 index.js const { default: axios } = require("axios"); const fs = require("fs"); //axios=通信するやつ //httpを省略するとうまく接続できなかったのでしっかり書いておく。 const rpc = axios.create({ baseURL: "http://localhost:50021", proxy: false }); //text:喋ってもらいたい言葉 //filepath:保存先 //ex:GenAudio("こんにちは","./greeting.wav"); async function GenAudio(text, filepath) { /* まずtextを渡してsynthesis宛のパラメータを生成する、textはURLに付けるのでencodeURIで変換しておく。*/ const audio_query = await rpc.post('audio_query?text=' + encodeURI(text) + '&speaker=1'); //audio_queryで受け取った結果がaudio_query.dataに入っている。 //このデータをメソッド:synthesisに渡すことで音声データを作ってもらえる //audio_query.dataはObjectで、synthesisに送る為にはstringで送る必要があるのでJSON.stringifyでstringに変換する const synthesis = await rpc.post("synthesis?speaker=1", JSON.stringify(audio_query.data), { responseType: 'arraybuffer', headers: { "accept": "audio/wav", "Content-Type": "application/json" } }); //受け取った後、Bufferに変換して書き出す fs.writeFileSync(filepath, new Buffer.from(synthesis.data), 'binary'); } GenAudio("こんにちは","./greeting.wav"); 偶に読み上げに失敗するとステータス500が返ってきたりするので、うまくいかないときは特殊文字とかが含まれてたり 読ませたい文字が長すぎではないかを確認する。 再起動などするとうまくいくときもある。 結果 greeting.wavが生成されている、再生すると可愛い声の「こんにちは」を聞くことができる。 そのうちやりたいこと Chrome拡張とか作って選択箇所を読ませるのを作りたい。

Viewing all articles
Browse latest Browse all 9225

Trending Articles