こいけいろぐ

http://surf2koike.blog62.fc2.com/

2009年 07月 20日 ZaurusでUSB Audio再生

先日、「PCオーディオfan」というムック本を買いまして、久々にオーディオ好きの血が騒ぎました。ただこの本は若干オーディオ雑誌寄りの性格が強いようで、感覚的な表現が多く、いまひとつ説明不足な感があります。例えば、PCオーディオのお手軽な実現方法としてUSB Audioの利用が薦められているのはちょっと違うかなと。USB Audioはアイソクロナス転送なのでデータの正当性は保証されませんし、以前に私も実験してデータ化けを観察しています。まあお試し程度では良いでしょうけど。
(ひょっとして、今の機材では改善しているのでしょうか?)



ひとまず手持ちのPCで試してみようと機材を検討し、「Zaurusを使ってみたら良いのでは?」と思い当たりました。こんなに小さな機材で高音質オーディオが実現できたら楽しそうです。さっそく試してみました。

・利用した機材
- SL-C3000
- USBホストケーブル
- Linuxカーネルのクロス開発環境
- Linuxカーネルのソースコード
私はSpecial Kernel v18jを使っているので、カーネルソースへのパッチ当てを行っておきます。
- YAMAHA DP-U50, AP-U70
USB Audio対応のプリアンプ、プリメインアンプ
AP-U70

・作業内容
- USB Audioドライバの作成
ローダブルモジュールの形式で、USB Audioのデバイスドライバをクロスコンパイルします。
make menuconfigでUSB Audioに"M"を指定し、make dep; make clean; make modulesを実行
LinuxカーネルのUSB Audioをモジュール指定

- USB AudioドライバのZaurusへのコピー
audio.o ファイルを、以下の場所にコピーします。(rootとして操作)
/lib/modules/2.4.20/kernel/drivers/usb/audio.o
- Zaurus上のサウンドデバイスファイルの変更
SL-C3000では、なぜか/dev/dsp0 のデバイスノードが存在せず、/dev/dsp固定となっているため、このままでは内蔵サウンドデバイス(wm8750)だけしか利用できません。以下の手順で、/dev/dsp0を作成してやります。(rootとして操作)
mv /dev/dsp /dev/dsp0
ln -s /dev/dsp0 /dev/dsp

・実験
- USB AudioアダプタをZaurusに接続
USBホストケーブルを利用して接続します。dmesgを実行すると、何やらUSBデバイスが認識されたことがわかります。(ホストドライバのusb_ohci_pxa27xは自動的にロードされる)

