Upgrade to Pro — share decks privately, control downloads, hide ads and more …

音声合成してみよう

xztaityozx
February 25, 2023

 音声合成してみよう

第63回シェル芸勉強会のLTで使った資料です

xztaityozx

February 25, 2023
Tweet

Other Decks in Programming

Transcript

  1. 音声合成してみよう
    たいちょー

    View Slide

  2. みなさん#!/bin/bash(こんにちはの意)
    たいちょーです
    twitter: @xztaityozx_001
    GitHub: xztaityozx
    好きな言語: C#, Go
    職業: お嬢様系難読化シェル芸人

    View Slide

  3. 今回の話
    自分の音声で単純な音声合成をしてみる話

    View Slide

  4. 筋トレしてますか
    私はやってます
    めちゃくちゃ追い込む感じではなく、ゆるく自宅トレーニングしてます
    ちょっっっとだけ育ってきてちょっとうれしい
    これからも頑張ります
    でも…

    View Slide

  5. 回数数えるのが面倒

    View Slide

  6. 回数数えるのが面倒
    どの動きをN回、という感じ。回数を数えておく必要がある
    でも運動の方に集中したいので、回数が分からなくなりがち
    回数を電子音で知らせるアプリもあるけど、今何回目かがわかりにくくてむずい
    トレーナーがいれば楽ですが…家にはいない…!

    View Slide

  7. トレーナー作ればいい
    じゃん

    View Slide

  8. 音声合成を使ってトレーナーを作ろう
    音声合成
    テキストから音声を人工的に生成するやつ
    そんな感じのソフトウェアが割とある
    Open JTalk
    N2 TTS
    A.I VOICE
    まだまだたくさん
    回数を数える文章を書いて音声を合成すればトレーナーが作れる!

    View Slide

  9. 音声合成してみる
    今回はA.I VOICE 紲星あかりを使
    ってみます
    理由
    API用のDLLが配られて
    て、プログラムから音
    声を合成しやすい
    かわいい

    View Slide

  10. cute...
    いい感じですね
    APIを使って簡単にメニューを音声合成できるようにしたいですね!
    なんなら、WebサーバーにしてLAN内に公開したいですね!
    スマホから操作できてうれしいからですね!
    ちなみに、APIを使ったサーバーをインターネットに公開するのは規約で
    禁止されてます
    でも
    名前付きパイプを使う都合、.NET6ではできないですね
    とはいえ.NET FrameworkではWebサーバーを書くのがめんどくさいですね

    View Slide

  11. なんかこう…もっと手軽に合成したい…
    したいですね

    View Slide

  12. 自分の声合成すればい
    いじゃん
    そうかな…そうかも…

    View Slide

  13. 自分の音声合成ソフトを作ってみよう
    手法
    i. 50音を録音
    ii. 文字列を1文字ずつ分割
    iii. 対応する音声ファイルを ffmpeg で連結
    iv. 完成
    すごく簡単ですね!

    View Slide

  14. 録音
    以下のコマンドで生成した文字を一つずつ録音していきます
    echo {ァ..ン} | fmt -1 | grep -v '[ァ|ィ|ゥ|ェ|ォ|ヮ|ャ|ュ|ョ|ヰ|ヱ|ッ]'

    View Slide

  15. View Slide

  16. 分割
    Audacityの機能を使って録音ファイルをから一文字ずつ分割していきます。
    分割後のファイルはシェル芸で名前を付けておきます
    $ echo {あ..ん} | fmt -1 | grep -v '[ぁぃぅぇぉゃっゅょゎゑゐ]' | paste - <(ls) | rargs mv {2} {1}.mp3
    あ.mp3 , い.mp3 という感じのデータができます。

    View Slide

  17. 合成
    ffmpeg で音声を合成します。
    「こんにちは」だとすると、以下のコマンドで生成できます
    $ ffmpeg -i "concat:こ.mp3|ん.mp3|に.mp3|ち.mp3|は.mp3" out.mp3

    View Slide

  18. 聞いてみよう!

    View Slide

  19. こわい!
    そして全然かわいくない

    View Slide

  20. なぜ怖いのか
    いろいろあると思いますが、一番は抑揚がないからですね

    View Slide

  21. UniDicでアクセントを知らべてみる
    UniDic
    UniDicとは、国立国語研究所の規定した斉一(せいいつ)な言語単位(短単位)
    と、 階層的見出し構造に基づく電子化辞書の
    ① 設計方針
    および、その実装としてのリレーショナルデータベース
    ② UniDicデータベース
    と、そのデータベースからエクスポートされた短単位をエントリ(見出し語)と
    する、形態素解析器MeCab用の解析用辞書
    ③ 解析用UniDic
    の総称です。

    View Slide

  22. UniDicでアクセントを調べてみる
    25番目のフィールド(= aType )がアクセント位置です
    26,27番目のフィールドも使ってアクセントを修飾しますが、今回は単純化のため
    に位置だけを見ます
    こんにちは の場合は5文字目
    $ echo こんにちは | mecab -d /var/lib/mecab/dic/unidic
    こんにちは 感動詞,...省略...,コンニチハ,5,,,37963946107478528,138112
    EOS

    View Slide

  23. アクセント位置用の音声を用意する
    ピッチを調整した音声を用意します
    ffmpeg を使います
    1.01倍にします
    $ ls *.mp3 | rargs -p '(.+)\.mp3' ffmpeg -y -i {} -af 'asetrate=44100*101/100,atempo=100/101' {1}_accent.mp3

    View Slide

  24. アクセントを考慮した音声を合成してみる
    アクセントの効果をわかりやすくするために、ここでは「よろしくお願いいたしま
    す」を使います
    $ ffmpeg -i concat:$(echo よろしくお願いいたします|\
    mecab -d /var/lib/mecab/dic/unidic | \
    awk 'NF>1{print $2}' | \
    sel -d, 21 25 | \
    awk '{for(i=1;i<=length($1);i++) if(i==$2) { print substr($1, i, 1)"_accent.mp3" } else print substr($1, i, 1)".mp3"}' | \
    paste -sd\|) \
    ./output.mp3

    View Slide

  25. 聞いてみよう!

    View Slide

  26. こわい!!
    かなしいね

    View Slide

  27. APIサーバーを建ててみました…
    いい感じにできたらWebサービスとして公開してみるかと思ってました
    いい感じになってないですが公開しました。ただしAPIだけ…
    https://[サ終しました].ap-northeast-1.awsapprunner.com/api/Generate
    {"Text": "こんにちは"} といった感じのJSONをPOSTしてやると、音声フ
    ァイルへのURLが返ってきます
    AWS App Runnerの素振りがしたかったのがほとんどのモチベです
    今日中にサーバーは落とすので試すなら今!!
    # httpie の例
    $ http --json POST https://[サ終しました].ap-northeast-1.awsapprunner.com/api/Generate Text=こんにちは

    View Slide

  28. まとめ
    1. 筋トレのトレーナーのかわりに音声合成を使おうと思った
    2. なんかもっとサッとやりたかったので、自分の音声を使った音声合成をやってみ

    3. こわかった
    4. アクセントをつけてみた
    5. こわかった
    App Runnerめちゃ簡単で良かったのでおススメです

    View Slide

  29. $ owari kan -g -a xztaityozx
    | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
    | 終 |
    | 制作・著作 |
    |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ |
    | xztaityozx |
    |_________|
    ∧∧ ||
    ( ゚д゚)||
    / づΦ

    View Slide