SVX日記
2022-09-10(Sat) 結局、効果音生成ツールを自作する
先日、ノイズを生成できるようになってから、効果音生成プログラムに組み込んでアレコレしていたのだが、アレコレしているうち、効果音とは、基本となる波形に様々な変化を繰り返し重ねていくことによって生成するものだということがわかってきた。
考えれば考えるほどわからなくなり、コードを書いては試し、何度も書き直した。コードの追加ではなく、こんなに何度も、構造ごと変えては、頭から書き直したのは初めてだ。変調を追求していくうちに、FM音源に行き当たり、周波数変調、位相変調、YM2151(OPM)の仕組みにまで踏み込んでしまい、オペレータのコネクションを再現するために、RPNっぽい手法まで実装することになった。
最終的には、以下のような記述で音を作る。以下は、soxのサンプルにあるパイプオルガンによるAm7を再現するもの。typeで正弦波(sine)を指定、freqで周波数(A3, C4, E4, G4)を指定、envでエンベロープ(音量変化)を指定。最後にそれらをRPN記法で重ねていく。
@length = 1
car1 = it = {}
it[:device] = 'generate'
it[:length] = @length
it[:type] = 'sine'
it[:freq] = <<FREQ
#+BC+D+EF+G+A+BC+D+EF+G+A+BC+D+EF+G+A+BC+D+EF+G+A+BC+D+EF+G+A+BC+D+EF+G+A+BC+D+EF+G+A+BC+D+EF+G+A
#--1----(55)1--2---(110)2--3---(220)3--4---(440)4--5---(880)5--6--(1760)6--7--(3520)7--8--(7040)8
..................................../
FREQ
it[:amp] = <<AMP
#--------------25--------------50--------------75-------------100
................/
AMP
car2 = it = {}
<略、C4 の正弦波>
car3 = it = {}
<略、E4 の正弦波>
car4 = it = {}
<略、G4 の正弦波>
add = it = {}
it[:device] = 'add'
env1 = it = {}
it[:device] = 'env'
it[:length] = @length
it[:amp] = <<AMP
#--------------25--------------50--------------75-------------100
/
................................................................/
................................................................/
................................................................/
................................................................/
................................................................/
/
AMP
@connection = [ car1, car2, add, car3, add, car4, add, env1 ]
これでwavファイルが生成される<聴いてみる>。
もちろん、加算はもっとも基本的な演算で、真骨頂は変調である。インベーダのUFOの音っぽいの<聴いてみる>とか、パックマンのモンスタの音っぽいの<聴いてみる>とか、R-TYPEのショット音っぽいの<聴いてみる>とか、ダライアスのレーザ音っぽいの<聴いてみる>とか、割と直感的な記述により生成することができる。
今回、FM音源のことを調べていて、ものすごく少ないパラメータ(バイト数)で音色が作れることが、当時のPCの性能事情に即していたこと。反面、音色作りがものすごく難しかったことを、改めて知った。実際、自分もX1のFM音源をアレコレしていたが、ちっともイメージしたような音色が作れなかった。
コードと定義ファイル一式を置いておく。
2022-09-12(Mon) 結局、効果音生成ツールを改良する
一応、効果音生成ツールは一応の完成を見たのだが、やりだすと、そう簡単には止まらないのである。
んが、一方で、3,8,5というノイズを、3,3,8,8,5,5と加工すれば、低音側に遷移することに疑いはないのである。まぁ、厳密な定義はともかく、指定の方法はトーンに合わせて、440.0を標準とし、詰めたり、間引いたりすることで、ノイズに音程変化が起こせるようにしてみた。
@length = 1.0
mod1 = it = {}
it[:device] = 'generate'
it[:length] = @length
it[:type] = 'square'
it[:freq] = [8]
it[:amp] = <<AMP
#--------------25--------------50--------------75-------------100
................................................................/
AMP
noise1 = it = {}
it[:device] = 'fm'
it[:length] = @length
it[:type] = 'pink_noise'
it[:freq] = [20]
it[:amp] = <<AMP
#--------------25--------------50--------------75-------------100
................................................/
................................................................/
/
AMP
it[:index] = 1.5
@connection = [ mod1, noise1 ]
こんな記述で、ロケット噴射音っぽいの<聴いてみる>を作ることができた。これは使えるな、そろそろシューティングの製作に戻ろう。
コードと定義ファイル一式を置いておく。
2022-09-29(Thu) ウォッチをウオッチ
このブログでも何度も取り上げているが、長らくナビホークというシチズンの航空腕時計を愛用している。前回は日記エントリにしなかったが、2020年9月に5度目の電池交換をしたところだ。購入日は1999年6月26日とあるので……え、23年も使ってんのか。
が、ここ数ヶ月、右上のボタン、ストップウォッチのスタート、ストップに使うボタンが徐々に渋くなり、とうとう戻ってこなくなってしまった。えー、電池交換までまだ何年もあるし、それだけのためにメンテに出すのもなぁ。結構、お金が掛かるし……。
ところが、ちょっと見栄えのするのはアリエクでも2000円くらいする。信頼性の低いものにそんなに出すなら、カシオのがいいわ。というわけで、カシオで探す。G-SHOCKにコダわりはないが、アナログが好きなので、ストップウォッチ付きとなると、ほぼアナデジコンビタイプに絞られる。
ゴチャっとしているのもイヤじゃないが、針の視認性が低いのはイヤである。黒地に白は悪くないが、液晶部分が灰色だと浮いている感じで違和感。ナビホークは全体に灰色地なのでよかったのだが……と、最近は液晶部分が反転しているものもある。液晶表示は見やすいとはいえないが、デザインとしては悪くない。
と、結局、散々に迷った挙げ句、AEQ-110W-1BJHという製品にした。4230円。地味だが、パッと見G-SHOCKで、それほど安っぽくは見えない、と思う。
で、26日に届き、フムン、実物も悪くないな、と思っていたところで、偶然にG-SHOCKの新作に関するニュースを目にした。値段は5倍くらいするが、なんだか、デザインコンセプトがすごく似ている気がするな。