投稿

2025の投稿を表示しています

歴史的な音声合成ソフト「XKL」で遊ぶ(4) ~仕組み編~

イメージ
XKLで遊ぶ記事 の第4弾。 前々回・前回で XKL の基本操作を追っていきました。これでいろいろな音声が生成できそうです。 もっと音声合成で遊ぶために、各パラメータの意味を把握しておきたいところです。そのまえに、Klatt Synthesizerの歴史と構造についてざっと調べてみました。 おおまかな歴史 1. 初期の Klatt Synthesizer (1980年) Dennis Klatt氏が最初に Klatt Synthesizer を発表したのは、1980年の " Software for a cascade/parallel formant synthesizer " という論文のようです。 https://www.fon.hum.uva.nl/david/ma_ssp/doc/Klatt-1980-JAS000971.pdf この1980年版の Klatt Synthesizer は以下のような構成です。 [Klatt, 1980] より引用 これが最もベーシックな Klatt Synthesizer です(細かい部分は以降で見ていきます)。その後のバージョンで細かな変更や拡張が行われるものの、大まかにはこの時点ですでに完成されています。 この1980年の論文のなかで、「HANDSY.FOR」というFORTRAN のプログラムが掲載されています。このプログラムは当時のコンピュータである DEC PDP-11 向けに書かれたものでした。以下のリポジトリでは、gcc の GNU Fortran でコンパイルできるように整備されています。 https://github.com/jh4xsy/klatt80 すこし脱線しますが、初期のKlatt Synthesizerをベースに作られたのが DECtalk です。 車椅子の理論物理学者であるスティーヴン・ホーキング博士の機械音声は DECtalk で合成されたものです。 また、テクノミュージックの巨匠である Kraftwerk が「Music Non Stop」で使った合成音声も DECtalk だそう。 ちなみに DECtalk は、現在はオープンソースで公開されています。各プラットフォーム向けのバイナリも配布されているので手軽に試せます。 https://github.com/dect...

歴史的な音声合成ソフト「XKL」で遊ぶ(3) ~時変パラメータ編~

イメージ
XKLで遊ぶ記事 の第3弾。時間に応じて合成パラメータを変化させてみます。 d: パラメータを時間変化させる コマンドメニューの「d  CHANGE synthesis parameter time function」をダブルクリックすると、パラメータを時間変化させる画面になります。 ここでは パラメータ F0 (基本周波数, 声の高さに相当する) を時間変化させてみます。 グラフが開きます。続いて時刻を入力します。ここでは 100 ms の位置の値を設定することにします。 続いて、パラメータの値を入力します。ここでは 100 ms 地点を 100.0 Hz にしたいので 1000 を入力します。 このあとは、時刻と値を交互に入力していきます。たとえばこんな感じ。 入力したパラメータ設定はグラフにも反映されていきます。入力した値が直線で結ばれていくイメージです。 音声合成するとこんな感じ。声の高さを時間変化させることができました。 これと同様に、他のパラメータ(フォルマントなど)も時間変化させることができます。 v: 時間変化させたパラメータを見る 現在の時間変化パラメータを確認するには「v  PRINT (screen) varied parameters」を選びます。 チャレンジ: 音声 /ba/ を合成する 以上で時間変化のための操作説明はおしまいです。せっかくなので、このやりかたでひとつ音声を作ってみます。今回は、有声子音と母音からなる 「ば」(/ba/) の音声 を作ります。 /ba/ の具体的なパラメータ設定は、上智大学・荒井研究室のサイトのページを参考にしました。 F2開始周波数と調音位置 その2 (F2-onset frequency and place of articulation Part 2) このページの元になった論文は以下から閲覧できます。 K. Tomaru and T. Arai: "Role of labeling mediation in speech perception: Evidence from a voiced stop continuum perceived in different surrounding sound contexts" (2016) 論文では、以下のようにパラメータを変化させるこ...

歴史的な音声合成ソフト「XKL」で遊ぶ(2) ~基本操作編~