usbh: monitor_int_hndlr:
usbh: monitor_bh:
usbh: udc_connected: ACTIVE_LOW: 1<7>usbh: monitor_connected: 1
usbh: monitor_load: 4
usbh: monitor_hotplug: agent: usbh interface: monitor action: load
usb.c: registered new driver usbdevfs
usb.c: registered new driver hub
usb-ohci.c: USB OHCI at membase 0xfe000000, IRQ 3
usb.c: new USB bus registered, assigned bus number 1
usb.c: kmalloc IF c3c081e0, numif 1
usb.c: new device strings: Mfr=0, Product=2, SerialNumber=1
usb.c: USB device number 1 default language ID 0x0
Product: USB OHCI Root Hub
SerialNumber: fe000000
hub.c: USB hub found
hub.c: 2 ports detected
hub.c: standalone hub
hub.c: ganged power switching
hub.c: individual port over-current protection
hub.c: Port indicators are not supported
hub.c: power on to power good time: 8ms
hub.c: hub controller current requirement: 0mA
hub.c: port removable status: RR
hub.c: local power source is good
hub.c: no over-current condition exists
hub.c: enabling power on all ports
usb.c: hub driver claimed interface c3c081e0
usb.c: kusbd: /sbin/hotplug add 1
hub.c: port 1, portstatus 100, change 0, 12 Mb/s
hub.c: port 2, portstatus 101, change 1, 12 Mb/s
hub.c: port 2 connection change
hub.c: port 2, portstatus 101, change 1, 12 Mb/s
hub.c: port 2, portstatus 101, change 0, 12 Mb/s
hub.c: port 2, portstatus 101, change 0, 12 Mb/s
hub.c: port 2, portstatus 101, change 0, 12 Mb/s
hub.c: port 2, portstatus 101, change 0, 12 Mb/s
hub.c: port 2, portstatus 103, change 10, 12 Mb/s
hub.c: USB new device connect on bus1, assigned device number 2
usb.c: kmalloc IF c0d415a0, numif 4
usb.c: skipped 5 class/vendor specific interface descriptors
usb.c: skipped 2 class/vendor specific interface descriptors
usb.c: skipping descriptor 0x25
usb.c: skipped 1 class/vendor specific endpoint descriptors
usb.c: skipped 2 class/vendor specific interface descriptors
usb.c: skipping descriptor 0x25
usb.c: skipped 1 class/vendor specific endpoint descriptors
usb.c: skipped 3 class/vendor specific interface descriptors
usb.c: skipping descriptor 0x25
usb.c: skipped 1 class/vendor specific endpoint descriptors
usb.c: skipped 2 class/vendor specific interface descriptors
usb.c: skipping descriptor 0x25
usb.c: skipped 1 class/vendor specific endpoint descriptors
usb.c: skipped 2 class/vendor specific interface descriptors
usb.c: skipping descriptor 0x25
usb.c: skipped 1 class/vendor specific endpoint descriptors
usb.c: skipped 1 class/vendor specific interface descriptors
usb.c: new device strings: Mfr=1, Product=2, SerialNumber=3
usb.c: USB device number 2 default language ID 0x409
Manufacturer: YAMAHA Corporation
Product: YAMAHA AP-U70 USB Audio
SerialNumber: 00
usb.c: unhandled interfaces on device
usb.c: USB device 2 (vend/prod 0x499/0x3103) is not claimed by any active driver.
Length = 18
DescriptorType = 01
USB version = 1.10
Vendor:Product = 0499:3103
MaxPacketSize0 = 8
NumConfigurations = 1
Device version = 1.00
Device Class:SubClass:Protocol = 00:00:00
Per-interface classes
Configuration:
bLength = 9
bDescriptorType = 02
wTotalLength = 015f
bNumInterfaces = 04
bConfigurationValue = 01
iConfiguration = 00
bmAttributes = 40
MaxPower = 0mA

Interface: 0
Alternate Setting: 0
bLength = 9
bDescriptorType = 04
bInterfaceNumber = 00
bAlternateSetting = 00
bNumEndpoints = 00
bInterface Class:SubClass:Protocol = 01:01:00
iInterface = 00

Interface: 1
Alternate Setting: 0
bLength = 9
bDescriptorType = 04
bInterfaceNumber = 01
bAlternateSetting = 00
bNumEndpoints = 00
bInterface Class:SubClass:Protocol = 01:02:00
iInterface = 00
Alternate Setting: 1
bLength = 9
bDescriptorType = 04
bInterfaceNumber = 01
bAlternateSetting = 01
bNumEndpoints = 01
bInterface Class:SubClass:Protocol = 01:02:00
iInterface = 00
Endpoint:
bLength = 9 (Audio)
bDescriptorType = 05
bEndpointAddress = 01 (out)
bmAttributes = 09 (Isochronous)
wMaxPacketSize = 00c8
bInterval = 01
bRefresh = 00
bSynchAddress = 00
Alternate Setting: 2
bLength = 9
bDescriptorType = 04
bInterfaceNumber = 01
bAlternateSetting = 02
bNumEndpoints = 01
bInterface Class:SubClass:Protocol = 01:02:00
iInterface = 00
Endpoint:
bLength = 9 (Audio)
bDescriptorType = 05
bEndpointAddress = 01 (out)
bmAttributes = 09 (Isochronous)
wMaxPacketSize = 012c
bInterval = 01
bRefresh = 00
bSynchAddress = 00
Alternate Setting: 3
bLength = 9
bDescriptorType = 04
bInterfaceNumber = 01
bAlternateSetting = 03
bNumEndpoints = 01
bInterface Class:SubClass:Protocol = 01:02:00
iInterface = 00
Endpoint:
bLength = 9 (Audio)
bDescriptorType = 05
bEndpointAddress = 01 (out)
bmAttributes = 09 (Isochronous)
wMaxPacketSize = 00c0
bInterval = 01
bRefresh = 00
bSynchAddress = 00

