- - PR -
DirectSoundによるサウンドキャプチャ
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-10 08:29
はじめまして。
Managed DirectXとC#で、サウンドのキャプチャをやろうとしているのですが、 MDXのチュートリアル通りに進めているつもりなのですが上手くいきません。 対象としている入力はPCのマイク入力です。 まだこのコードはアプリケーションに組み込むレベルではなく、 ちょっとしたテストのつもりで書いています。 どなたか同様の開発経験をお持ちのかた、 またはどこかに良いサンプルコードがあるとご存知の方、 教えていただけますでしょうか。 public Form1() { // // Windows フォーム デザイナ サポートに必要です。 // InitializeComponent(); try { // // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。 // Microsoft.DirectX.DirectSound.CaptureDevicesCollection captureDevicesCollection = new CaptureDevicesCollection(); Microsoft.DirectX.DirectSound.Capture capture = new Capture(captureDevicesCollection[1].DriverGuid); Microsoft.DirectX.DirectSound.CaptureBufferDescription captureBufferDesc = new CaptureBufferDescription(); Microsoft.DirectX.DirectSound.CaptureBuffer captureBuffer = new CaptureBuffer(captureBufferDesc,capture); } catch(Exception E) { MessageBox.Show(E.ToString()); } } captureBufferのコンストラクタを呼び出すところで、「値が有効ではありません。」とだけ書かれた例外が返されてしまいます。 CaptureBufferDescriptionのFormatに何か入れないといけないのかも知れないですが、 その各種パラメータの指定の仕方が分かりません。 ハードウェアに依存してしまうものなのでしょうか。 実行環境:Windows XP SP2 開発環境:icrosoft Visual Studio.NET2003 + Managed DirectX 9.0 | ||||||||||||
|
投稿日時: 2006-02-10 09:25
コンストラクタで、InvalidCallException が発生するんですね。
こんな感じかな。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-02-10 10:13
> じゃんぬねっと さん
返答いただいて、ほんとにありがとうございます。 残念ながら、教えていただいたとおりwaveformatを指定しても、 まだ上手くいきませんでした。 返される例外はSystem.ArgumentExceptionですが、 これはもしやCaptureインスタンスの方に問題があるのでしょうか? 最初に列挙されるCaptureDevicesCollectionは2つで、それぞれDescriptionを見ると (1)プライマリサウンドキャプチャドライバ (2)SoundMAX Digital Audio となっています。それぞれのDriverGuidが (1)00000000-0000-0000-0000-000000000000 (2)bd6dd71b-3deb-11d1-b171-00c04fc20000 です。どちらを用いてcaptureインスタンスを作っても同じエラーです。 captureを生成したあとそのcapsを見ると、 --------------------------------- Channels: 2 Format96KhzStereo16Bit: False Format96KhzStereo8Bit: False Format96KhzMono16Bit: False Format96KhzMono8Bit: False Format48KhzStereo16Bit: False Format48KhzStereo8Bit: False Format48KhzMono16Bit: False Format48KhzMono8Bit: False Format44KhzStereo16Bit: True Format44KhzStereo8Bit: False Format44KhzMono16Bit: True Format44KhzMono8Bit: False Format22KhzStereo16Bit: True Format22KhzStereo8Bit: False Format22KhzMono16Bit: True Format22KhzMono8Bit: False Format11KhzStereo16Bit: True Format11KhzStereo8Bit: False Format11KhzMono16Bit: True Format11KhzMono8Bit: False MultipleCapture: True Certified: True EmulatedDriver: False ------------------------------ となっています。この中からtrueになっているものでwaveformatの各値を指定してみたのですが、まだ上手くいかないです…とほほ。 # .NETからWindowsプログラムを始めたので、やっぱり # ManagedとはいってもDirectXを使うのはとても苦労しますね。 # 通常の.NET Frameworkのクラス群がどれだけフレンドリーに作られているか # 実感します。 | ||||||||||||
|
投稿日時: 2006-02-10 10:24
そっちであれば、引数のインスタンスの状態に問題があるということになるでしょう。 とりあえず、このあたりを任意の値に設定してください。 WaveFormat.SamplesPerSecond WaveFormat.BlockAlign WaveFormat.FormatTag _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1