2023/12/23

ファミコンに喋らせる(3)

前回の方法は、矩形波を2チャンネル使って片方は1オクターブ上の周波数にし、それぞれのデューティを変化させるのだった。その組み合わせを表にするとこうなる。縦方向のx2というのが1オクターブ上の方。

矩形波に含まれる倍音の量は、デューティが 50% < 25% < 12.5% の順に多くなるはずなので、乱暴に言うとその順番で高音成分が多くなるともいえる。そう考えると、こういうフォルマントの図によく似た並びになっているのだ。

やや強引な感じもするけど、一応それらしく聞こえる根拠とはいえるだろう。

ところで、よくあるフォルマントの説明では、たとえば「あ」の第1フォルマントの周波数は何Hz、みたいな記述になってるけど、これは喋るときのもの。では歌うときはどうなんだろう。音階によって周波数はぜんぜん違うのにフォルマントの周波数は固定。ということは音階とは関係ない周波数の音を付加する必要があるのだろうか? ...みたいな素朴な疑問があったので、あらためて調べてみた。

  • 声帯から出てくる音自体は「あいうえお」のどれでも同じ比率で倍音成分が含まれた周波数分布になっている。もちろん基本周波数によって倍音の周波数も違う。音階というのはこの周波数の話。
  • 声帯から出た音は口というフィルタを通過して声として出てくる。このとき口の中の形などによってフィルタの周波数特性が決まる。フォルマントというのはこのフィルタの周波数特性の話。

この2つを掛け合わせたものが、声として出てくる音の周波数分布ということになる。フォルマントの周波数というのはあくまでもフィルタの周波数特性上のピーク周波数、ということを理解してないと私のように「音階とは関係ない周波数の音を付加するのか」みたいな誤解をしてしまうわけだ。

声として出せる音階はけっこう幅がある一方、フォルマント周波数は固定なので、その基本周波数によって何倍音がフォルマント周波数にあたるかが異なったりする。なので同じ「あ」に聞こえる音でも音階によって周波数分布の形としては違うということになる。

いま考えている方法はそういう仕組みではなく、基本周波数によらず倍音の比率が固定なので、周波数分布としては同じ形で基本周波数に応じて全体が平行移動したような分布になるはず。なので倍音成分がうまくフォルマント近辺に収まるような音域じゃないと声らしくは聞こえないだろう。

2023/12/14

ファミコンに喋らせる(2)

単純な矩形波だけで喋らせようとしてみたけど、残念ながらあんまり人の声らしくはならなかった。あらためて、もう少しちゃんと考えてみる。

人は声の周波数分布のうち低い方から数えて1個目と2個目のピーク周波数(第1フォルマント/第2フォルマント)によって「あいうえお」を認識しているという。矩形波のデューティをうまくいじったら倍音成分がちょうどそれに当てはまらないかと思ったけどさすがにそんなわけなかった。やっぱり2つのフォルマントを表すには少なくとも2つのチャンネルを使う必要があるのだろう。

矩形波の倍音も含めてうまくフォルマントの周波数にあてはまるように計算すればいいんだろうけど面倒そうなので、条件を決めて総当たりで試してみた。矩形波のチャンネルをもう一つ使って1オクターブ上の音を出すことにすると、それぞれのデューティの組み合わせで3x3=9パターンある。その中でそれっぽく聞こえた組み合わせは:

「あ」 12.5% + 25%(オクターブ上)

「い」 50% + 12.5%(オクターブ上)

「う」 50% + 25%(オクターブ上)

「え」 25% + 12.5%(オクターブ上)

「お」 25% + 50%(オクターブ上)

(→再生できない場合)

遠くの方から「あいうえお」っぽいものがかすかに聞こえる感じ。とても自然な声とは言えないけど前のやつとは格段の違い。音量のバランスなど調整していけばもう少し聞こえやすくなるかもしれない。

2023/12/08

ファミコンに喋らせる(1)

ファミコン音源でしゃべらせる、というのを今さら考えてみた。もちろんサンプリング(DPCM)を使うのではなくて、普通の音源(矩形波とノイズ )だけでそれっぽく聞こえるようにするというもの。たぶんこれまでに多くの人が作ってきたであろう車輪の再発明だけどそれでいい。

まずは母音から。これは矩形波でなんとかしたい。でも矩形波のデューティは実質3種類しかないし、はっきりとした発音にするのはまず無理だろう。これぐらいでどうかな?

  「あ」デューティ25%
  「い」デューティ12.5%、弱め
  「う」デューティ50%、弱め
  「え」デューティ25%、弱め
  「お」デューティ50%

(→再生できない場合)

そのつもりで聞いたら「あいうえお」と言ってるように聞こえる...ような気がする...かな? やや「なにぬねの」っぽいかもしれない。いずれにしても画面に字幕を出しておけばなんとなくそう言ってるように聞こえるかも。