シンセサイザーをDIYで作ってみる・第6弾

Created Date: 2016-06-11/ updated date: 2018-03-13
    Owner & Collaborators
    License
    Summary
    シンセサイザー(音源モジュール)をDIYで作ってみるプロジェクトの第6弾。プラットフォームは未定。過去作品の情報はコチラ: http://risgk.github.io/

    Memo

    シンセ開発ログ 2016-06-12

    posted by risgk on June 12, 2016
    シンセ開発ログ・第6弾を書き始めてみる。

    2ヶ月後のMaker Faire Tokyo 2016には「Digital Synth VRA8-P」(第5弾の作品。8ビットCPUシンセとしては第4弾)を出品予定。いくつかアイデアがあるので、「VRA8-P」のバリアントを作ろうかとも考えたけれど、やめにした。「VRA8-P」を展示会に出すのは初めてだし、ひとりで複数作品の説明をするのは大変そうなので。(演奏環境も1台分しかない)アイデアは、次の作品(コレ)に活かす方向で考えたい。


    最近試したこと、考えたことを簡単にメモっておく。

    mrubyボード「Wakayama.rb ボード(GR-CITRUS)」で音を作れるか? ちょっと難しそう。変数のインクリメントに1マイクロ秒とかかかる感じなので……。


    以前にもTumblrに書いたけれど、「Opal (Ruby to JavaScript Compiler) + Web Audio API + Web MIDI API + Raspberry Pi 2/3」でシンセを作る、というアイデア。(Raspberry Piを使うというのは新アイデアかも? 無理やり「電子工作」に絡めている気がするけれど、まあOK)

    問題は、廃止予定のScriptProcessorNodeと、まだChromeにも実装されていないAudioWorker。敢えて標準のノードだけで音を作る、という方針もあり得るけれど、この場合「Rubyでサウンドプログラミング」する意味が薄れてしまう。(「Digital Synth WRA32」では、JavaScriptでScriptProcessorNodeを全面活用していた。音質はあまり良くなかったが……)

    mohayonaoさんのAudioWorkerShim(「AudioWorker を試してみる - Qiita」 http://qiita.com/mohayonao/items/ce357230946cfa2303c2 )を使う手もある。(まだ、試していない)AudioWorkerが導入されれば恐らくレイテンシが小さくなるので、それは嬉しい。(理想的には「3ミリ秒」くらい)

    あと、シンセをWebアプリにする場合、あまり無茶な音は出せない気がする。Arduino(電子工作)の範囲の場合はプツ音とか、そこまで気にしなくてよい感覚がある。


    ぷにょぷにょキーボードが面白そう。「Friedlander Violin を Xkey MIDI キーボードで演奏 - YouTube」 https://www.youtube.com/watch?v=mLbUVNvqIQ8 の動画が良かったので、CME Xkeyを買ってみた。(QuNexusやSeaboard RISEも同じような感じ?)「VRA8-P」からEGを取っ払って、アフタータッチをメインに演奏できるのも面白いかもしれない。

    しかし、CME Xkeyのようにベロシティ=圧力値なキーボードと、通常のベロシティ&アフタータッチ対応キーボードの両方で使用されることを考えると、色々面倒な気がする。


    以下、主に「VRA8」シリーズ(Arduinoのための8ビットCPUシンセ)についてのアイデア。

    「VRA8-P」のサンプリングレートを今までの2倍の「31250 Hz」に変更してみる:モノフォニックで「オシレーター2つ + フィルター」ならCPUパワーが足りそう。確かに、ある種の音質は改善されるけれど、やれることは少なくなる。保留かな……。(ローファイ路線を継続)

    「VRA8」シリーズの波形テーブルの16ビット化:量子化ノイズを低減できるかも。CPU消費は大きくなる。

    PWMを2つ使用することで、出力の分解能を8ビットよりも細かくする:魅力的ではあるけれど、少し回路が複雑になる。「誤差拡散」を利用してダイナミックレンジを大きくする、のほうが好み。

    フィルターでレゾナンスを上げられるようにコンプレッサを導入:音の歪み(エイリアスノイズ)が怖かったのでこれまでやっていなかった。が、アリかもしれない。

    オシレーターの周波数に「ゆらぎ」を与える:「VRA8-X」でホワイトノイズを使ってゆらぎを与えたところ、あまり良い音にならなかった。本来はピンクノイズで「1/fゆらぎ」にすべきか。

    ゆらぎを作るため、新たに「ホワイトノイズを足し算する(=単純移動平均フィルターを通す)」というネタを考えた。どうだろう? 位相カウンタが荒い(16ビット)ことも問題。24ビットに変更する方向で。(低音域のチューニングも改善されるはず)

    Comments