ラズパイ 読む時間 約8分

VOICEVOX で通知の声を作る:無料の読み上げソフトで、メッセージを 1 行のコマンドで WAV にしてラズパイで鳴らす

無料の読み上げソフト VOICEVOX を PC にインストールして、Python の 1 行のコマンドでメッセージを WAV にする手順です。声の選び方・クレジットの書き方・作る時間(1 つ 1 秒ほど)と、作った声をラズパイで鳴らすところまで紹介します。

VOICEVOX で通知の声を作る:無料の読み上げソフトで、メッセージを 1 行のコマンドで WAV に。PowerShell で make_voice.py を実行して sitebeacon.wav を作り、ラズパイで aplay で鳴らす

わたしの家では、ラズパイが声で知らせてくれます。「メルカリで、商品が売れました。」「データベースの、バックアップに失敗しました。」といった声です。この声は、無料の読み上げソフト VOICEVOX(ボイスボックス)を使って、PC で作っています。

この記事では、声を作るところだけを紹介します。VOICEVOX をインストールして声を選び、1 行のコマンドで、メッセージを WAV のファイルにします。できたファイルは、ラズパイでもスマホでも、どこでも鳴らせます。

この記事の前にできていること

  • Windows の PC(Mac・Linux でも VOICEVOX は動きます。この記事のコマンドは Windows で試しました)
  • PC に Python が入っている(python.org からインストール。この記事では 3.14 で試しました)

ラズパイは、最後の「ラズパイで鳴らす」で使います。ラズパイのシリーズを読んでいなくても、声を作るところまでは進められます。

この記事でできるようになること

  • VOICEVOX をインストールして、使う声(話者)を選ぶ
  • 「python make_voice.py 126 ファイル.wav “メッセージ”」の 1 行で、メッセージを WAV にする
  • 作った WAV をラズパイに送って鳴らす

できあがる声の例です(里石ユカ(つぼみ)の声・約 3 秒)。

「サイトビーコンから、お知らせが届きました。」 VOICEVOX:里石ユカ(つぼみ)

VOICEVOX とは

VOICEVOX は、文章を打つと、キャラクターの声で読み上げてくれる無料のソフトです。Windows・Mac・Linux で動き、商用でも使えます。声は、ずんだもん・四国めたん・春日部つむぎなど、たくさんのキャラクターから選べます。

VOICEVOX の公式サイトのトップ。無料で使える中品質なテキスト読み上げ・歌声合成ソフトウェア。特徴は、商用・非商用問わず無料、すぐに使えるソフトウェア、イントネーションの詳細な調整が可能、喋り声で歌えるハミング機能搭載。右下にダウンロードのボタンとバージョン 0.26.2

画面で文章を打って読ませるのがふつうの使い方ですが、VOICEVOX は、起動しているあいだ、ほかのプログラムから声を頼める窓口(音声合成エンジン)も PC の中に開きます。この記事では、この窓口を Python から呼んで、声を自動で作ります。

先に:クレジットの書き方

VOICEVOX で作った声を使うときは、VOICEVOX の利用規約と、声のキャラクターごとの利用規約を守ります。多くのキャラクターで、「VOICEVOX:キャラクターの名前」のクレジットを書くことが決まっています。

この記事で使っている里石ユカ(つぼみ)は、「VOICEVOX:里石ユカ(つぼみ)」と書けば、商用・非商用で使えます(公式サイトの里石ユカのページの「里石ユカ 利用規約」)。家の中で鳴らすだけでも、声をブログや動画に載せるときは、必ずクレジットを書きます。

里石ユカ 利用規約の画面。里石ユカ(つぼみ)の音声ライブラリを用いて生成した音声は、「VOICEVOX:里石ユカ(つぼみ)」とクレジットを記載すれば、商用・非商用で利用可能です。利用規約の詳細は satoishiyuka.wixsite.com のページ

手順 A:VOICEVOX をダウンロードして、インストールする

公式サイトの「ダウンロード」を押すと、OS とパッケージを選ぶ画面が出ます。Windows なら「Windows」「インストーラー」を選んで、下の「ダウンロード」を押します。

VOICEVOX ダウンロードの画面。OS は Windows・Mac・Linux、パッケージはインストーラーと Zip(推奨はインストーラー)、CPU は x64。GPU モードは起動後に選べます。下に利用規約とダウンロードのボタン

ダウンロードしたインストーラーを開いて、画面の案内のとおりに進めます。この記事で試したのは 0.25.2 です(公式サイトのトップの表示は 0.26.2)。インストールが済んだら、VOICEVOX を 1 回起動して、利用規約に同意します。画面で文章を打って、左下の再生のボタンを押し、声が出れば準備はできています。

VOICEVOX 0.25.2 の画面。上に連続再生・停止・選択音声を書き出しのボタン、真ん中に文章を打つ欄、右に話速・音高・抑揚・音量・間の長さ・開始無音の調整、下にアクセント・イントネーション・長さの欄と再生のボタン。キャラクターの絵とアイコンは記事では消しています

VOICEVOX の画面(キャラクターの絵とアイコンは、この記事では消しています)

  • GPU モードは、起動したあとに選べます。上のメニューの「設定」→「オプション」の「エンジンモード」です。試した PC(Intel Arc A310)では、GPU にすると新しいメッセージのたびに 16 秒ほどかかり、CPU(1〜3 秒)より遅くなりました。通知のような短いメッセージなら、CPU のままで十分です。
  • 使い方の詳しい説明は、公式サイトの使い方と Q&A にあります。
VOICEVOX の設定/オプションの画面。エンジンのエンジンモードで CPU が選ばれている。GPU モードの利用には GPU が必要です。Linux は NVIDIA 製 GPU のみ対応しています。その下に音声のサンプリングレート(デフォルト)

手順 B:メッセージを WAV にするスクリプトを置く

PC の好きなフォルダー(例:C:\voice)に、次のファイルを make_voice.py の名前で保存します。文字コードは UTF-8 にします。Python の標準の部品だけで動くので、pip でのインストールは必要ありません。

# -*- coding: utf-8 -*-
# VOICEVOX で、メッセージを WAV のファイルにする(PC で動かす・Python の標準だけ)
# 使い方:VOICEVOX を起動してから
#   python make_voice.py 話者の番号 ファイルの名前.wav "読ませるメッセージ"
#   python make_voice.py --list      … 話者の番号の一覧を出す
import json
import sys
import urllib.parse
import urllib.request
ENGINE = "http://127.0.0.1:50021"  # VOICEVOX を起動すると、この PC の中だけで待ち受ける
def call(path, data=None):
    req = urllib.request.Request(ENGINE + path, data=data, method="POST" if data is not None else "GET",
                                 headers={"Content-Type": "application/json"})
    with urllib.request.urlopen(req, timeout=120) as r:
        return r.read()
if len(sys.argv) > 1 and sys.argv[1] == "--list":
    for sp in json.loads(call("/speakers")):
        for st in sp["styles"]:
            print(st["id"], sp["name"], st["name"])
    sys.exit(0)
speaker, out, text = int(sys.argv[1]), sys.argv[2], sys.argv[3]
q = urllib.parse.urlencode({"text": text, "speaker": speaker})
query = call("/audio_query?" + q, data=b"")                                   # 1. 読み方と高さを決める
wav = call("/synthesis?" + urllib.parse.urlencode({"speaker": speaker}), data=query)  # 2. 声にする
with open(out, "wb") as f:
    f.write(wav)
print("作りました:", out, len(wav), "バイト")
  • 127.0.0.1:50021:VOICEVOX が起動しているあいだだけ開く窓口です。PC の中からしか呼べないので、外から使われる心配はありません。
  • 声は 2 回に分けて頼みます:1 回目(audio_query)で読み方とアクセントを決め、2 回目(synthesis)で声にします。読み方を直したいときは、1 回目の結果を書きかえてから 2 回目に渡せます。
  • 窓口の説明は、VOICEVOX を起動した状態で、PC のブラウザーで http://127.0.0.1:50021/docs を開くと読めます(VOICEVOX ENGINE の GitHub にもあります)。

手順 C:声を選んで、WAV を作る

VOICEVOX を起動したまま、PowerShell で次のコマンドを実行します。まず、話者の番号の一覧を出します。

