Skip to content

本家 sample2 の 1ch MIDI ドライバを Raspberry PI ALSA 16ch MIDI ドライバ(ユーザランド)化するものです。

License

Notifications You must be signed in to change notification settings

ChikaraWakaura/ymf825drv

Repository files navigation

1. 概要

本家 sample2 の 1ch MIDI ドライバを Raspberry PI ALSA 16ch MIDI ドライバ(ユーザランド)化するものです。
標準ドラムパート MIDI ChNo.9(0基点) は通常音色です。

2. ハード編

最大の難問が R0 剥がし S1 盛りです。 S1 盛りがクラック、ボイドなしか目視確認不能ですので気合い入れます(笑) R0剥がし S1盛り

Raspberry PI との配線は以下のとおりです。

ymf825board    Raspberry PI
1 SS --------- 22 GPIO25  
2 MOSI ------- 19 GPIO10 SPI0 MOSI  
3 MISO ------- 21 GPIO 9 SPI0 MISO  
4 SCK -------- 23 GPIO11 SPI0 SCLK  
5 GND --------  6 GND  
6 5V ---------  2 VCC(+5V)  
7 RST_N ------ 36 GPIO16  
8 Audio ------ NC  
9 3.3V -------  1 VCC(+3.3V)  

ブレッドボードで基礎的動作確認が終わりましたので他実験で使用していた秋月ユニバーサル基板
一度フリーにしてから配置、配線しました。 表面 背面

ymf825board に付属しているミニジャックは 100 回抜き差し試験に耐えられそうにない感じ(笑)
なので RCA 端子より疑似ステレオ出力としました。 通電全景

小生は Raspberry PI 3 model B で実験しました。

$ uname -a
Linux raspi-002 4.14.84-v7+ #1169 SMP Thu Nov 29 16:20:43 GMT 2018 armv7l GNU/Linux

3. ソフト編

機能 説明
16ch 機能追加(ChNo.9 は非標準ドラムパート)
CC7 MASTER VOL -> ChVol に変更
CC11 機能追加
CC121 機能追加
CC120 機能追加
CC123 機能追加
ファイル名 関数名 説明
fmasgn.c 変更なし
fmif.c Fmdriver_init() 本タイミングへ Asgn_init() と Tone_init() を移動(CC121に関連),16ch 初期化処理へ変更
fmif.c generateMidiCmd() 16ch 処理へ変更
fmnote.c Note_damp() 16ch 化に伴いリンクリスト破壊後のリンクはまり対策
fmnote.c Note_chgChVol() 追加
fmnote.c Note_chgExpression() 追加
fmpart.c Part_cc11() 追加
fmpart.c Part_init() Asgn_init() と Tone_init() を削除(CC121に関連)
fmpart.c Part_cc() CC7 変更, CC11,CC121,CC120,CC123 追加
fmsd1_raspi.c writeSingle() bcm2835_spi_transfern() へ変更
fmsd1_raspi.c readSingle() 追加
fmsd1_raspi.c writeBurst() bcm2835_spi_transfern() へ変更
fmsd1_raspi.c delayMs() 秒込みウェイト指定化へ変更
fmsd1_raspi.c initSPI() RST ピン出力定義追加
fmsd1_raspi.c initSD1() 9,25 レジスタ書き込み定義見直しと変数化
fmtone.c 変更なし
fmvoice.c Fmvoice_keyon() VoVOL 設定見直し , ChVol CC7 化 , Part_toneNumber() 設定見直し
fmvoice.c Fmvoice_damp() 16ch 化に伴いリンクリスト破壊後のリンクはまり対策
fmvoice.c Fmvoice_chgVibDpt() XVB 設定見直し
fmvoice.c Fmvoice_chgChVol() CC7 対応(ChVol 利用のため CC11 とレジスタ共有)
fmvoice.c Fmvoice_chgExpression() CC11 対応(ChVol 利用のため CC7 とレジスタ共有)
ymf825drv.c 新規
ファイル名 説明
fmasgn.h 変更なし
fmboard.h 変更なし
fmif.h デファイン追加
fmnote.h プロトタイプ宣言追加
fmpart.h プロトタイプ宣言追加
fmsd1.h プロトタイプ宣言追加
fmtone.h 変更なし
fmtype.h 変更なし
fmvoice.h プロトタイプ宣言追加

4. 動作確認

SPI を必要とします。

$ cat /boot/config.txt | grep spi
dtparam=spi=on

libbcm2835 を必要とします。

$ wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.57.tar.gz
$ tar zxvf bcm2835-1.57.tar.gz
$ cd bcm2835-1.57/
$ ./configure
$ make
$ sudo make install

