問題タブ [directsound]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - コンソール プログラムで HWND を DirectSound SetCooperativeLevel に提供する方法は?
DirectSound API を使用してオーディオ データをレンダリングするコンソール プログラムを作成しています。DirectSound プログラミング ガイド (Microsoft から)に従っているときに、興味深い問題に遭遇しました。ドキュメントによると:
デバイス オブジェクトを作成したら、IDirectSound8::SetCooperativeLevelメソッドを使用してデバイスの協調レベルを設定する必要があります。そうしないと音が出ません。
問題は、私がコンソール プログラムを作成していSetCooperativeLevel
て、最初の引数として HWND が必要なことです。コンソール プログラムで処理する HWND がありません。null ポインターを提供しようとしましたが、DSERR_INVALIDPARAM
エラー コードで失敗しました。
IDirectSound8::SetCooperativeLevel
コンソール プログラムでどの HWND 値を指定する必要がありますか? プログラムのオーディオ部分は共有ライブラリとして構築される予定であるため、「外部」プログラムに関する知識はほとんどまたはまったくありません。
アドバイスをありがとう!
注 : SDL、OpenAL、SFML (OpenAL ベース) を使用するなど、単純にオーディオをレンダリングするためのより良いソリューションがあることは知っていますが、現在のプロジェクトでは DirectSound が適用されています。
編集: GLOBAL_FOCUS バッファを作成するときに、デスクトップ ウィンドウまたはコンソール ウィンドウを HWND として使用することについての疑問を解消する Microsoft エンジニアからのメッセージを見つけました。SetCooperativeLevel
c# - C# で DirectSound CaptureBuffer の内容を WAV ファイルに書き込む
オーディオを CaptureBuffer に録音しましたが、wav ファイルに保存する方法がわかりません。これ ( http://www.tek-tips.com/faqs.cfm?fid=4782 )を試しましたが、うまくいかなかったか、正しく使用していませんでした。これを解決する方法を知っている人はいますか?サンプルコードをいただければ幸いです。
c# - ストリーミングされたオーディオ データの再生 (C#)
ストリーミングされたオーディオ データを再生できる C# を使用して Windows アプリケーションを開発しようとしています。基本的に、さまざまなオーディオ ファイルの再生を担当するクライアント アプリケーションを作成します。現在、クライアント アプリケーションから、ファイル ヘッダーからハードウェア構成パラメーターを抽出し、ネットワーク経由でファイル データ (PCM ストリーム) をストリーミングします。
したがって、クライアントから送信されたハードウェア構成パラメーターを使用して実際のハードウェアを (サーバー側で) 構成し、ファイル データ ストリームをそれに与えて、オーディオ データを再生できるようにすることは可能ですか。
調べているうちに知りましNAudio
た。NAudioはこのようなことを行うことができますか、それとも私にとってより良いオプションは、Directsound APISを使用してネイティブC/C++コードに切り替えることです.
更新:
ハードウェアを構成するということは、オーディオ再生に関連するパラメーターを設定することを意味します。これらのパラメーターには、sample rate
(例: 44100 Hz)、number of channels
(例: ステレオ)、storage format
(例: 16 ビット リトルエンディアン) などが含まれます。
私のクライアント アプリケーションは Linux 上にあり、PCM ストリームと hw_params 構成をインターセプトしてサーバーに送信する ALSA ドライバーを植えました。
更新終了
ありがとう。
c# - NAudioを使用して実行時にウェーブフォーマットを変更する
私は以下を使用してデバイスを初期化しました:
私はそれにpcmストリームを追加しています:
waveProvider.AddSamples(samples, 0, size);
ストリームデータが同じ構成である限り、上記は正常に機能します。
サンプルレートとチャネル数を受け取る別の関数があり、新しく提供された構成を使用するようにwaveproviderを再構成したいと思います。これが私が使用しているコードです:
これは機能しておらず、これも正しい方法ではないと思います。新しいsample_rateとnum_channelsを使用するようにデバイスを再構成する方法についてのアイデア
ありがとう。
delphi - Delphi 6 DSPACK プログラムのレガシー フィルタ 'Wav Dest' に対する NIL 応答をどうするか?
PC 入力デバイス (Windows XP) からオーディオを録音し、キャプチャしたオーディオを MS 形式の WAV ファイルに書き込む DSPACK を使用して Delphi 6 プログラムを作成しようとしています。私が抱えている問題は、「WAV Dest」という名前の従来のフィルターを取得しようとすると、NIL が返されることです。
これらの呼び出しの後、filWaveDest.BaseFilter.Moniker には NIL が含まれます。filWaveDest を使用してキャプチャされた WAV データを書き込もうとする後続のコードが明らかに失敗するため、これを修正するにはどうすればよいですか?
c# - DirectSound:「値が期待される範囲内にありません。」Notifyを初期化するとき
単純なDirectSoundプログラムを実行しようとすると、その例外が発生します。コードは次のとおりです。
最後の行(var notify = new Notify(outputBuffer);
)で例外が発生します。
何が悪かったのかわからない。バッファが正しく初期化されました。
c# - DirectSound によるピッチシフト
C# で DirectSound を使用してピッチシフトを行う方法は? Google で役立つ情報は見つかりませんでした。SetFrequency は、音の速度も変更するため、私には適していません。ピッチごとに wav ファイルを作成したくありません。非常に大きなソフトウェアになってしまうからです。
ありがとう!
delphi - MP3 にアルバム アートがエンコードされている場合の DirectX での MP3 再生の問題
Delphi 2007 で Clootie DirectShow9 ヘッダーを使用しています。オーディオとビデオを再生するラッパー コンポーネントを作成しました。アルバム アートがエンコードされた MP3 を入手するまでは問題ありません。このような mp3 ファイルは再生されません。pMediaControl.Run; を呼び出したときに、コードからエラー メッセージが表示されません。pMediaControl は IMediaControl です。彼らはただ遊び始めません。アルバムアートでエンコードされていない他の多くの MP3 ファイルは正常に再生されます。私が見逃しているものがあるに違いありませんが、それを理解することはできません。
これらのアートでエンコードされた mp3 ファイルは、同じ PC の WMP と Winamp で問題なく再生できます。
誰かが私のためにこれに光を当てることができますか?
ありがとう
playback - DirectSound でゼロからサウンドを作成する
DirectSound を使用してゼロからサウンドを作成する方法はありますか?たとえば、ac、d、e、f、g などの音符を再生しますか? ただし、サウンドはリアルで、少なくとも適切なサウンドのように聞こえる必要があります。
ありがとう。できる限り簡潔に、かつ詳細に説明するように努めました。
c# - DirectSound と C# を使用してマイクからスピーカーにサウンドをストリーミングするときに、静かなチクリング ノイズを回避するにはどうすればよいですか?
DirectSoundとC#を使用して、マイクからスピーカーにサウンド サンプルをストリーミングしようとしています。「マイクを聞く」に似ているはずですが、後でこれを別の用途に使用したいと考えています。私のアプローチをテストすることで、バックグラウンドで静かなくすぐり、クラッキング ノイズに気付きました。これは、バッファの書き込みと再生の間の遅延と関係があると思います。これは、チャンクを書き込むための待ち時間よりも大きくなければなりません。
録音と再生の間の遅延を 50ms 未満に設定した場合。ほとんどの場合は機能しますが、非常に大きなクラッキング ノイズが発生することがあります。そのため、少なくとも 50 ミリ秒の遅延を決定しました。これは私にとっては問題ありませんが、システムの「デバイスをリッスンする」の遅延ははるかに短いようです。約 15 ~ 30 ミリ秒で、ほとんど目立たないと思います。50 ミリ秒で、少なくとも少しのリバーブ効果が得られます。
以下に、私のマイクコードを (部分的に) 示します。 初期化は次のように行われます。
キャプチャは、追加のスレッドで次のように実行されます。
キャプチャ中ReportChunk
は、データをサブスクライブ可能なイベントとしてスピーカーに送信します。スピーカー部分は次のように初期化されます。
データは、次の単純な方法で、イベント メソッドによってキューに入れられます。
再生バッファの充填と再生バッファの開始/停止は、別のスレッドによって行われます。
writeToBuffer
は、最後の書き込み位置を表すandをthis.buffer.Write(wp, data, LockFlag.None);
考慮して、エンキューされたチャンクをバッファーに書き込むだけです。これが私のコードで重要なことのすべてだと思います。定義が欠落している可能性があり、少なくともスレッドを開始/停止=制御する別の方法があります。bufferSize
chunkSize
wp
バッファーの入力を間違えた場合や初期化が間違っている場合に備えて、このコードを投稿しました。しかし、C# バイトコードの実行が遅すぎるなどの理由で、この問題が発生すると思います。しかし、最終的に私の質問は未解決です。私の質問は、レイテンシーを減らす方法と、存在してはならないノイズを回避する方法です。