私は最初のコンピューターである Commodore VIC-20 エミュレーターを作成するというばかげた考えを思いつきました。
サウンド エミュレーションの時間が来るまで、すべてが順調に進んでいます。VIC-20 には 3 つのボイス (方形波) とノイズ スピーカーがあります。ネットを検索すると、PNジェネレーター(「ホワイト」ノイズと呼ばれる場所)であることがわかりました。
ホワイト ノイズは周波数駆動型ではないことはわかっていますが、ノイズ レジスタに特定の周波数値を入力します (POKE 36877,X
コマンド)。式は次のとおりです。
周波数 = cpu_speed/(127 - x)
(VIC-20 Programmer's Guida、特に MOS6560/6561 VIC-I チップの詳細)
ここで、x はノイズ レジスタの 7 ビット値です (ビット 8 はノイズのオン/オフ スイッチです)。
事前に生成された 1024 の数字のバッファ (疑似乱数シーケンス) があります。問題は、周波数 (freq) を関連付けて、サウンド カードに渡すサンプル バッファを作成するにはどうすればよいか (この場合はsf::SoundBuffer
、sf::Int16
(別名unsigned short
)値?
ほとんどの人はコモドール VIC-20 または C64 を家に持っていて、古い説明書で遊んでいたとPOKE
思います...このステップを理解するのに誰か助けてくれませんか?
編集:
インターネットで検索すると、ノイズジェネレーターの波形グラフを示すC64 Programmer's Guidaを見つけました。この種の波/摂動などを認識できる人はいますか...? 波形は周期的 (freq の周期) のように見えますが、どのようにしてそのような波形を生成するのでしょうか?