2009-07-28 16 views
4

私は3つのことをするつもりです:マイクロフォン入力とシステム音量への管理されたアクセス

マイクからデータにアクセスしてください。私が知りたいことは、デバイスが感知した音の全体的な音量です。

マイクゲインを設定します。

システムボリュームを設定します。

私のWindowsデベロッパの経験はすべてC#/ WPFなので、管理しておきたいと思います。例外的に高性能な処理やリアルタイム処理などは必要ありません。

私は周りを見回しましたが、SlimDXはこのための良いラッパーになるかもしれませんが、そこにも私はどこから始めるべきかわかりません。

確かにそれほど難しくありませんか?ここで

+1

もちろん可能です。 :) – MusiGenesis

答えて

6

は、C#から、Windowsのオーディオミキサーにアクセスする方法を示しリンクです:

http://www.codeguru.com/csharp/csharp/cs_graphics/sound/article.php/c10931

これは、あなたがマイクゲインおよびシステムボリュームを設定できます。しかし、最初の部分はもう少し複雑です。基本的には、入力の録音を開始する必要があります(DirectSoundまたはwaveInXXXX APIを使用します)。各バッファにオーディオがいっぱいになると、バッファのRoot Mean Squareを計算し、これを使用して音量を推定することができます。

編集:ここに(私が使用して正常に変更したので、私はそれが動作を知っている)プロジェクトへのリンクですwaveInXXXXのAPIを使用して音声を録音する方法を示している:

http://www.codeproject.com/KB/audio-video/cswavrec.aspx?df=90&fid=16677&mpp=25&noise=3&sort=Position&view=Quick&select=3005817

編集2:私はリンクを投稿するのがうんざりですから、ここではオーディオバッファの二乗平均平方根を計算するための実際の公式です(ここの型はfloat []ですが、簡単に[]、これは通常waveInXXXXから得られるものです):

public static float RootMeanSquared(ref float[] audio) 
{ 
    double sumOfSquared = 0; 
    for (int i = 0; i < audio.Length; i++) 
    { 
     sumOfSquared += audio[i] * audio[i]; 
    } 
    return (float)Math.Sqrt(sumOfSquared/(double)audio.Length); 
} 
+0

有益な答えをありがとう。しかし、私は "開始"ボタンを押すとすぐにサンプルがクラッシュします。 –

+0

どちらですか?最初か二番目? – MusiGenesis

+0

なぜ浮動小数点型配列パラメータがrefですか?値は十分ではないはずですか? –

4

深刻な遅延(約0.5秒)で喜んで生きていない限り、残念ながらマネージコードからデータを確実に読み取る(またはレンダリングする)ことはできません。問題は、CLRが警告なしに一度​​に250ミリ秒間プロセスを中断する可能性があることです。通常これは問題ではありませんが、アイソクロナス処理をしようとするときには大きな問題になります。

+0

私はP/Invoke waveIn *を使って(私が思った通りに)リアルタイムでスペクトログラフを描画したC#アプリを書きました。この規模のレイテンシ問題は発生していないようです。私はこの問題にぶつからないのは幸運でしたか? – MusiGenesis

+3

メモリが不足しているか、またはGCサイクルがトリガされていない可能性があります。それはまたあなたが走っているOSによって異なります。 Vistaでは、Wave APIのレイテンシが約100msになり、不具合に対してより弾力性があります。 XPとWin7では約30msのレイテンシで動作し、不具合が発生する可能性がさらに高くなります。 –

+1

私はVistaを実行しています。ありがとう、これは知っている良いものです。私のソフトウェアシンセはリアルタイムではありませんが、私はそれを行うバージョンを書くことを検討していました。このような待ち時間は、私のサウンド生成プロセスがすでに比較的高価であるため、ほとんど不可能になります(私はwaveOut *にレイテンシを適用すると仮定しています)。 – MusiGenesis

3

NAudioを使用すると、管理対象C#のマイクからオーディオをキャプチャできます。これを行う方法の例については、デモプロジェクトをご覧ください。ラリーが上で指摘したように、大きなレイテンシを期待しないでください。 NAudioには、ミキサーAPIのラッパーも管理されています。このラッパーは、マイクロフォンの音量を設定できるはずですが、プログラムで正しいコントロールを取得するのは難しいことがあります。

1

私はちょうどcapture sound from the microphone using SlimDXへの(非常に基本的な)サンプルコードを書いています。私はあなたがまだ答えを探しているなら、それが助けてくれることを願っています。

関連する問題