2023-01-19
読めば読むほどよくできているファミコンの仕組み。今回は IchigoJam web での懸案でもある音に注目。非推奨となっているScriptProcessorNodeに替えて、AudioWorkletNodeでMMLプレイヤーを作ってみました。


「PAPU Sound Test with AudioWorkletProcessor」
src on GitHub
まず「START Sound Engine」ボタンを押して、再生開始。その下に並ぶボタンを押すと鳴ります。IchigoJam MML仕様に沿った、シンプルなMML、変更していろいろ鳴らしてみましょう。音の感じはプログラム内の設定でいろいろ変えられます。

8bit RISCアーキテクチャのCPUに内蔵されていた音源pAPU(pseudo Audio Processing Unit / 疑似音処理装置)に、短いデータを渡すことであの特徴的なピコピコ音を奏でています。JavaScriptで作られたファミコンを再現するプログラム「JSNES」にあるESモジュール papu.js をそのまま使って実装しています。音源のレジスタを直接叩いてる感じです!

旧来のScriptProcessorNodeと違って、バックグラウンドで動くワーカーによって実装するAudioWorkletNodeとAudioWorkletProcessorはちょっとややこしくなっています。


「Noise Sound Test with AudioWorkletProcessor」
src on GitHub
シンプルな音量コントロールできるノイズ音です。TLS上で動かす必要がある点に注意です!(forkして GitHub Pages を設定して表示すればOK!)

レッツ、メイク、オリジナル音源!

links
- ファミコンから学ぶコンピューター
- GPU音源で遊ぼう!GLSL x WebAudioでつくるリズムマシン
- WebMMLβ コンピューター言語でつくるかんたん音楽
- 音の正体とプログラム作曲 / はじめてのプログラミングその8

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS