1995年にAVIDに買収された、digidesignのUSBオーディオインタフェースMbox2をLinuxで使用するために入手しました。
が、現行の機器ではFirmware Updateできなくて困ったので、Update成功までの試行を記録しておきます。
※試行順に時系列で記載してますので、冗長な記述となっていますが、Mbox2のFirmware UpdateにはWindowsXPの実機を用意して特定のソフトウェア環境で実行すべしというのが結論です。
Mbox2
Mbox2は2005年発売で2010年にディスコンになった製品で、とっくにサポートは終了しています。AVIDからダウンロード可能なドライバはWindows8.1までに対応したものが最終で、Windows10は対応OSに含まれていません。振り返ってみれば発売時点(2005年)の最新OSはWindowsXP、終売の2010年時点ではWindows7が最新でしたので、これでも結構長期間サポートしてくれた方かもしれません。
なお、Mbox2の製品としてのスペックは最高48KHz/24bitサンプリングですが、A/DもD/Aも実は192KHzまで対応したチップが使用されています。具体的には以下のキーパーツが使用されています。
Role | Manufacturer | Product |
---|---|---|
A/D Converter | Cirrus Logic | CS5361 |
D/A Converter | Cirrus Logic | CS4392 |
S/PDIF Transceiver | Cirrus Logic | CS8427 |
USB Controller | Texas Instruments | TUSB3200C |
24bit/48KHzの場合、アナログ入出力2chとデジタル(S/PDIF)入出力2chを同時使用すると、24*48000*(2+2+2+2)=9216000[bit/sec]で約9Mbpsのデータ転送帯域が必要です。これが96KHzなら2倍の約18Mbps、192KHzなら4倍の約36Mbpsの帯域が必要です。Mbox2が対応するUSB1.1のFullSpeedでは12Mbpsまでしか出ませんから、USBの帯域がボトルネックとなりA/DC及びD/ACのスペックを活かしきることなく、最高48KHzまでのサンプリング周波数としたのでしょう*1 (かつての一部のRoland(EDIROL)製品のように、入力だけ或いは出力だけしか使えない代わりにサンプリング周波数を上げるような機能はありません)。
蛇足ながらMbox2発売前年の2004年にはAVIDはM-Audioも買収していることから、Mbox2にはM-Audioの知見も多少は活かされているのかもしれません。と、思ったのですが、当時のM-Audioの多くの製品ではA/DCやD/ACには旭化成(AKM)のチップが採用されていましたので、あまり設計や調達の共通化はされていなかったようですね。その後、M-Audioは2012年にinMusic Brands*2に買収されているため、現時点ではdigidesignとM-Audioは無関係です。
Linuxサポート
digidesign公式とは無関係にMbox2はかなり昔*3からALSAドライバが存在し、(無保証ながら)Linuxでも使えます。
Digidesign Mbox 2: Linux driver provided! – ZamAudio.com
現在もUSB Audioのソースコード中にsnd_usb_mbox2_boot_quirk()というMbox2用のQuirkが存在することが確認できます。
quirks.c « usb « sound - kernel/git/torvalds/linux.git - Linux kernel source tree
この中でmbox2_setup_48_24_magic()という関数を叩いており、名称から察せられる通り量子化ビット数24bit、サンプリング周波数48KHzに固定された動作となるようです。
ですが、このコードが前提とするMbox2のFirmware versionは1.43*4である必要があり、古いFirmwareでは動作しません。
このため、Linux環境下での利用を目的としてFirmware Updateをしたいユーザーは近年でも居るようですが、更新できないという悲鳴が公式フォーラムの書き込みでも見つかります。
need help updating mbox2 firmware to v1.43 - Avid Pro Audio Community
以下のページにはステップバイステップでUpdate手順が紹介されています。が、WindowsXP環境のディスクイメージを用意してVMを使うとか、実機を用意する必要があるようです。
How to upgrade the firmware of an old MBox 2 so it will work in Linux · GitHub
Ubuntu20.04環境に繋いでみる
入手したMbox2のファームウェアバージョンも解らないですので、とりあえずUbuntu20.04のPCに繋いでみたところ、dmesgには以下のような出力がありました。
[ 92.096626] usb 1-2: new full-speed USB device number 7 using xhci_hcd [ 92.280366] usb 1-2: config 1 interface 2 has no altsetting 1 [ 92.280382] usb 1-2: config 1 interface 3 has no altsetting 1 [ 92.280392] usb 1-2: config 1 interface 4 has no altsetting 1 [ 92.280401] usb 1-2: config 1 interface 5 has no altsetting 1 [ 92.284260] usb 1-2: New USB device found, idVendor=0dba, idProduct=3000, bcdDevice= 1.24 [ 92.284279] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 92.284291] usb 1-2: Product: Mbox 2 [ 92.284303] usb 1-2: Manufacturer: Digidesign [ 92.435615] mc: Linux media interface: v0.10 [ 97.609427] usb 1-2: Unknown bootresponse=1, or timed out, ignoring device. [ 102.729873] usb 1-2: Unknown bootresponse=1, or timed out, ignoring device. [ 107.850101] usb 1-2: Unknown bootresponse=1, or timed out, ignoring device. [ 112.969966] usb 1-2: Unknown bootresponse=1, or timed out, ignoring device. [ 118.090149] usb 1-2: Unknown bootresponse=1, or timed out, ignoring device. [ 123.209913] usb 1-2: Unknown bootresponse=1, or timed out, ignoring device. [ 128.330100] usb 1-2: Unknown bootresponse=1, or timed out, ignoring device. [ 128.330369] usbcore: registered new interface driver snd-usb-audio
Digidesign Mbox2が接続されたことはしっかり認識されています。また"bcdDevice= 1.24"と出ていますが、これがファームウェアバージョンに相当するようで、すなわちALSAでサポートしていないバージョンです。
"Unknown bootresponse=1, or timed out, ignoring device."の出力が複数繰り返されているのも、前掲のquirks.cのソースコードの挙動そのものです。bootresponse=2が返ってくることを期待していますが、Firmware version 1.24では延々と1が返ってくるようです。
とは言え末尾に”registered new interface driver snd-usb-audio”とも出力されています。もしかして使えたりするかと淡い期待をしてみましたが、そんなことはありませんでした。PCM録音・再生デバイスも、RawMIDIデバイスもAlsaSequencerポートも、(元から存在するデバイスを除き)何も認識されていません。
$ arecord -l **** List of CAPTURE Hardware Devices **** card 0: chtbswrt5672 [cht-bsw-rt5672], device 0: 3 [] Subdevices: 1/1 Subdevice #0: subdevice #0 $ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: chtbswrt5672 [cht-bsw-rt5672], device 0: 3 [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: chtbswrt5672 [cht-bsw-rt5672], device 1: Deep-Buffer Audio (*) [] Subdevices: 1/1 Subdevice #0: subdevice #0 $ amidi -l Dir Device Name $ aconnect -l client 0: 'System' [type=kernel] 0 'Timer ' 1 'Announce ' client 14: 'Midi Through' [type=kernel] 0 'Midi Through Port-0'
Windows10でUpdate試行⇒失敗
先述のステップバイステップのUpdate手順を参考に、手元にあるなるべく古いPCで試してみることにしました。
Windows7だと思っていた古いノートPCを引っ張り出してきたのですが、無償アップデートに釣られてWindows10に更新済みでした。もう使ってないPCですので、古いドライバやソフトウェアを無理に突っ込んで環境を壊してしまっても実害は無いので、とりあえずこのPCで試してみました。
- Protools 7LE(ptle70_28754.zip)のインストール⇒できた
- インストールプロセス中のドライバインストール⇒Mbox2が認識されずできない
- Firmware Updater(Mbox2firmware_v143_Win_33125.zip)の実行⇒Mbox2が認識されずできない
- Program Files (x86)\digidesign\Driversにあるドライバ(*inf)の手動インストール⇒署名が無くてできない
- Firmware Updater(Mbox2firmware_v143_Win_33125.zip)の再実行⇒Mbox2が認識されずできない
- Windows8.1用ドライバ(Mbox_2_USB_Family_v90265_Drivers_70922.zip)インストール⇒できた
- Firmware Updater(Mbox2firmware_v143_Win_33125.zip)の再実行⇒Mbox2が認識され、現在バージョンの確認ができるようになったが、Updateはできない
以上より、公式フォーラムの書き込みで報告されているように、Windows 10でMbox2のFirmware Updateは出来ないようです。もし、Mbox2をWindows10で使用したいだけなら、ドライバ署名の強制を無効化すればWindows8.1用ドライバで自己責任で動かすことはできそうです。
OSX ElCapitanでUpdate試行⇒失敗
AVIDのサイトにはOSX用のFirmwareUpdaterも掲載されていたので、もう何年も使っていないMacbookProで試してみました。
- OSXのバージョン確認
- ドライバ(Mbox2USBFamily_10_3_9_Mac_83297.dmg)インストール⇒できた
- 設定画面を開く⇒Mbox2が認識されていない
- Firmware Updater(Mbox2firmware_v143_Intel_33123.dmg)の実行⇒Intel用を実行しているにもかかわらずPowerPCアプリと認識され実行できない
以上より、OSX(El Capitan)ではMbox2のFirmware Updateも使用も出来ないようです。
というわけで、詰みました。WindowsXPの実機を用意してUpdateを試すほか無さそうです。
その他
Windows版UpdaterにFirmwareが含まれてない説⇒嘘
Windows版Updaterは実行ファイル(mbx2dfu.exe)だけでファームウェアファイルが無いし、exeも小さいからFirmwareそのものが含まれていないのでは?或いは、"Failed to download firmware"のメッセージからダウンロード元のURLが死んでいるのでは?説が散見されましたが、それはありません。実際にはexe中にファームウェアのバイナリは含まれています。
OSX用Firmware Updaterのdmgを展開すると、PPC版でもINTEL版でも同一の7945bytesのFirmware.binが存在します。Windows版Updaterのmbx2dfu.exeの0xCB28以降の7945bytesにもOSX用dmgから抽出したFirmware.binと完全一致するバイナリが含まれています。このFirmware開始アドレス0xCB28やファームウェアサイズ7945(0x1F09)もmbx2dfu.exeにリトルエンディアンで格納されており、常識的に考えればUpdaterのプログラム中で有意に使用されていると考えられます。
# Extract Firmware from mbx2dfu.exe $ dd ibs=1 skip=$((0xcb28)) count=7945 if=mbx2dfu.exe of=extract.bin # Check the integrity with extracted binary and firmware.bin which is extracted from Updater for OSX $ sha256sum extract.bin 125ded78541ca97c483b3bfc0a0d8c2e5ddfdc3a811bda7e817b82a3b8b394f0 extract.bin $ sha256sum ./intel/firmware.bin 125ded78541ca97c483b3bfc0a0d8c2e5ddfdc3a811bda7e817b82a3b8b394f0 ./intel/firmware.bin $ sha256sum ./ppc/firmware.bin 125ded78541ca97c483b3bfc0a0d8c2e5ddfdc3a811bda7e817b82a3b8b394f0 ./ppc/firmware.bin # Find the firmware start address (0xCB28) itself from mbx2dfu.exe $ hd mbx2dfu.exe | grep "28 cb" 0000ea40 09 1f 00 00 e8 1e 00 00 28 cb 40 00 09 1f 00 00 |........(.@.....| # Find the firmware size 7945 (0x1F09) itself from mbx2dfu.exe $ hd mbx2dfu.exe | grep "09 1f" 0000ea40 09 1f 00 00 e8 1e 00 00 28 cb 40 00 09 1f 00 00 |........(.@.....|
なお、mbx2dfu.exeにはhttpやftp、ホスト名やIPアドレスのようなリテラル値は含まれていませんでした。すなわち、エラーメッセージ中の"download"の語の示す意味はやはりインターネット越しのファイルダウンロードではなく、PCからMbox2へのファームウェア転送を意味していると考えられます。
こうなると何故"Failed to download firmware"エラーになるのかは考えてみても想像が難しいです。Audio/MIDIではなくDFU(Device Firmware Update)用のドライバが正常に機能してないような気がしますが、ソースコードも無いですし、逆コンパイルやデバッグ実行でもしなければ正確なところは解らないでしょう。もちろん、リバースエンジニアリングは禁止されてますから、大人しくWindowsXP環境を引っ張り出してFirmware Updateを実行するしかなさそうです。
WindowsXPでUpdate試行⇒成功
WindowsXP搭載ミニノートを用意して、試してみました。
- Protools 7LE(ptle70_28754.zip)のインストール⇒できた
- インストールプロセス中のドライバインストール⇒できた
- Firmware Updater(Mbox2firmware_v143_Win_33125.zip)の実行⇒Windows10同様に"Failed to download firmware"表示になる
XPでもUpdateできないってどういうことやねん?と、途方に暮れかけましたが…。
そういえば、mbox2dfu.exeのバイナリを調べていた際に、何かのinfファイルを指すリテラル値が保持されていたなと思いだして、改めて確認してみたところ、".\mbx2ccgp.inf"と".\mbx2dfu.inf"というリテラルが保持されていました。これ、mbox2dfu.exeと同一ディレクトリにこの2つのinfが必要ってことなのかしらと雑に推測し、C:\Program Files\digidesign\Drivers にmbox2dfu.exeを配置して実行してみたところ、[Update Firmware]を押下後に、mbx2dfuドライバのインストール確認ダイアログが表示された後に、Updater自体は"Firmware update completed successfully”表示が出ました!
念のため[Check Firmware]を押下してみると、正常に143に更新されていることが確認できます。
Ubuntu20.04環境で動作確認
dmesg(syslog)を確認すると、"bcdDevice= 1.24"だった箇所が"bcdDevice= 1.43"に変わり、"Unknown bootresponse=1, or timed out, ignoring device."のエラー出力が無く、"Digidesign Mbox 2: 24bit 48kHz"が出力されています。
[ 12.368538] usb 1-2: new full-speed USB device number 7 using xhci_hcd [ 12.550662] usb 1-2: config 1 interface 2 has no altsetting 1 [ 12.550667] usb 1-2: config 1 interface 3 has no altsetting 1 [ 12.550669] usb 1-2: config 1 interface 4 has no altsetting 1 [ 12.550672] usb 1-2: config 1 interface 5 has no altsetting 1 [ 12.554386] usb 1-2: New USB device found, idVendor=0dba, idProduct=3000, bcdDevice= 1.43 [ 12.554392] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 12.554395] usb 1-2: Product: Mbox 2 [ 12.554397] usb 1-2: Manufacturer: Digidesign [ 16.532592] usb 1-2: Digidesign Mbox 2: 24bit 48kHz [ 16.539674] usbcore: registered new interface driver snd-usb-audio
PCM再生・録音・RawMIDI・AlsaSequencerポート全て正常に認識されています。
$ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: chtbswrt5672 [cht-bsw-rt5672], device 0: 1 [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: chtbswrt5672 [cht-bsw-rt5672], device 1: Deep-Buffer Audio (*) [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: M2 [Mbox 2], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0 $ arecord -l **** List of CAPTURE Hardware Devices **** card 0: chtbswrt5672 [cht-bsw-rt5672], device 0: 1 [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: M2 [Mbox 2], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0 $ amidi -l Dir Device Name IO hw:1,0,0 Mbox 2 MIDI 1 $ aconnect -l client 0: 'System' [type=kernel] 0 'Timer ' 1 'Announce ' client 14: 'Midi Through' [type=kernel] 0 'Midi Through Port-0' client 20: 'Mbox 2' [type=kernel,card=1] 0 'Mbox 2 MIDI 1 '
なお、PCMデバイスとしてはbig-endianな符号付24bitフォーマット(S24_3BE)である点だけ留意が必要かもしれません。
$ cat /proc/asound/M2/stream0 Digidesign Mbox 2 at usb-0000:00:14.0-2, full speed : USB Audio Playback: Status: Stop Interface 2 Altset 2 Format: S24_3BE Channels: 2 Endpoint: 3 OUT (ASYNC) Rates: 48000 Bits: 0 Capture: Status: Stop Interface 4 Altset 2 Format: S24_3BE Channels: 2 Endpoint: 5 IN (SYNC) Rates: 48000 Bits: 0
つまり、例えばwavファイルはLittle-endianでPCMデータを保持しますから無変換では再生/録音できません。以下はaplayの例ですがarecordも同様です。
$ aplay -D hw:M2 24bitsample.wav Playing WAVE '24bitsample.wav' : Signed 24 bit Little Endian in 3bytes, Rate 48000 Hz, Stereo aplay: set_params:1368: Sample format non available Available formats: - S24_3BE
hwではなくplughwとして自動変換するように指定すれば問題ありません。もちろん、endiannessの変換は無劣化ですから波形そのものへの影響はありません。
$ aplay -D plughw:M2 24bitsample.wav Playing WAVE '24bitsample.wav' : Signed 24 bit Little Endian in 3bytes, Rate 48000 Hz, Stereo
以上。