2018/12/04(火) [n年前の日記]
#1 [tic80] TIC-80上でFM音源っぽい波形を生成してみるテスト
TIC-80上でFM音源っぽい波形を生成するソレをまだ試していたり。一周期分の波形の最初と最後がずれてしまうために高周波成分が混じってしまう問題について、どう対処すればいいのか…。
窓関数を経由するのはどうか、などと考えていたけれど、要は最初と最後が繋がってるように見えればなんでもいいのだよなと思い直して。求めた一周期分の波形の、その後に続くはずの波形を一旦仮で求めておいて、それを波形の最初のあたりに合成してやれば繋がってるっぽい波形になるのでは、と。例えば FL Studio でループ素材を作ろうとするとそんな感じの処理が行われる ―― 出力設定で選択範囲後に鳴るはずの音(ディレイやリバーブ等)を出力波形の前方にうっすら重ねる事が可能なのだけど、それと同じことをやればいいのでは、と思いついたわけで。
実装してみたところ、高周波の「ビー」というノイズは聞こえなくなった。これでも充分、かもしれない。
もっとも、この処理を入れたことで、正確なFM音源っぽい波形とは異なった波形になっているはずだけど…。そもそも、音量4bit、一周期32個の波形メモリのスペックで、そのあたり気にしてもさほど意味は無いだろうし…。要するに、人間にとってどういう音が実際に聞こえるかが大事なのだから、これでもいいんじゃないかな…。
ということで、こんな感じになった。ブラウザ上で動作させるなら以下。
_wavetestfm.tic.html
cart(.tic)とソースは以下。
_ticファイル : wavetestfm_20181205.zip
_ソース : wavetestfm.lua
FM音源の仕組みについては、以下のページが参考になった。ありがたや。
_音とFM音源の軽い紹介と今昔物語 - Qiita
_FM音源を学ぶ(1) | Scene Research Station
_FM音源を学ぶ(2) | Scene Research Station
もしかして、sin波だけじゃなくて、矩形波、ノコギリ波、三角波も使えるようにしたほうがいいのだろうか…。あるいは、FM音源には色々なアルゴリズムがあるらしいけど、そのあたりも実装したら聞こえ方が変わったりするのだろうか。でも、波形メモリのスペックからして、そんなに違いは出てこないのでは、という予感も。
窓関数を経由するのはどうか、などと考えていたけれど、要は最初と最後が繋がってるように見えればなんでもいいのだよなと思い直して。求めた一周期分の波形の、その後に続くはずの波形を一旦仮で求めておいて、それを波形の最初のあたりに合成してやれば繋がってるっぽい波形になるのでは、と。例えば FL Studio でループ素材を作ろうとするとそんな感じの処理が行われる ―― 出力設定で選択範囲後に鳴るはずの音(ディレイやリバーブ等)を出力波形の前方にうっすら重ねる事が可能なのだけど、それと同じことをやればいいのでは、と思いついたわけで。
実装してみたところ、高周波の「ビー」というノイズは聞こえなくなった。これでも充分、かもしれない。
もっとも、この処理を入れたことで、正確なFM音源っぽい波形とは異なった波形になっているはずだけど…。そもそも、音量4bit、一周期32個の波形メモリのスペックで、そのあたり気にしてもさほど意味は無いだろうし…。要するに、人間にとってどういう音が実際に聞こえるかが大事なのだから、これでもいいんじゃないかな…。
ということで、こんな感じになった。ブラウザ上で動作させるなら以下。
_wavetestfm.tic.html
- 実行画面左の「FM」をクリックすると、FM音源の仕組みで波形を生成する。
- 切り替えた直後はスゴイ雑音が鳴るので、左下の「RSET」をクリックしてスライダーを初期化するといいかも。
- 「FSYN」を切り替えると、波形の最初のほうが加工されてることが分かる、かなと。
cart(.tic)とソースは以下。
_ticファイル : wavetestfm_20181205.zip
_ソース : wavetestfm.lua
FM音源の仕組みについては、以下のページが参考になった。ありがたや。
_音とFM音源の軽い紹介と今昔物語 - Qiita
_FM音源を学ぶ(1) | Scene Research Station
_FM音源を学ぶ(2) | Scene Research Station
もしかして、sin波だけじゃなくて、矩形波、ノコギリ波、三角波も使えるようにしたほうがいいのだろうか…。あるいは、FM音源には色々なアルゴリズムがあるらしいけど、そのあたりも実装したら聞こえ方が変わったりするのだろうか。でも、波形メモリのスペックからして、そんなに違いは出てこないのでは、という予感も。
◎ 妄想。 :
TIC-80 は1/60単位で波形メモリを書き換えられる、といった記述が公式Wikiに載ってたような気もするのだけど。だとしたら…。
例えば、適当なwavファイルを、1/60単位でバラバラにして、そのバラバラにした波形をどうにか一周期分の波形データに加工して、1/60毎に波形メモリを書き換えて差し替えていけば、それっぽく音が鳴ったりしないか…。「ベラボー!」とか「ミッソ」とか…。
問題は、1/60単位≒16.667ms分の波形データから、どうやって一周期分を ―― 音量4bit、32個のサンプルデータに収められそうな波形を取得するか…。
ピッチを求めて、そのピッチで波形を分割して、分割した波形群を全部合成して、4bit32個に変換、とか? そんな雑な処理でも、それらしく聞こえてくれるのだろうか。それとも、聞けたものではない波形になるのだろうか。どうなんだろう。
PCM音源が当たり前の時代に何をやっているのか、という気もするけれど、今の技術を駆使すれば当時のスペックも更に活用できたりするのでは、という興味もちょっぴり。
例えば、適当なwavファイルを、1/60単位でバラバラにして、そのバラバラにした波形をどうにか一周期分の波形データに加工して、1/60毎に波形メモリを書き換えて差し替えていけば、それっぽく音が鳴ったりしないか…。「ベラボー!」とか「ミッソ」とか…。
問題は、1/60単位≒16.667ms分の波形データから、どうやって一周期分を ―― 音量4bit、32個のサンプルデータに収められそうな波形を取得するか…。
ピッチを求めて、そのピッチで波形を分割して、分割した波形群を全部合成して、4bit32個に変換、とか? そんな雑な処理でも、それらしく聞こえてくれるのだろうか。それとも、聞けたものではない波形になるのだろうか。どうなんだろう。
PCM音源が当たり前の時代に何をやっているのか、という気もするけれど、今の技術を駆使すれば当時のスペックも更に活用できたりするのでは、という興味もちょっぴり。
◎ 2018/12/05追記。 :
一部バグってたので、修正して再アップロード。
[ ツッコむ ]
以上です。