問題タブ [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.
audio - Graph Edit で作成された DirectShow グラフでオーディオのクリック音が聞こえますが、PC のプレーヤー ソフトウェアはオーディオをスムーズに再生します
DSPACK コンポーネント ライブラリを使用して Delphi 6 で構築した DirectShow アプリケーションがあります。2 日間、私はオーディオ再生の問題を解決しようとしてきました。作成したフィルタ グラフを実行すると、再生中にクリック音が繰り返し聞こえます。本当に混乱したのは、フィルタ グラフと同時に作成したオーディオ ファイルに、ギャップではなく、クリーンな連続オーディオが含まれていたことです。そのため、オーディオ バッファが適切に配信されていることはわかっていましたが、「ライブ」再生を「妨害」していました。とか、そう思いました。セマフォの保持時間が長すぎる (ロック)、またはおそらくタイムスタンプの問題を探して問題を診断するのに 2 日間を費やしました。
出力ファイルが「スムーズ」であるにもかかわらず、DirectShow フィルタのレンダリング中に途切れる
数分前、Graph Edit ユーティリティでテストを試みることにしました。使用していたキャプチャ デバイス (VOIP 電話のマイク) と、使用していたレンダラー デバイス (ヘッドフォンへのHD ATI リア オーディオ出力)だけで構成される非常に単純なグラフを作成しました。合計2つのフィルター。 驚いたことに、同じクリック音が聞こえました。 ここでは、私のコードがまったく関係なく、クリック音が聞こえたケースがありました。
次に、Graph Edit で作成したフィルター グラフのオーディオ レンダラーをVOIP phone ear pieceに変更しました。クリック音が消えました。
これで、ATI リア オーディオ デバイスでスムーズなオーディオを取得する方法があることがわかりました。これは、優先オーディオ出力デバイスであり、PC で再生するビデオから再生する wave ファイルまで、すべてが完璧に聞こえるからです。では、他のソフトウェア プログラムは、単にフィルターを接続するだけでなく、何か違うことをしているのですか? おそらく、HD ATI リア オーディオのデフォルト モードはダブル バッファリングなしで、他のソフトウェア プログラムはその機能を有効にする方法を知っているのではないでしょうか? それとも、 HD ATI リア オーディオレンダラーでオーディオをスムーズに再生するために、たとえば別の DirectShow または DirectSound フィルターまたは技術を使用して、何か別のことを行っているのでしょうか?
c# - Directsound で Wav を再生する
異なる時間に開始する複数の wave ファイルを再生する必要があります (すべて同時に再生する必要はありません)。Directsound を使用してファイルを再生しようとしましたが、問題が発生しました。次のコードがあります。
問題は、最初の行 (var dev = new Device();) に入力し、プログラムをコンパイルするとエラーが発生することです (ConsoleApplication1 で問題が発生したため、閉じる必要があります)。これは、最初の行を除くすべてのコードを削除しても発生します。コンソール エラーは次のとおりです。「混合モード アセンブリはランタイムのバージョン v1.1.4322 に対してビルドされており、追加の構成情報がないと 4.0 ランタイムに読み込むことができません」。
この問題が解決できない場合、複数のサウンドを再生する別の方法はありますか? サウンドのレイテンシは最小限に抑え、遅延なく即座に再生する必要があります。
c# - アプリケーションを Windows で通信プログラムと見なす方法
私は音声ライブラリを使用するプログラムを作成しています。女性が話しているときに、他のすべての音をミュートまたは削減したいと考えています。
他のアプリケーションを手動でミュートする方法を探していましたが、Windows の通信タブ (サウンド オプション内) に、ウィンドウでこれを管理できるというオプションが表示されました。この写真のように:
基本的に、アプリケーションが通信アプリケーション (Skype など) と見なされるには何が必要ですか?
c++ - パスにある場合を含まないsal.h
DirectSound をプログラムに実装する作業を行っていますが、sal.h を必要とする dsound.h が必要です。何らかの理由で、sal.h があり、それがパスにあるという事実を g++ に認識させるのに問題があります。ファイルと直接コマンドsal.h
を入力することもでき、コマンド プロンプトで sal.h が開きます。しかし、私がコンパイルすると
g++-3 World.cpp -c
私は得る
dsound.h:13:17: sal.h: No such file or directory.
続いて、sal.h の欠如に起因する dsound.h からの何千ものエラーが発生します。メモ帳、g++、およびコマンド プロンプトを使用しているだけですが、sal.h を機能させるには VC++ を使用する必要がありますか? それなしで DirectSound を使用する方法はありますか?
念のため、コンパイルしているコードの冒頭を次に示します。
以下は、dsound.h を含むインクルード ファイルである WorldEntity.h の冒頭部分です。
audio - Visual C++ を使用して MFC でサウンドを再生するには?
マイク入力とスピーカー出力を使用して、PC にベースバンド信号処理アルゴリズムを実装したいと考えています。Windows 7 64 ビットでオープン/読み取り/書き込みオーディオ機器を使用するには、どのライブラリが必要ですか? MFC を使用できますか? またはオーディオ デバイスを操作するために DirectSound ラッパー クラスを使用する必要がありますか? また、GNU/Linux 環境の使用にもオープンです。
c# - DirectShow GetDuration が間違った継続時間の値を与える
DirectShow でメディア ファイルの長さを取得しようとしています。次のコード (C#) を使用します。
メディアファイルの長さを秒単位で取得します。ただし、3 ~ 4 分の MP3 ファイルを開こうとすると、track.Duration が 11 ~ 12 分になります。複数のファイルを試しましたが、効果は常に同じです。その理由は何ですか?
c# - DirectSound の MaxSampleRate を 20000 より高く設定する方法
生成されたサウンドを出力する小さなプログラムをプログラミングしています。
私のサウンド カードは 48000 または 192000 のサンプル レートが可能です。Realtek ALC883 7.1+2 チャンネル ハイ デフィニション オーディオで、仕様はこちらで確認できます。
しかし、DirectSound の MaxSampleRate の最大値は 20000 ですか?
サウンド カードの最大値を超えることができることはわかっていますが、これを利用するには DirectSound をどのように構成すればよいでしょうか? 次のことを試すと:
メッセージボックスに表示される数字は「20000」です。
c++ - サウンド カードのリアル/物理/ハードウェア サンプリング レートの取得
サウンドカードの実際の/物理/ハードウェア (単語がわからない) サンプリング レートを取得する必要があります。高周波の方形波を生成し、DirectSound を使用して再生しています。
DirectSound のサンプリング レートをサウンド カードと一致させる必要があります。出力波形がまったく使用できなくなるため、Windows ミキサーでサウンドを再サンプリングしたくありません。
要するに、サウンドカードのネイティブサンプルレートを取得するには?
c# - 複数のソースからオーディオ データを受信し、Wave ファイルにマージする
私は C# と DirectSound を使用してオーディオを録音し、ローカル ネットワーク経由でデータを受信して wave ファイルに保存する別のコンピューターに送信しています。
録音にも同様のコードを使用し、Wave ファイルの保存にも同様のコードを使用しました (NAudio を使用)。
受信したすべてのバイトをウェーブ ファイルに保存することは機能します。しかし、複数のコンピューターからオーディオを受信し、それを 1 つの wave ファイルにマージしたいと考えています。
クライアントごとに 1 つずつ、2 つの別個の wave ファイルを記録してから、それらをマージしようとしました。ただし、私の単純なアプローチでは、同期の手段は提供されません。結果の wave ファイルの長さが少なくとも 5 秒異なり、適切にマージできません。
だから、ここに私の質問があります:
1) ネットワークから受信したオーディオ バイトを取得し、Wave ファイルに保存して、結果のファイルが正しい時間にオーディオを再生するようにするにはどうすればよいですか?
たとえば、100 秒間の音声を録音し、ネットワーク経由で送信します。ただし、実際に録音されるのは 95 秒のオーディオ バイトだけです。欠落している 5 秒は、パケットの送信中に発生する小さな遅延が累積した結果です。
では、この 95 秒間のオーディオを適切なタイミング (100 秒間) に同期して再生するにはどうすればよいでしょうか?
2) 複数のクライアントから受信したオーディオ バイトを混合して、すべてのクライアントのオーディオを同期して再生する単一の wave ファイルを取得するにはどうすればよいですか?
質問を明確にする必要がある場合はお知らせください。助けていただければ幸いです。
c++ - DirectSound:単純なpcm再生
私はDirectSoundで遊んでいて、次のコードで単純なランダムwavデータを再生しようとしています。
しかし、出力では沈黙しか聞こえません。また、出力にエラーはなく、私のdata1は実際にはランダムなものです。私は何が間違っているのですか?