イメージ
XKLで遊ぶ記事 の第2弾、基本操作編です。 XKLで 母音「あ」を合成してみる 使い方を紹介しつつ、母音「あ」を合成するところからはじめてみます。 XKLは、使いやすさに全振りした現代のソフトウェアと比べると、ちょっと手ごわい感じがします。私自身も最初は意味不明に感じて投げ出しそうになったのですが、試行錯誤しているうちに使い方がわかってきました。 さてこのソフト、XKLでできることは大きく2つに分かれます。 音声合成 例:パラメータ(フォルマント情報等)を入力することで、音声波形を合成する。 音声分析 例:録音した音声ファイルから、フォルマント周波数を調べる。 音声合成だけでなく音声分析もできてしまう高機能さゆえに、少しわかりにくくなっている気がします。XKLを起動してなんとなく使おうとすると、分析機能ばかりが目に入ってきて、「一体どこを操作すれば音声合成できるの…?」と迷子になってしまいがちです。これらを意識的に区別するとわかりやすいと思います。 音声分析モードで起動する 我々がやりたいことは音声合成なのですが、起動直後は音声分析に特化したモードになっています。 XKLは起動時になんらかの音声ファイルを指定する必要がありますが、とりあえずは同梱されている「test.wav」を開くのがよいと思います。 ./xkl-3.2  ./test.wav これで音声ファイルが開きます。ちなみにこの test.wav は Klatt Synthesizer で合成された音声です。 いろいろな操作ができますが、必要最低限の機能をご紹介します。 「左クリック」または「Alt+左クリック」で時刻カーソルが動かせます。 「中ボタンクリック」または「pキー」で音声が再生できます。 ちなみに私の環境だと再生終了後に謎のグリッチ音が入るのですが、実用上は問題にならないので無視しています。 この時点では、まだ音声分析しかできない状態です。ここから音声合成に入っていきます。 音声合成モードに入る 音声合成ができる状態にするには、メニューから「 Synthesize 」を実行します(または「Shift+Y」キーを押す)。 そうするとダイアログが出てきます。 これがすこしぶっきらぼうな書き方で分かりにくい……。 聞かれていることは要するに、 「音声合成モードのデータを用意するにあたって、デ...

歴史的な音声合成ソフト「XKL」で遊ぶ(1) ~導入編~

イメージ
1980年代から続く音声合成ソフト XKL を使ってみよう!という記事の第1弾、導入編です。 (記事は  XKLカテゴリ  にまとめてあります) はじめに ここ数年で、VoiceVox や Synthesizer V に代表される高品質なAI音声合成ソフトが広く使われるようになりました。もはや肉声と区別できない領域に達しているソフトもありますが、ボカロの世界でよく言われるように「リアルさだけがすべてではない」ということを常々思っています。 機械音声を創作するうえで、そもそも声として聞こえるとはどういうことなのかという基本に立ち返ったうえで、人間の職人技によって調声できる「筆」のような道具が欲しいと思いました。機械学習による音声合成とは真逆の方向性です。そこで、昔ながらの合成方式である フォルマント合成 と呼ばれる技術を考えてみます。 フォルマント音声合成の歴史を調べると、 「Klatt Synthesizer」 や 「KLSYN」 と呼ばれる音声合成システムが登場します。 この「Klatt Synthesizer」というのは、 Dennis H. Klatt  氏 (米MIT) が1980年代に発表した音声合成システムで、いわばレジェンド的なソフトウェアです。古典的な音声研究において有名ですし、DECtalkのベースにもなりました。ついでにいうと、本ブログで10年以上前に書いた記事「 C言語で音声合成もどき 」も、この Klatt Synthesizer が元ネタだったりします。 さてこの Klatt Synthesizer ですが、私はいままで論文でしか見たことがありませんでした。しかし調べてみると、本家Klatt Synthesizerが 2025年現在でも使える ようなのです。 サイト:  The xkl project 正確にいうと様々存在するバリエーションのひとつのようですが、Klatt氏が実装した KLSYN88 を拡張するかたちで作られていることから、私が知るなかでは最もオリジナルに近いものだと思っています。 このソフトにいろいろと数値を打ち込んでやることで、本物のKlatt Synthesizerによる音声合成が再現できてしまう。これはなかなか面白そうです。 というわけで今回はXKLを使った音声合成で遊んでみます...