Raspberry Piを使ったシンセ「minisynth」を動かしてみた

「circle」というRaspberry Piのベアメタルプログラミング用ライブラリがあります。

rsta2/circle: A C++ bare metal environment for Raspberry Pi with USB

このライブラリを使ったRaspberry Pi用のソフトシンセがあったので動かしてみました。
(このライブラリの作者さん自身が作られています。)
マルチコアに対応しており、Pi2やPi3では同時発音数が増える(24音)そうです。
リポジトリはこちらです。

rsta2/minisynth: A virtual analog synthesizer for Raspberry Pi

音の出力先はHDMIではなくオーディオ出力端子なので、オーディオ出力が無いPi Zeroでは動きません。私はPi2で動かしてみました。

git clone https://github.com/rsta2/minisynth.git minisynth
cd minisynth
git submodule update --init

で一式をダウンロードした後、

./configure 2 arm-none-eabi-
./makeall clean
./makeall

でビルドします。1行目の「2」はRaspberry Pi2を表します。初代PiおよびPi3では、それぞれ「1」「3」を指定します。

src/kernel7.imgがビルドされたバイナリです(Pi, Pi3はkernel.img、kernel8.imgになります)。
このファイルおよび定番のファームウェア(start.elf、bootcode.bin、fixup.dat)をSDカードへコピーします。

また、音色(patch0.txt)とベロシティカーブの設定ファイル(hard, linear, notouchのいずれか)がconfig/にありますので、これもSDカードへコピーしておきます。
音色は1ファイル1音色で、今のところ1つしか用意されていないようです。

HDMIにディスプレイ、USBポートにマウスとキーボード、Raspberry Piのオーディオジャックにヘッドホンかスピーカーを接続して起動します。マウスはパラメータ設定の変更、キーボードは音出しのために必要です。USB MIDIキーボードがあれば、それも接続できるようです。

シンセサイザー自体はシンプルな1VCO、1VCF、1VCAのバーチャルアナログシンセです。
画面を見れば一目瞭然ですが、それぞれ専用のLFOを持ち、VCFとVCAはADSR型のエンベロープが付きます。
VCOはSin、矩形波、SAW、三角波およびデューティ比の異なるパルス波2つが使えます。
VCFはレゾナンスつきのローパスフィルタです。

出音は、昔のソフトシンセみたいな感じです。
矩形波とSAWの出力波形を見てみます。

フィルタはカットオフ最大、レゾナンス最小ですが、どちらの波形も立上がり・立下りがローパスを通したみたいな感じになっています。

音声出力がPWMですので、出力にローパスフィルタがあります。
回路を見ると0.1μF+100Ωの構成ですので、カットオフ周波数は15KHzくらいです。波形のなまりは、この影響を受けている可能性もあります。

VCOの実装をちょっと見てみましたが、波形生成はSin波については単純なウエーブテーブルで、生成する周波数に応じて読み出し位置を変えています。それ以外の波形は計算で波形を生成しています。
このあたり、たとえば有名なフリーのソフトシンセであるSynth1は、エイリアスノイズを出さないように、ウエーブテーブルであっても周波数ごとに調整したテーブルを持っていたりします。

シンセプログラミング

ハードウェアの面では、PWMでなくI2S+DACを用いたいところですね。
音質的にも性能的にも工夫の余地は大いにありそうです。

αJuno-2から取り外した30年前の電解コンデンサの劣化具合を調べてみた

esr3.jpg

先日、電解コンデンサを交換したαJuno-2の音が「良くなった気がする」と書きましたが、逆に言うと交換前の音は悪かったのでしょうか。

電解コンデンサは経年劣化します。寿命は温度に依存しますが、10年かそこら、とも聞きます。
劣化具合は、容量の減少ではなく「ESR(等価直列抵抗)の増大」という形で現れるそうです。

ニチコンの資料から、ESRに関する部分を引用します。

