問題タブ [waveout]
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.
c++ - waveOut シンセのパフォーマンスが悪い
私は音声合成についていくつかの調査を行い、非常に単純なシンセサイザーを作成することができました。Microsoft waveOut API を使用しました。プロセス全体を簡素化するためのインターフェースを作成しました。(モノラル) オーディオ ストリームを初期化し、setSample を呼び出すことができるようになりました。したがって、1 秒あたり 44100 サンプルのサンプリング レートでは、setSample を 1 秒あたり少なくとも 44100 回呼び出す必要があります。
これは私の(クアッドコア)ラップトップでは問題なく動作しますが、両親の古いデュアルコア ビスタでは、非常にカクカクします。これはかなり奇妙です。コードはかなり基本的なものですが、より複雑なシンセサイザーで複数のエフェクトを使用している場合でも、FL Studio は親のマシンで非常にスムーズに動作します。
この動作の原因はわかりません。私のコードは最適化にはほど遠いですが、非常に単純であるため、最適化だけが問題であるとはほとんど想像できません (合成を本当に遅くするようなことをしていない限り)。
問題になる可能性のあるコード:
浮動小数点値から離散サンプルへの変換は面倒かもしれないと思います。これを使用して、複数のサンプルサイズを処理します。
また、waveOut はソフトウェアでエミュレートされている可能性があるとも聞きましたが (これは多くのことを説明します)、それが事実であるかどうか (または、いつ、どのバージョンの Windows で、どのような状況で)、どの程度のパフォーマンスが得られるかはわかりません。これがもたらす違い。
誰かが私を助けてくれることを願っています。
c++ - waveOutWrite バッファがアプリケーションに返されることはありません
Microsoft の WaveOut API に問題があります。
edit1: サンプル プロジェクトへのリンクを追加しました: edit2: リンクを削除しました。これは問題の代表ではありません
オーディオを再生した後、特定の再生ストリームを終了したい場合は、次の関数を呼び出します。
ただし、waveOutClose() が呼び出された後でも、ライブラリが以前に waveOutWrite() によって渡されたメモリにアクセスし、無効なメモリ アクセスが発生することがあります。
次に、バッファーを解放する前に、すべてのバッファーが完了としてマークされていることを確認しようとしました。
ただし、このような状況は決して発生しません。バッファが空になることはありません。wavehdr_.dwFlags == 18 で 4 ~ 5 個のブロックが残ります (これは、ブロックがまだ再生中としてマークされていることを意味すると思います)
この問題を解決するにはどうすればよいですか?
@ Martin Schlott (「バッファを waveOutWrite に書き込むループを提供できますか?」) ループではなく、ネットワーク経由でオーディオ パケットを受信するたびに呼び出される関数があります。
c++ - C++ Winapi waveOutSetVolume()
機能でマスターボリュームを変更したい
マスター ボリュームのハンドラーを作成するにはどうすればよいですか?
ボリューム (たとえば 75) を関数に渡すにはどうすればよいですか?
このように試してみてください:プログラムでマスターボリュームを変更するには? 私にはうまくいきません!
c# - WaveOutOpen MmException を呼び出す InvalidParameter
このコードは32 ビット Windows XP では機能しますが、64 ビット Windows 7では例外が発生します。(任意の CPU 構成で)
何か助けはありますか?
c++ - 左右のチャンネルの音量を個別に変更する waveOutSetVolume C++
実際には、オーディオ デバイスの左チャネルと右チャネルのボリューム コントロールを、各チャネルに異なる番号を使用するユーザーに与えたいと考えています。私は "waveOutSetVolume()" を使用しました。これには 2 つの引数があります。1 つ目はハンドル、2 つ目は 16 進数または DWORD 番号です。
私は2つの数値を取得しました.各チャネルにそれぞれ1つずつ、それらを文字列に変換します.今、それらを「0x」形式の16進数に変換するにはどうすればよいですか? 一般的に、各チャンネルの音量を個別に変更する方法は?
/////////////////////////////////////////////
winapi - waveOutGetDevCaps() が再生できると言っているのに、Windows Vista 以降の waveOutOpen() が、デフォルトの出力デバイスが 44100hz モノラル 8 ビット PCM を再生できないと言うのはなぜですか?
ソフトウェアの自動変換なしで winmm() を使用して 44100hz 8 ビット モノラル PCM ストリームを開こうとしていますwaveOutXxxx()
(このような変換の結果として生じる可能性のあるフィルタリングを行わずに、出力波形を完全に制御したいと考えています)。
これは Windows XP と wine で問題なく動作します。しかし、Windows Vista 以降 (Vista、7、および 8.1 を試しました) では、
それでは、それをしましょう:
そして今、出力は
...しかし、待ってくださいWAVE_FORMAT_4M08
。サポート対象としてリストされています!
何を与える?ありがとう。
delphi - Delphi - 波の振幅を取得
現在再生中のサウンドを取得する Delphi ライブラリ/コンポーネントを作成する必要があります (アプリは再生されず、ラウドスピーカーで発生する一般的なサウンドのみ) がデータ (左右のチャンネルの振幅) を返します。現在、マイクからスキャンして処理しています。彼は探していて、ネット上にあるさまざまな VU メーターを試してみました (Torry ...) が、Win7 以降とは互換性がありません。解決策を知っている人はいますか?ありがとう