昨夜は徹夜しました.
EZUSBをDCCとして使えないだろうか? というのがここんとこの連載テーマ.
課題は様々ですが、今日のお題はこうです.
デバイスディスクリプタに複数のサンプリング周波数を記述するようになっている.なのだが、windowsからの「サンプリング周波数はこれにしてね指令」はどういう経路でどんな形で到来するの?
第35話で公開したディスクリプタを振り返って、bit数とサンプリング周波数がどのように記述されているのかをまずは整理してみたい.
device discriptor 必ず1つだけ存在
↓
config discriptor 複数在っても許されるらしいがここでは1つのみ
↓
interface discriptor 3個在る(0番コントロール/1番StreamIF/2番HID)
↓
interface1番の配下に4つのAlternate Settingが在る (0番停止/1番16bit/2番24bit/3番32bit)
↓
0番以外の各Alternate Setting配下に5個のサンプリング周波数が在る
ちなみに3つのinterfaceはこんな風になっています.
上のディスクリプタ階層構造は、bit数→サンプリング周波数の階層構造になっていますが、これをフラットに記述することも可能と思います.つまり、1+5+5+5=16個のAlternate Setting が平置きされるわけですね.でもそうするとディスクリプタのBYTE数が増えるので敬遠されるのだと思いますけど.
平置きのケースはさておき、階層構造のケースで進みます.
ここで2つの疑問でぇす.
1)bit数の設定はどうしているか?
2)サンプリング周波数の設定はどうしているか?
windowsからこれらの指令がUSBデバイスたるEZUSBに飛んでくると思われますが、別ルートなんだろうなと想像されます.
【bit数設定の仕組み】
windowsからこういうsetupが飛んでくる.これが3つのAlternate Settingを選択するよう動けという要求です.標準リクエスト表にあるお馴染みのリクエストです.
01 0B 02 00 01 00 00 00
01 bmRequestType お決まりの接頭語と思えばいいでしょう
0B set interfaceの意味=Alternate選択の意味
0002 Alternate2にしてくれの意味
0001 interface1を指している
0000 後続データは無いの意味
人間の言葉に直すとこんなかと.
「windowsは命ずる.interface1をAlternate2にせよ」
これはつまり、
「windowsは命ずる.Stream interfaceを24bitにせよ」
ということかと.
【サンプリング周波数設定の仕組み】
windowsからこういうsetupが飛んできます.しかし標準リクエスト表にはこんなの無いんだぜ.これはAudio Class 1.0 documentの5.2.1.1 Set Requestなのでした.
22 01 00 01 02 00 03 00 00 EE 02
22 bmRequestType endpointに対する指令の意味
01 SET_CUR セットしろの意味
0100 01はcontrol selectorで、ここではサンプリング周波数を指してるんだろう
0002 EP2の意味
0003 後続データは3BYTEの意味
02EE00 データ 10進数に直すと192000kHzの意味
人間の言葉に直すとこんなかと.
「windowsは命ずる.EP2を192000にせよ」
これはつまり、
「windowsは命ずる.EP2のサンプル周波数を192kHzにせよ」
ということかと.
わかってしまえばああそうなの?っていうだけですけど、これで徹夜したのよ.だいたいさ、サンプリング周波数がendpoint属性として天下ってくるってのが一貫性に欠けるっつうか、想定外だったなぁ.
以上の知見より、EZUSBのCPU8051がやるべき事はう~んと考えれば決まるじゃろう.
-----
ところで、windowsがEZUSBへ向けて上記のbit数/sampling周波数設定を発するのはどういうtimingなのだろう?
わたしが目撃したのは3つの場面です.
1)この設定をして、適用ボタンを押した瞬間
でもねぇ、この時にEZUSBへ送信されるサンプリング周波数データは何か変.古いデータが送信されるみたいなんだなぁ.まぁいいけど.
2)音楽再生アプリが再生開始した瞬間
この時にEZUSBへ送信されるサンプリング周波数データは正常です.
3)停止時
何も音楽再生してないときにはどうなってるの?というのは知っておくべきかと思います.上で「Alternate Setting0番=停止」と書きました.つまりAlternate0にせよという命令を受け取ったEZUSBは、サンプリング周波数の発振を止めるなどの操作をするべきかと思います.
ちなみにAlternate0にせよという命令はこういうsetupです.
01 0B 00 00 01 00 00 00
01 おまじない接頭語
0B SET_INTERFACE
0000 Alternate0の意味
0001 interface1の意味
0000 後続データ無しの意味
今日はこれから秋葉原へ行くのでここまでにしとう御座います.
かしこ
→INDEXページへ
業務連絡
返信削除BD送りました。
明後日には届くはずです。
ちなみにコナンを見たことがありません。
BY The WAY
スピーカーケーブルを交換して音が変わる(耳で聴いて解るレベル)と思います?
ほぇ〜BDありがとうございます。
削除スピーカーケーブルで音は変わると思います。距離にも寄るでしょうから、1mだと識別困難かもですが、10mも有れば変わっても不思議じゃないかなと思っています。
削除オペアンプをNE5532からmusesに変えたぐらいの変化はあるんじゃないかという予想です。
フィルムコンを安物からWIMAに変えたよりはスピーカーケーブルによる変化はあるんじゃないかという予想です。
細いケーブルと高価な太いケーブルで何が変わるかというと、ケーブル自体のDC抵抗はダンピング性能にあまり影響しないと思っています。影響大なのはケーブル自体のインダクタンスがそこそこ違うと思うので、インダクタンスで過渡応答に差が出るという仮説です。
スピーカー自体も複雑なインダクタンスですけど、アンプは一生懸命定電圧駆動に努めてくれています。そこにスピーカーケーブルというインダクタンスがプラスされるのですから、何かしら損をするだろうなぁと思っています。
インダクタンスを小さくするには、芯線を太くして、かつ被覆を薄くすると理論的には効果的です。そういう志向のスピーカーケーブルがあるのかどうかは知りませんが。
なお、インダクタンスを抑える工夫が行き過ぎるとキャパシタンスが増えてしまうので、スピーカーケーブルとスピーカーで共振しないかななどと云う別の心配がアタマをもたげます。
いずれにせよ、聴覚上の差は、素直な音と、キンシャンした音という良くあるパターンになるんじゃないでしょうか?
以上は空想です。
SPケーブルの物理的ダンピング特性を良くするためにLCOFC芯線+テフロン皮膜+外側を鉛テープ巻き込みというケーブルを使っていました。ごく当たり前のSPケーブルと比較しましたが、僕の耳では まったく 違いませんでした笑
返信削除そのケーブル、メーター単価おいくらですか? ¥1500とか(汗)
削除鉛被覆ってのがあるんですね世の中には.