cd C:\voice
python make_voice.py --list
2 四国めたん ノーマル
3 ずんだもん ノーマル
8 春日部つむぎ ノーマル
126 里石ユカ つぼみ

左の番号が、声を作るときに渡す番号です。同じキャラクターでも、「ノーマル」「あまあま」などの話し方(スタイル)ごとに番号が分かれています。VOICEVOX 0.25.2 では、127 の声がありました。どの声にするかは、VOICEVOX の画面でメッセージを読ませて聞きくらべると決めやすいです。

番号を決めたら、メッセージを WAV にします。

python make_voice.py 126 sitebeacon.wav "サイトビーコンから、お知らせが届きました。"
作りました: sitebeacon.wav 137260 バイト

フォルダーにできた sitebeacon.wav をダブルクリックすると、声が聞けます。

聞き取りやすいメッセージにするコツ

  • 「、」を多めに置く:「メルカリで、商品が売れました。」のように区切ると、間が入って聞き取りやすくなります。
  • 英語や記号はカタカナにする:「SiteBeacon」より「サイトビーコン」、「DB」より「データベース」のほうが、思ったとおりに読まれます。
  • 最初の言葉で「何の知らせか」が分かるようにする:「ラズパイが、」「インターネットが、」のように、主語を先に言います。

手順 D:ラズパイで鳴らす

作った WAV をラズパイに送って、鳴らしてみます。ラズパイにスピーカー(イヤホンの差し口・USB スピーカーなど)を接続しておきます。mypi は、ラズパイのシリーズの第 3 回で決めた SSH の呼び名です。

scp sitebeacon.wav mypi:/tmp/
ssh mypi aplay /tmp/sitebeacon.wav

声が出れば成功です。メールが届いたら鳴らす・夜は鳴らさずに朝まで取っておく、といった「いつ鳴らすか」の仕組みは、売れたメールをラズパイが声で知らせる仕組みで紹介しています。VOICEVOX はラズパイでは重いので、声は PC で前もって作っておき、ラズパイはファイルを鳴らすだけにするのがおすすめです。

試した結果

PC(Core i7-14700・VOICEVOX は CPU モード)で、里石ユカ(つぼみ)の声を作った時間です。

メッセージ 作る時間
「テストです。」(6 文字) 0.55 秒
「サイトビーコンから、お知らせが届きました。」(21 文字) 0.98 秒
「データベースの、バックアップに失敗しました。調べてください。」(30 文字) 1.26 秒
  • 通知のメッセージ 1 つなら、1 秒ほどでできます。できた WAV は 24kHz・モノラルで、3 秒の声で約 130KB でした。
  • 知らせの声は 15 個ほど前もって作って、ラズパイに置いています。メッセージを変えたいときは、PC でもう 1 回作って送り直すだけです。

つまずきやすい所

  • 「接続が拒否されました」「ConnectionRefusedError」と出る:VOICEVOX が起動していません。VOICEVOX を起動して、画面が出てから、もう一度実行します。
  • コマンドプロンプトで、メッセージが文字化けする:PowerShell で実行します。それでも化けるときは、メッセージをスクリプトの中に書きます。
  • 1 つのメッセージに 10 秒以上かかる:GPU モードになっていないかを、VOICEVOX の設定で見ます。CPU にすると速くなることがあります。
  • ラズパイで音が出ない:aplay -l で、スピーカーが見えているかを見ます。音の出口の選び方は、売れたメールの記事にあります。

まとめ

VOICEVOX を起動しておけば、1 行のコマンドで、好きなメッセージを声のファイルにできます。声は PC で作って、ラズパイは鳴らすだけにすると、Raspberry Pi 3 のような小さなラズパイでも、すぐに声で知らせられます。次は、サイトの監視サービス(SiteBeacon)のお知らせを、ラズパイに読み上げさせてみます。

次に読む

この記事の声:VOICEVOX:里石ユカ(つぼみ)

この記事を書いた人

フリースタイル

Web の仕事 25 年以上。WordPress の保守・引っ越しと、PHP の業務の仕組みづくり。 プロフィール →

まずは、お気軽にご相談ください。

相談と見積りは無料です。急ぎのときは、フォームで「急ぎ」を選んでください。