Skip to content

YoutechA320U/ysynth3

Repository files navigation

ysynth3

RaspberryPiとTimidity++を核にしたハードウェアシンセサイザーです。GM/GS/XG/エクスクルーシブのメッセージが使えます。

ライセンス

ysynth3は複数のソフトウェアで構成されています。他のソフトウェアのライセンスはそのソフトウェアの元々のライセンスに準じます。ysynth3のソースコードそのものはMITライセンスとなっています。

概要

RaspberryPi Zeroで動作するハードウェアシンセサイザーです。チャンネルごとにデータを送信、OLEDに表示するMIDIコントローラとしての機能と、チャンネルごとにデータを受信、OLEDに表示し、任意のサウンドフォント(.sf2)を鳴らせるMIDI音源としての機能、任意のMIDIファイルを自身や外部音源で演奏できるMIDIシーケンサーとしての機能を持ちます。

※作例です。このリポジトリのソースコードにMIDIキーボードに関係するコードは含まれていません。

SS

スペック

*GM/GS/XG/エクスクルーシブメッセージ対応*
*Timidity++ version 2.13.2*

システム:RaspberryPi Zero, Raspbian stretch Lite
パート数:16
最大同時発音数:64
音源:サウンドフォント(.sf2) ※任意の数のファイルを追加可能
サンプリングレート:32000Hz
本体で操作、表示できるMIDIメッセージ:プログラムチェンジ、ボリューム、エクスプレッション、パン、モジュレーション、リバーブ、
                                  コーラス、ディレイ、ピッチベンド
ディスプレイ:16x2有機ELディスプレイ
接続端子:microUSBTypeB-MIDI端子(OTG接続可)、3.5mmステレオオーディオ出力端子、モノラルスピーカーアンプ(1W級)
電源:DC5V1A(RaspberryPiのmicroUSBTypeB)
シーケンサー:MIDIファイルを再生可能 ※任意の数のファイルを追加可能

開発環境

OS : Raspbian stretch Lite
RaspberryPi : RaspberryPi ZeroWH,RaspberryPi 3B+
Python : ver2.7 and ver3.5

回路図

SS

必要な部品

※基板やピンソケット、つまみは除く

部品名 型番など 数量
RaspberryPi RaspberryPiZeroWH 1
micoSDカード クラス10またはUHF-1以上かつ16GB以上 1
I2S接続オーディオDAC Pi-DAC+相当のDAC(Pi-DAC Zeroなど) 1
I2C接続16x2有機ELディスプレイ SO1602 1
ロータリーエンコーダ EC12E2420801 4
タクトスイッチ TVGP01-G73BBなど 1
小型スピーカー 1
アンプモジュール PAM8012使用2ワットD級アンプモジュール 1
半固定抵抗 10kΩ 1
ミニジャック 3.5mmステレオスイッチ付き 1

インストール方法

※OSはRaspbian stretch Lite前提です。インストールの時のみ、より高性能なRaspberryPi 3B+を使うことをおすすめします。

  1. RaspberryPiをネットワークに接続して以下のコマンドを実行します。

    sudo apt-get update

    sudo apt-get upgrade -y

    sudo apt-get install -y git

    git clone --recursive --depth 1 https://github.com/YoutechA320U/ysynth3.git

  2. 何らかのエディタで/boot/cmdline.txtの末尾に改行せずにmodules-load=dwc2,g_midiを追加します。

  3. cd /home/pi/ysynth3でカレントディレクトリをysynth3に移動します。

  4. sudo python3 setup.pyでセットアップスクリプトを実行します。完了すると自動的に再起動します。

  5. 有機ELディスプレイにメッセージが表示されたら完了です。

操作方法

ロータリーエンコーダ1(回路図中のRoEn1)でディスプレイ上段に表示される値を、ロータリーエンコーダ2(回路図中のRoEn2)でディスプレイ下段に表示される値を操作します。

ロータリーエンコーダ3(回路図中のRoEn3)で本体のモードを変更し(ディスプレイのページ送りのようなイメージ)、ロータリーエンコーダ4(回路図中のRoEn4)でシステムボリュームを操作します。システムボリュームは常に変更できますが、ディスプレイにシャットダウンかリロードの確認が表示されている時のみ2行目に変化が表示されます。

また押しボタンスイッチ(回路図中のPUSHSW)でMIDIファイルの再生/停止、サウンドフォントの決定、シャットダウン、Mass_Storageモードへの切り替え及びシステムのリロードの決定を行います。

押しボタンスイッチをチャンネル、インストゥルメント、コントロールチェンジがディスプレイに表示されている時に押すと全チャンネルにノートオフメッセージが送信されます。

使い方

  1. 電源につなぐとまずサウンドフォントの選択画面になります。この時はロータリーエンコーダ2以外のロータリーエンコーダは動きません。

※サウンドフォントが全くない場合は自動的に3に進みます。

SS

  1. ロータリーエンコーダ2でサウンドフォントを選択して押しボタンスイッチで決定します。

  2. チャンネルとインストゥルメント(プログラムチェンジ)が表示されたら操作可能になります。

SS

  1. ロータリーエンコーダ3でモードを切り替えて上段にOTG_Mode_Change?と表示されている時に押しボタンスイッチを押すと下段にmass_storageと表示されます。この間は一切の機能が停止し、OTG機能で他のパソコンなどとUSB接続すると4GBのUSBメモリーとして認識されます。

SS

SS

SS

この時にmidiフォルダに標準MIDIファイル(拡張子 .mid)を、sf2フォルダにサウンドフォント(拡張子 .sf2)を入れる事ができます。もう1度押しボタンスイッチを押すとディスプレイ下段にysynth3_Restartと表示されシステムがリロードされ、フォルダの変更が反映されます。この時必ずパソコン側で取り出し、アンマウントを行ってから、押しボタンスイッチを押してください。

※異なる拡張子のファイルは認識されません。また、大文字の場合も認識しないので気をつけてください。仕様上ファイルの移動はそこそこ時間がかかります。

備考

OTG機能で他のパソコンなどとUSB接続する場合はUSBメモリー状態以外では「MIDI function」または「MIDI Gadget」という名前で認識されます。

システムのリロードはysynth3のスクリプトとTimidity++をリセット、再起動します。また、サウンドフォントを変更した場合はTimidity++のみが再起動します。

動作がおかしくなった場合、どちらを行っても症状がが改善しない場合は1度シャットダウンをして電源を入れ直してください。

RaspberryPi Zeroのメモリは512MBなので、サウンドフォントのサイズは1つあたり200MB程度までにしてください。あまり大きいサイズのサウンドフォントだとメモリ不足で音飛びやフリーズが発生する可能性があります。

MIDIファイル、Timidity++の設定ファイルに使える文字はso1602.pyに依存します。対応していない文字をファイル名に使うとディスプレイにName_Errorと表示されるので修正してください。(選択はできます)

SS

参考コード・資料

履歴

[2018/10/11] - リポジトリ立ち上げ
[2018/12/31] - 初回リリース(Ver.1)
[2019/01/01] - いくつか追記
[2019/01/03] - ライセンスを明記
[2019/01/12] - Timidity++_cfgファイルを自動生成に変更
[2019/01/17] - 動作のオフライン化、各種不具合(仕様)を修正(Ver.2)
[2019/01/17] - 細かな仕様変更を行いました(Ver.2.1)