2016-07-07 7 views
6

マイクとスピーカー用のpnpサウンドコントローラを備えたテレホンに使用するUSB​​デバイスを接続しようとしています。今私は2つのスピーカーと2つのマイク入力の出力のための下のように表示されます。 <code>Speaker</code>mic。今私の動機は、システム・マイクからのオーディオ・ストリームをUSBマイクに、そしてUSBスピーカーからシステム・スピーカーに転送することです。接続機器へのマイクオーディオストリームの流れマイクオーディオストリーム

私はこの問題を仮想ケーブルソフトウェアで解決しようとしましたが、これは第三者に依存する必要があります。 C#を使用して達成できる解決策は何か。

私はこれについて知識がありませんので、開始方法はわかりません。グーグル後、私は

  1. CS Core
  2. N Audio

は私が方法がわからない私を助けることができました。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     List<NAudio.Wave.WaveInCapabilities> sources = new List<NAudio.Wave.WaveInCapabilities>(); 

     for (int i = 0; i < NAudio.Wave.WaveIn.DeviceCount; i++) 
     { 
      sources.Add(NAudio.Wave.WaveIn.GetCapabilities(i)); 
     } 

     sourceList.Items.Clear(); 

     foreach (var source in sources) 
     { 
      ListViewItem item = new ListViewItem(source.ProductName); 
      item.SubItems.Add(new ListViewItem.ListViewSubItem(item, source.Channels.ToString())); 
      sourceList.Items.Add(item); 
     } 
    } 

    NAudio.Wave.WaveIn sourceStream,sourceStream1 = null; 
    NAudio.Wave.DirectSoundOut waveOut = null; 

    private void button2_Click(object sender, EventArgs e) 
    { 
     if (sourceList.SelectedItems.Count == 0) return; 

     int deviceNumber = sourceList.SelectedItems[0].Index; 

     sourceStream = new NAudio.Wave.WaveIn(); 
     sourceStream.DeviceNumber = 0; 
     sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(44100, NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels); 



     NAudio.Wave.WaveInProvider waveIn = new NAudio.Wave.WaveInProvider(sourceStream1); 
     sourceStream. 
     waveOut = new NAudio.Wave.DirectSoundOut(); 
     waveOut.Init(waveIn); 

     sourceStream1.StartRecording(); 
     waveOut.Play(); 
    } 

    private void button3_Click(object sender, EventArgs e) 
    { 
     if (waveOut != null) 
     { 
      waveOut.Stop(); 
      waveOut.Dispose(); 
      waveOut = null; 
     } 
     if (sourceStream != null) 
     { 
      sourceStream.StopRecording(); 
      sourceStream.Dispose(); 
      sourceStream = null; 
     } 
    } 

    private void button4_Click(object sender, EventArgs e) 
    { 
     button3_Click(sender, e); 
     this.Close(); 
    } 
} 

このコードを使用して、私はスピーカーにマイクのオーディオを送信できますが、これを使用して私の仕事をどのように実装できますか?

+0

これは答えではありませんが、あなたにヒントを与えます。http://www.daveamenta.com/2011-05/programmatically-comm-command-line-change-the-default-sound-playback-device-in -windows-7 /それはC++ですが、DLLやEXEにコンパイルしてC#コードから呼び出すことができます。 –

+0

詳細を教えてください、あなたはそれをやりたいのですか?目標は何ですか?私には、システムマイクとusbマイクの両方を同時に使用したいと思うようですね。たぶん、2つのデバイスで問題が発生していることを伝えることができます。 –

+0

@DanielGilbert usbマイクは、入力を取ることができるポートです。サウンド入力用の物理マイクはありません(外部サウンドカードに接続されています)。私の目標私は完璧に動作している私のデバイスにコマンドを送信することによってC#を使用して動作している電話機を開発しています。ヘッドフォンを自分のデバイスに直接接続すれば、完璧に動作します。しかし、私はシステムに接続されたヘッドホンを通して音を交換したい。私は外部のハードウェアからマイクとスピーカージャックを取り外すことができます。 –

答えて

2

実際にカスタムドライバを作成しないとこれを行う方法はありません。オーディオデータを入力デバイスにレンダリングすることはできません。入力デバイスは、データを読み込むためのものです。出力デバイス(スピーカー)は、データを書き込むためのものです。

これらの制限を回避するカスタムドライバを使用している仮想オーディオケーブルのようなプログラムがあります。

+0

私を助けることができる任意のオープンソースの仮想ドライバ.. –

+0

WinDDKにはいくつかのサンプルが含まれています。 –

関連する問題