esr1.jpg

ESRの値は低いほうが良いとされていますが、値は電解コンデンサの容量や耐圧によって異なります(いずれも大きいほうが低い)。

ESRがきちんと測定できる容量計は高価ですが、マイコンを使った簡易型の測定器がAmazonマーケットプレイスから入手できます。
「LCR-T4H」という型番のもので、ググるとたくさんの人が入手して試しているのが分かります。
880円でしたので、私も購入してみました。

これを使って、αJuno-2から取り外した電解コンデンサの容量とESRを測定した結果を以下に示します。
表の左側が測定値、右側が定格値です。
また、青のセルは無極性タイプで、黄色のセルは今回新品で購入したもの(間違って多めに買ってしまったので余っていました)です。

esr5.jpg

新品は22μFしかないのですが、ESRは同じ容量の古いコンデンサに比べて1/2程度の値になっています。

esr4.jpg

新品を除くデータを、横軸に容量、縦軸にESRをとって両対数グラフにしてみました。

esr6.png

きれいに反比例関係になっていますが、この反比例関係が新品でも成り立つとすると、22μFのESRが2倍になっていることから考えて、おそらく他の容量のコンデンサも、新品の2倍程度のESRになっているのではないかと思われます。

αJuno-2の回路では、コーラスも含めるとカップリングコンデンサを5回通過していますので、少なくとも出力が微妙に低下するという影響はあったと思われます。

一方、容量についてはほとんどのコンデンサが定格値を上回っており、劣化はほぼありませんでした。
電源に使われていた大容量のコンデンサはESRも低いので、電源系については交換の必要はなかったかもしれません。

続・αJuno-2の電解コンデンサを交換

先日行ったαJunoの電解コンデンサ交換ですが、音を聴いているうちに低音のパワーが増したような気がしてきました!
おそらく心理的な要因だと思いますが、オーディオのマジックですね・・・

しかしモチベーションは湧いたので、追加で前回書いたように音声の通る経路のカップリングコンデンサも交換してみました。
まず、メインボードはDCOから各チャネルのVCF/VCAチップへ接続される部分と、各VCF/VCAの出力を加算するオペアンプの出力部分の2箇所(下図の赤丸の部分)です。
ただし前者は6音ポリなので6個の交換が必要です。また、後者は無極性のコンデンサが必要です。

mainboard.png

下の写真のように、メインボードが格納されるスペースは天井が低いので注意が必要です。

mainboard-and-keyboard.jpg

このスペースに納めるために、αJuno-2のメインボードは背が低くなるように作られていたようです。
元のコンデンサ(写真上)は高さ7.5mmのものが使われていました。

condensers.jpg

しかし、これから交換するコンデンサは12.5mmくらいあります。
そのため、少しコンデンサを倒して取り付けました。

交換前:

main-before.jpg

交換後:

main-after.jpg

コーラスモジュールにも電解コンデンサが使われていますので、これも一部交換しました。
音声信号の通り道では、コーラスへの入力側で信号をバッファしたオペアンプの出力と、コーラスの出力側で信号を増幅するオペアンプの入り口と出口にカップリングコンデンサがあります。(下図の赤丸の部分)
出力側は無極性のコンデンサが使われています。
そのほか、電源周りなど数箇所を交換しました。(下図の緑丸の部分)

chorus-module.png

交換前:

chorus-before.jpg

交換後:

chorus-after.jpg

電源モジュールについても、前回の分(下図の青丸部分)に追加で出力側のコンデンサ(赤丸部分)を交換しました。

power-module.png

交換前:

ajuno-electrolytic-capacitor.jpg

交換後:

power-after.jpg

さて、これで音が良くなったかというと・・・うん、(主観的には)良くなりました!多分!きっと!
・・・気のせいだとは思いますが、悦に入っています。
ちなみに費用は、前回の分と合わせてもパーツ代で1500円程度でした。