マイコン工作実験日記

Microcontroller を用いての工作、実験記録

USB Audio - Speaker

2007-12-14 22:33:56 | W-SIM
USBオーディオデバイスとしては、まず最初にスピーカを作成しました。USBの基本スタックはAtmelのサイトからも入手できますが、わたしはARM ProjectsにあったCDCのコードをもともと使っていたので、これを元にSpeakerの機能を付け加えるととしました。SpeakerのConfig DescriptorについてはKeilのサイトにあったLPC2148用のAudio sampleから拝借して使っています。

SpeakerやMicといった基本デバイスは、Windowsで使う場合には特にWindows側のドライバを用意することなく、つなげてEnumerationさえ正しく機能すればWindowsから見えるようになります。そのためには、Config Descriptorが間違いなく作成されていることが重要です。ちょっと間違っていると、Windows PCにデバイスを刺したとたんにBlue Screenとなってしまうようです。

デバイスを刺してもBlue screenにならなくなったら、次は意図したようにDeivce/Config descriptorが読めているかどうかを確認します。Linuxであればprocfsやlsusbコマンドで確認することもできるでしょう。わたしは、動作確認はWindowsでおこなっているので、FTDIのサイトで紹介されていたMSのUSBViewを使っています。Descriptorの長さが間違っているために、全項目が読み取れないバグをこれで検出することができました。

W-SIMの音声はG.711 mu-Lawになっています。そこで、当初はSpeakerのStreaming Interface DescriptorにおいてwFormatTagをmu-Lawにしてみました。ところが、この設定だとデバイスマネージャではSpeakerとして見えているのに、アプリケーションとしてサウンドレコーダを立ち上げてみると、スピーカデバイスとしてW-SIMが選択できないのです。wFormatTagをPCMに設定すれば、サウンドレコーダからもW-SIMがスピーカとして見えるようになりました。どうやら、サウンドレコーダが対象とできるデバイスはPCMで入出力できる必要があるようです。

wFormatTagをPCMにすると、PCからAT91SAM7S256に送られるIsoパケットのデータはPCMになりますが、W-SIMに送るデータはmu-Lawである必要があります。そのため、AT91SAM7S256でPCMからmu-Lawへの変換をする必要が生じます。SAM7S256はフラッシュが256Kもあるので、この変換はテーブルを引くことでCPU負荷を最小限に抑えています。

このようにしてUSB Speaker機能を実装したので、"Hello World"を再生中にPC上のサウンドレコーダ(あるいはWMPでもかまわない)で音声を再生開始すると、"Hello World"の代わりに、その再生音声がW-SIMに流れるようにしてみました。

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。