Interface: 2
Alternate Setting: 0
bLength = 9
bDescriptorType = 04
bInterfaceNumber = 02
bAlternateSetting = 00
bNumEndpoints = 00
bInterface Class:SubClass:Protocol = 01:02:00
iInterface = 00
Alternate Setting: 1
bLength = 9
bDescriptorType = 04
bInterfaceNumber = 02
bAlternateSetting = 01
bNumEndpoints = 01
bInterface Class:SubClass:Protocol = 01:02:00
iInterface = 00
Endpoint:
bLength = 9 (Audio)
bDescriptorType = 05
bEndpointAddress = 81 (in)
bmAttributes = 05 (Isochronous)
wMaxPacketSize = 00c8
bInterval = 01
bRefresh = 00
bSynchAddress = 00
Alternate Setting: 2
bLength = 9
bDescriptorType = 04
bInterfaceNumber = 02
bAlternateSetting = 02
bNumEndpoints = 01
bInterface Class:SubClass:Protocol = 01:02:00
iInterface = 00
Endpoint:
bLength = 9 (Audio)
bDescriptorType = 05
bEndpointAddress = 81 (in)
bmAttributes = 05 (Isochronous)
wMaxPacketSize = 012c
bInterval = 01
bRefresh = 00
bSynchAddress = 00

Interface: 3
Alternate Setting: 0
bLength = 9
bDescriptorType = 04
bInterfaceNumber = 03
bAlternateSetting = 00
bNumEndpoints = 01
bInterface Class:SubClass:Protocol = 03:00:00
iInterface = 00
Endpoint:
bLength = 7
bDescriptorType = 05
bEndpointAddress = 82 (in)
bmAttributes = 03 (Interrupt)
wMaxPacketSize = 0010
bInterval = 04
usb.c: kusbd: /sbin/hotplug add 2

- USB Audioドライバをロード
以下を実行します。USBオーディオデバイスは/dev/dsp1に割り付けられます。
insmod audio
- USBオーディオデバイスをデフォルトデバイスに変更する
以下を実行します。以降全てのサウンド入出力はUSBオーディオデバイスに割り付けられます。
ln -sf /dev/dsp1 /dev/dsp
- 音楽再生アプリを実行
ZPlayer, Quasar Media Player等で音楽を再生
- 実験が終わったら、サウンドデバイスを元に戻しておきます。
ln -sf /dev/dsp0 /dev/dsp

以上、Zaurusで無事に音楽再生を行うことができました。調子に乗って、DP-U50の出力をオーディオ機材に接続して鳴らしてみましたが、なかなか良い音を奏でてくれます。USB Audioにありがちな若干の音飛びは発生してしまいますが、なかなか面白い実験でした。
今回はほとんど手動で実験しましたが、自動化できれば便利なPCオーディオ環境が実現できるかもしれません。

以下、おまけですが、Zaurusにsmbmountを導入することで(りなざうテクノウさんのsmbmountを使わせていただきました)、NAS中の音楽ファイルを直接再生することもできました。
スポンサーサイト

2009年 07月 18日 Etymotic Research ER-6のイヤーチップ交換

4年以上使い続けているEtymotic Research ER-6のイヤーチップがかなり劣化していたので、純正の交換パーツを購入してきました。

ちなみに、ER-6使用記はこちら:
- 2005年04月23日 Etymotic Research ER-6の試聴&購入 (新Walkman向けヘッドホン探し, その3)
- 2005年05月25日 Etymotic Research ER-6の周波数特性
- 2008年05月19日 Etymotic Research ER-6の断線修理
- 2008年08月11日 Etymotic Research ER-6のコードを交換
- 2008年10月30日 Etymotic Research ER-6のシリコンカバー交換

ER6-14 (5pr) EARTIPS FOR ER-6

ER6-14をヨドバシカメラマルチメディア横浜にて購入。1,570円。
横の古いパーツと比較すると、劣化していたことは一目瞭然。さっそく交換したところ、堅さも適度で、遮音性も明らかに良くなりました。

今回、ヨドバシカメラの店員さんとEtymotic Researchのカタログを見渡していて気づいたのですが、ER-6ってついに販売が終了してしまったようです。本家サイトでも"Unavailable"となっていました。今後は後継機のhf5を使ってね、ということでしょうか。

私はまだまだ使い続けるつもりです。

 | HOME | 

Calendar

« | 2009-07 | »
S M T W T F S
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

Recent Entries

Categories

Recent Comments

Recent Trackbacks

Monthly

Appendix

surf2koike

surf2koike

いろいろ試してみたことをぼそぼそと。

FC2Ad

まとめ