Team for GR-PEACH Producer Meeting

PCM2704ステレオ再生時のノイズについて(USBHostDac_example)

17 Sep 2015

USBHostDac_exampleを利用して、PCM2704使用のUSBDACを動作させました。 モノラルに設定すると、滑らかに再生されますが、ステレオに設定すると「ビリビリ」とノイズが発生します。原因として何が考えられますか?本体USBにハブを付けてメモリとDACを接続、ファームはgrpeach_8mb_20150601.bin、ライブラリは全部アップデートして読み込んでいます。  ◆うまくいく組み合わせ→  WAVファイル:16ビット符号付1チャンネル48kサンプル  パケットサイズ:96 (#define PACKET_SIZE (192/2))  インターフェイス番号1、アルタナティブ設定番号2 (setInterface(2, 1);)  ◆ノイズの出る組み合わせ→  WAVファイル:16ビット符号付2チャンネル48kサンプル  パケットサイズ:192 (#define PACKET_SIZE (192))  インターフェイス番号1、アルタナティブ設定番号1 (setInterface(2, 1);)

18 Sep 2015

USBメモリの読み込み速度が遅く、2チャンネル音源の場合にUSB DACへのデータ転送が間に合っていない可能性があります。
1チャンネル音源の場合は2チャンネル音源の半分のデータ量で再生するため、USB DACへのデータ転送が間に合うのだと思います。
USBメモリの読み込み速度が原因の場合、main.cppの「#define AUDIO_WRITE_BUFF_SIZE (4096)」のサイズを変更することで、ノイズの出方が変わるはずです。
上記が原因であれば、USBメモリを読み込み速度が速いものと交換することで改善できます。

18 Sep 2015

早速のレスありがとうございます。残念ながら、USBメモリは十分早かったので、ご指摘の点では無いな、と思われました。 そこで、オシロでUSBの転送を調べたところ、妙にアイソクロナス転送期間が短く、よく見るとハイスピードで転送してました。しかし、PCM2704は古いのでハイスピード対応してないように思えました。 そのため、#define USB_HOST_HISPEED 0 としてビルドし、フルスピード転送にしたところ、正常に出音するようになりました。 昨日買ったばかりのPeachですが、とても使いやすいです。FPPが付いていて、65536ポイントのFFTでもガンガンできますので、ルームアコースティック補正とチャンネルデバイダ処理を実時間で行って、6ch(3ウェイステレオ)の出力を得るプログラムを作成しようと考えております。

25 Sep 2015

ご返信ありがとうございます。
GR-PEACHではHUB先に接続されたデバイスの速度を確認し、それに合わせた通信を行う機能(スプリットトランザクション)が入っています。
通常はこの機能でHUB先にフルスピードデバイスが挿入されても正常に動作するはずなのですが、一部のHUBではアイソクロナス転送のスプリットトランザクションが正常に動作しないものがあるようです。
こちらで動作確認に使用しているデバイス(BSHSAU01BK)もフルスピードまでしか対応していませんが、HUB先で正常に動作します。但し、一部のHUBを使用した場合はデータの一部が欠落しノイズが発生します。
上記と同じ問題であれば、HUBを交換することで改善が期待できます。

11 Oct 2015

スプリットトランザクションの問題との事、なるほど、たいへん勉強になりました。ありがとうございます。おかげさまで、CM6206を搭載したマルチチャンネルのUSBーDACでは、6CHのオーディオ出力を出すこともできました。
現在は逆に、USBDACからLINE_INを読み込こもうとしていますが、このシルバーウィークにかなり頑張ったものの、動作に至っておりません。別途「IsochronousEp::isochronousReceiveの利用」にて質問しております状態でして、ちょっと手詰まりになっております。何か、ちょっとしたヒントでも結構ですので、アドバイスを頂ければ幸いです。
HOSTでのアイソクロナスの利用はmbedにはサンプルが少なく、とりわけデータ量の多い応用は高速なPeachならではの分野ではないかと楽しんでおります。
/media/uploads/dokunewon/0.jpg
我侭を言えば、USBHostDac::send同様に、USBHostDac::receiveをサンプルに加えていただくと「地獄に仏」という所で御座います。
余談ですが、ルームアコースティック補正とチャンネルデバイダを32ビット浮動小数点で処理するオーディオ機器はかなり高額なんですが、Peachと安価なUSBDACで作れそうなので、楽しみにしております。画像に添付しておりますとおり、PC上では調子よく動作しており、なんとかPeach上で動かしたいものです。

30 Sep 2015

「IsochronousEp::isochronousReceiveの利用」にUSBHostDac::receiveを加えたサンプルを載せました。
完成した際は是非ご紹介ください!

30 Sep 2015

receiveのサンプル、超ありがとうございます。早速インポートさせて頂きます。USBAUDIOデバイスとして、PCからオーディオデータを受け取り、補正して、帯域で分けた上で、USBDACに6chで出力するところまでは動きました。Peachは、NEON機能を使わない素のFFTPACKで、32768タップの(重畳加算分を入れれば、65536タップですが)FIRを実時間で6ch分こなしてます。今までに経験した事のない、パワフルなマイコンですね。もちろん完成すれば紹介したいのですが、いろんなソース勝手にインポートして部分的に書き換えて使っているので、そのあたりどうすればよいのか、検討します。

03 Oct 2015

USBHostDac::receiveをインポートし、インターフェイス設定やコントロール設定を追加するなど、かなりいろいろ弄らせて頂きましたが、信号を入力できませんでした。私の使っている入力付きUSBDACは、DN-USBSA6CHOPTという、相当に格安な商品なので、なにか癖があるのかも知れません。とはいえ、アナログ信号は入力できないものの、USBオーディオデバイスとしてなら動作してますので、ソースが整理できたら、紹介させて頂こうと存じます。

09 Oct 2015

DN-USBSA6CHOPTを入手できないか調べてみたのですが、なかなか難しそうです。
他のUSB DACでも使えるかもしれないのので、プログラムを公開していただければ色々試せると思います。
作成したプログラムのご紹介、お待ちしております。

11 Oct 2015

ご検討ものすごくありがとうございます。USBデバイスとして動いているので、後一歩でアナログ入力です。紹介は今すぐでもしたいのですが、全く試作品のプログラムを紹介して良いのか、紹介ってどうするのか?勉強中です。今しばらくお待ちください。