Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

回数数えるのが面倒

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

聞いてみよう!

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

アクセントを考慮した音声を合成してみる アクセントの効果をわかりやすくするために、ここでは「よろしくお願いいたしま す」を使います $ 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

Slide 25

Slide 25 text

聞いてみよう!

Slide 26

Slide 26 text

こわい!! かなしいね

Slide 27

Slide 27 text

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=こんにちは

Slide 28

Slide 28 text

まとめ 1. 筋トレのトレーナーのかわりに音声合成を使おうと思った 2. なんかもっとサッとやりたかったので、自分の音声を使った音声合成をやってみ た 3. こわかった 4. アクセントをつけてみた 5. こわかった App Runnerめちゃ簡単で良かったのでおススメです

Slide 29

Slide 29 text

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