問題タブ [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.

0 投票する
4 に答える
2021 参照

c# - 正確なタイミングのトーンと沈黙を作り出す方法は?

RSSフィード用のモールス信号を再生するC#プロジェクトがあります。Managed DirectXを使用して記述しましたが、Managed DirectXが古く、廃止されていることがわかりました。私が持っているタスクは、持続時間に関して正確にタイミングが調整された無音期間(コード)が点在する純粋な正弦波バーストを再生することです。純音を何ミリ秒も再生する関数を呼び出してから、Thread.Sleep()を呼び出してから、別の関数を再生する必要があります。最速では、音とスペースを40ミリ秒まで短くすることができます。

これは、ManagedDirectXで非常にうまく機能しています。正確なタイミングのトーンを得るために、私は1秒を作成します。正弦波を2次バッファーに入れてから、特定の持続時間のトーンを再生するために、バッファーの終わりからxミリ秒以内に前方にシークしてから再生します。

System.Media.SoundPlayerを試しました。任意のトーンの長さに対してPlay()、Sleep()、Stop()の順に実行する必要があるため、これは敗者です[編集-以下の私の答えを参照] 。その結果、トーンが長すぎて、CPU負荷によって変化します。実際に音を止めるには不確定な時間がかかります。

次に、NAudio1.3を使用するための長い試みに着手しました。最終的には、メモリ常駐ストリームがトーンデータを提供し、ストリームに必要な長さのトーンを残して前方に移動し、再生することになりました。これはしばらくの間DirectSoundOutクラスで問題なく機能しましたが(以下を参照)、WaveOutクラスは、PlayerStopped = trueにもかかわらず、バッファーがまだキューにあることを示す内部アサートですぐに終了します。トーンの終わりから次のトーンの始まりまで同じ時間待機するので、これは奇妙です。40ミリ秒のトーンの再生を開始してから80ミリ秒後に、キューにバッファがないと思うでしょう。

DirectSoundOutはしばらくの間はうまく機能しますが、問題は、トーンバーストPlay()ごとに個別のスレッドをスピンオフすることです。最終的に(5分程度)動作を停止します。VS2008 IDEでプロジェクトを実行している間、出力ウィンドウでスレッドが終了した後のスレッドを確認できます。再生中に新しいオブジェクトを作成することはありません。トーンストリームをSeek()してから、Play()を何度も呼び出すだけなので、孤立したバッファや、チョークされるまで積み重なるものに問題はないと思います。

私はこれに我慢できていないので、ここの誰かが同様の要件に直面し、可能性のある解決策のある方向に私を導くことができることを願っています。

0 投票する
1 に答える
715 参照

c# - C#を使用してストリームまたはtcplistenerまたはオーディオカードのオーディオレベルを検出するにはどうすればよいですか?

これはC#のみを使用して可能ですか?ストリーム、マイク、またはサウンドカードからオーディオを検出し、オーディオレベルが設定可能なしきい値を超えた場合に録音を開始できるようにしたい。

ありがとう :-)

0 投票する
1 に答える
373 参照

volume - DirectSound が WinXP のシステム ボリュームに影響する

私は現在、音声ネットワーク チャット ソフトウェアで使用されるオーディオ エンジンを開発しています。チャンネルのキャプチャ/再生/ミキシングなど、すべて正常に動作しています。

問題は、Windows XP で使用する場合です。アプリケーションを起動した後、グローバル システム ボリュームがゼロに設定されているという情報を含むユーザー レポートを取得しています。

これは、WaveOut/DSound の競合が原因であると想定しています。

DSound がシステムの音量に影響を与えないようにするにはどうすればよいですか? 再生デバイスが初期化されます: DirectSoundCreate8(&GUID, &pAudio, NULL);

と:

pAudio->SetCooperativeLevel(parentWnd, DSSCL_PRIORITY);

現在、Vista を使用しているため、アプリケーションをデバッグできません。すべて問題ありません。

この問題で私を助けてくれることを願っています! どうもありがとう!

よろしく、アントン。

0 投票する
1 に答える
183 参照

c++-cli - DirectSoundインターフェイスをラップするマネージクラスはIDisposableである必要がありますか?

DirectSoundのマネージラッパーを書いています。(これは、私の特定の問題を解決する単純な部分ラッパーであり、それ以上のものではありません。NAudioなどについては教えてください。)IDirectSound8をラップするマネージドクラスはIDisposableである必要があり、その理由は何ですか。IDirectSoundBuffer8についての同じ質問。

0 投票する
1 に答える
1120 参照

directsound - マイクからキャプチャしたステレオ サウンドを 2 つのモノ WAV に分割する方法