libasound2-dev を必要とします。

$ sudo apt-get update
$ sudo apt-get install libasound2-dev

メイクと実行

$ cd ymf825drv
$ make clean;make
$ sudo ./ymf825drv -v
Initialize SPI.
Initialize YMF825.
Dump YMF825 Register
     : +0 +1 +2 +3 +4 +5 +6 +7 +8 +9
0000 : 01 00 00 01 01 00 00 00 00 84
0010 : 00 00 00 00 00 00 00 00 00 00
0020 : 00 00 00 00 00 CC 00 3F 00 01
YMF825 Communication checking...
YMF825 Communication check complete.
Initialize FM Driver.
YMF825 MIDI Driver Version 0.1.0 ready.
ALSA MIDI Port(128:0) 'YMF825 MIDI' ready.
Enable MIDI Channel. 0123456789ABCDEF
                     1111111110111111

上記のような表示が出て待機になると OK です。
Ctrl + C で停止します。
利用可能なオプションは -h で確認できます。

レジスタダンプ値違いまたは以下の表示の場合は配線再確認、電圧、電流確認です。

YMF825 Communication checking...
R/W Failed : Write(xx) Read(yy)

他ターミナルより以下コマンドにて YMF825 MIDI ポートの存在確認が出来ます。

$ aplaymidi -l
 Port    Client name                      Port name
 14:0    Midi Through                     Midi Through Port-0
128:0    YMF825 MIDI                      YMF825 MIDI

ポートとファイル指定にて MIDI 再生可能です。

$ aplaymidi --port=128:0 hogehoge.mid

5. 応用編

raveloxmidi & rtpMIDI 利用の場合は以下のようになります。

$ sudo modprobe snd-virmidi
$ amidi -l
Dir Device    Name
IO  hw:0,0    Virtual Raw MIDI (16 subdevices)
IO  hw:0,1    Virtual Raw MIDI (16 subdevices)
IO  hw:0,2    Virtual Raw MIDI (16 subdevices)
IO  hw:0,3    Virtual Raw MIDI (16 subdevices)

$ aplaymidi -l
 Port    Client name                      Port name
 14:0    Midi Through                     Midi Through Port-0
 16:0    Virtual Raw MIDI 0-0             VirMIDI 0-0
 17:0    Virtual Raw MIDI 0-1             VirMIDI 0-1
 18:0    Virtual Raw MIDI 0-2             VirMIDI 0-2
 19:0    Virtual Raw MIDI 0-3             VirMIDI 0-3
128:0    YMF825 MIDI                      YMF825 MIDI

ポートを aconnect にて接続させます。

$ aconnect -x;aconnect 16:0 128:0;aconnect -l
client 0: 'System' [type=kernel]
    0 'Timer           '
    1 'Announce        '
client 14: 'Midi Through' [type=kernel]
    0 'Midi Through Port-0'
client 16: 'Virtual Raw MIDI 0-0' [type=kernel,card=0]
    0 'VirMIDI 0-0     '
        Connecting To: 128:0
client 17: 'Virtual Raw MIDI 0-1' [type=kernel,card=0]
    0 'VirMIDI 0-1     '
client 18: 'Virtual Raw MIDI 0-2' [type=kernel,card=0]
    0 'VirMIDI 0-2     '
client 19: 'Virtual Raw MIDI 0-3' [type=kernel,card=0]
0 'VirMIDI 0-3     '
client 128: 'YMF825 MIDI' [type=user,pid=803]
    0 'YMF825 MIDI     '
        Connected From: 16:0

以下のようなファイルを ~/.config に準備します。

$ cat ~/.config/raveloxmidi-vmidi.conf
service.name = ymf825
file_mode = 0666
inbound_midi = /dev/null
alsa.output_device = hw:0,0,0

raveloxmidi ファイル指定実行

$ raveloxmidi -N -c ~/.config/raveloxmidi-vmidi.conf

これで rtpMIDI が動作する環境より任意の MIDI 再生ソフトからの MIDI 再生が可能になり
YMF825 MIDI へ MIDI 出力可能となります。

6. その他

YMF825-MIDI.xml は Domino 向けファイルです。利用される場合は Domino\Module へ
ファイルコピーして Domino 環境設定より選択利用下さい。

ほんと懐かしの FM 音源の発音に酔いしれることが出来ますね(笑)

以上です。

About

本家 sample2 の 1ch MIDI ドライバを Raspberry PI ALSA 16ch MIDI ドライバ(ユーザランド)化するものです。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages