45

Snow Leopard で Java Sound を使用して 3 つの USB マイクからオーディオを録音/処理しようとしています (ただし、問題が解決すれば Windows に切り替えることができます)。問題は、USB マイクに対応するミキサーを使おうとすると、Java Sound が回線がサポートされていないことを教えてくれることです。具体的には、こう言っている...

利用可能なミキサー:

Java サウンド オーディオ エンジン

USBMIC シリアル番号 041270067

内蔵入力 内蔵マイク

サウンドフラワー(2ch)

サウンドフラワー (16ch)

スレッド「AWT-EventQueue-0」での例外 java.lang.IllegalArgumentException: Line unsupported: インターフェイス TargetDataLine サポート形式 PCM_SIGNED 96000.0 Hz、8 ビット、ステレオ、2 バイト/フレーム、

...USBMIC ミキサーを選択するように依頼すると、次のようになります。

  Mixer mixer = AudioSystem.
          getMixer(mixerInfo[1]);

オーディオ形式をマイクの正確な仕様 (16 ビット、44100Hz、ステレオ) に合わせてみましたが、違いはありませんでした。

ここで問題が発生します。

 final TargetDataLine line = (TargetDataLine)
        mixer.getLine(info);

ミキサーと TargetDataLine は互いに気に入らないようです。これら2つを「一致」させて仲良くする方法はありますか?

私が使用しているマイクは、確か​​に少し変わっています。それらは、SingStar と呼ばれるカラオケ ビデオ ゲームで使用するために作られました。マイク自体には標準のモノラル ライン入力コネクタがあり、小さなハブ (1 つのハブに 2 つ) に差し込むと、1 つのオス USB コネクタに変換されます。奇妙さはさておき、それらは Audacity と別のチャンネルとして完全にうまく動作するように見えるので、それらを使用したマルチチャンネル録音は明らかに可能ですが、Java ではおそらく不可能です。

また、異なるプログラム間でオーディオを共有する Soundflower のようなプログラムを使用することも検討しました。ただし、USB マイク入力を Soundflower に作成してから Java にパイプする方法がわからないため、これが機能するかどうかはわかりません。簡単な実験で、マイクから Audacity でオーディオを録音し、それを Soundflower にパイプして、Java プログラムで処理できることがわかりました。それでも、私がやりたいことは、Java ですべてをリアルタイムで実行することです。

この種の問題に詳しい人はいますか?

4

3 に答える 3

4

これを行う簡単な方法は、Soundflower と Soundflowerbed を使用することだと思います。

USB マイク入力を Soundflower に作成し、それらを Java にパイプする方法がわかりません。

Soundflower は既にインストールされているようです。Soundflowerbed は、Soundflower と同じディスク イメージにあり、メニューバー アプリケーションです。サウンド デバイスを選択するためのコントロールが組み込まれていないアプリケーション間でサウンドをルーティングできます。これをディスク イメージからインストールし、クリックして実行します。

以下はすべて Echo Audiofire 4 を使用していますが、原則としてどのオーディオ デバイスでも動作するはずです。

Soundflowerbed の使用

Soundflower を開き、Soundflower (16ch) で使用するオーディオ デバイスにチェックを入れます。私は新しいユーザーなので画像を投稿できませんが、以下にリンクされています。報奨金を受け取ったら、投稿を編集して画像をインラインで含めます。

1

ここから、Soundflower (16ch) を Java サウンドのオーディオ入力デバイスとして使用します。

集約オーディオ デバイスの作成

これが機能しない場合の別の解決方法は、集約デバイスを作成することです。Applications > Utilities > Audio Midi Setup を開き、プラス記号をクリックして新しい集約デバイスを作成します。

2 集約するデバイスにチェックを入れます。USBMICだけが必要です(私は新しいSOユーザーなので、回答ごとに2つの画像しか投稿できないため、次の2つはここにリンクされています)。

3

問題を引き起こす可能性のある重要な部分は、デバイスの時計です。Mac をクロック ソースとして選択すると、より安定する場合があります。 4

それでもうまくいかない場合は、Mac のビルトイン オーディオを集約デバイスに追加し、マスターにしたいデバイスを右クリックしてマスター クロックにしてみてください。

5

その他のオプション

最後に、これはまだ使用したことがありませんが、Pulse Audio (Google で検索してください。この投稿にこれ以上のリンクを挿入することはできません) は、オーディオ ストリームを混合するための解決策になる可能性があります。見た目はともかくかなりの重量級。

于 2011-10-15T20:35:27.187 に答える
2

私の調査によると、特にこのようなスレッドでは、使用しているマイクが問題を引き起こしている可能性が最も高いです。スレッドには、ゲームの切り替えに関してもマイクが問題であると記載されているため、プラットフォームを切り替えるときにも問題になると推測しています.

私の提案は、これをまだ試していない場合は、別のマイクを使用することです! 私がいじったほとんどのマイクには、データをゲームシステムと互換性のあるデータに変換する特別なチップコントローラーがあります。コンピューターのオペレーティング システムでこれを使用しているため、プレイステーションやその他のゲーム システムでは得られない非常に奇妙な効果が得られる可能性があります。

うまくいけば、これが役に立ちます!ハッピーコーディング!

于 2011-10-15T20:04:18.970 に答える
0

AudioFormat が、TargetDataLine のサポートされている形式と一致しません。それがタイプミスかどうかはわかりませんが、スローされた例外は、TargetDataLine が 8 ビット オーディオをサポートし、そのすぐ下に 16 ビット AudioFormat を使用していると述べています。また、フレームごとに最大 2 バイトをサポートします。データを読み取ろうとしているチャンクのサイズと速さは? 役に立たなかったら申し訳ありませんが、見落としがあった場合に備えて指摘したいと思います。

于 2013-04-17T12:53:49.950 に答える