助けが必要.. マイク (またはサウンド カード) からキャプチャされたストリームから左右のチャネルを分割する際に問題があります。以下のコードは、マイクからサウンドを正確に録音し、左チャネル、右チャネル、左のペアの wav ファイルに保存します。 (分割) CapturedData の左チャネルと右チャネル ?? [メソッド CreateCaptureBuffer()]

For InPos = 1 ~ 24000 - 1 ステップ 2 buffLeft(OutPos) = CaptureData(InPos) OutPos += 1 次の InPos


私は失敗した試みにうんざりしています...

よろしく、 シフト

0 投票する
1 に答える
1487 参照

c++ - クリック音の再生

C++ で小さな .wav ファイルを再生するプログラムを作成しようとしています。DirectX SDK ドキュメントに従って、セカンダリ静的バッファーで書き込みおよび再生するようにプログラムしました。.wav ファイルの再生の最後に、非常に目立つ「クリック」ノイズがあることを除いて、正常に動作します。DirectSound を使用していることがわかっている他のゲームにはそれがないため、オーディオ ハードウェア側の欠陥ではないことは確かです。

サイクルごとに GetCurrentPosition をポーリングし、終了する直前に停止しようとしましたが、信頼性がありませんでした。プライマリ バッファで再生される .wav はループする必要があるため、プライマリ バッファでは再生できません。これは望ましくありません。

誰もこの問題の修正を知っていますか? 前もって感謝します。

0 投票する
1 に答える
467 参照

c++ - オーディオ出力、DirectSound を単独で制御

基本的な信号発生器を作成しており、オーディオ カードをアナログ出力として使用することにしました。私が DirectSound を使用することにしたのは... 良い選択肢だと思われたからです。

非常にうまく動作していますが、セカンダリ バッファーを使用しているコードと、コンピューター上の他のサウンドが、生成された信号に混入していることに気付きました。モーターを動かしているときに、コマンドとして MSN ポーク ノイズを送信したくないので、これはちょっとした問題です。

完全な制御を得るために、協力レベルを DSSCL_WRITEPRIMARY に設定してシステムを乗っ取ろうとしました。全体として、この設定を取得しようとしてエラーが発生した後にエラーが発生しているため、この戦略は本当に頭痛の種です。プライマリ バッファーの使用に関するドキュメントは良くなく、本当に良い例が見つかりません。

だから私の質問は:

  1. 誰もがプライマリバッファを引き継いで書き込む良い例を持っていますか?

  2. 波形をオーディオ カードに出力し、アプリケーションが完全かつ単独で制御できるようにする簡単な方法はありますか?

ありがとうございました

0 投票する
3 に答える
5360 参照

c# - C# オーディオを 8khz から 44.1/48khz にリサンプル

DirectShow .NET で、8khz のサンプル レートでセカンダリ バッファを作成するバグに遭遇しました。代わりに8.1khz。

これをグーグルで調べたところ、PC のサウンドカードに応じて、8khz オーディオを自分で 48khz または 44.1khz にアップサンプリングする必要があることがわかりました。

これに使用できる C# ライブラリまたは汎用アルゴリズムはありますか?

ありがとう!!

ローイ

0 投票する
1 に答える
302 参照

c++ - DSSCL_EXCLUSIVEは、排他的な可聴出力を提供しません。DirectSound

非常に簡単な質問です。DirectSound APIのMSDNドキュメントには、アプリケーションにフォーカスがある場合は、それが唯一の可聴プログラムになると記載されています。これはまさに私が望んでいることですが、このフラグを設定してアプリケーションでサウンドを再生すると、コンピューターでバックグラウンドミュージックを聞くことができます。

だから問題は、なぜですか?これは、アプリケーションが異なる低レベルAPIを使用してバックグラウンド音楽を再生しているため、つまり異なるミキシングバッファーを使用しているためですか?または、唯一の可聴アプリケーションになるために微調整する必要がある他の小さなトリックがありますか?

私はここで同様の/関連する質問をしましたが、応答はありませんでした。ただし、DirectSoundの特定の質問に対する答えがわからないが、別のAPIを使用して唯一の可聴アプリケーションになる方法を知っている場合は、もう一度お知らせください。

おかげで、違いがあれば、私はWindows XP32BitProfessionalを使用しています。

0 投票する
3 に答える
1514 参照

delphi - サウンドカードから何かを録音する方法は?

サウンドカードで生成されたサウンドを録音したいと思います。フリーウェア コンポーネントまたはコマーシャル (トライアル) を入手できる場所を教えてください。デルファイ7/2009