問題タブ [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.
windows - Windows Core Audio API + WaveOutXxx API
WAVファイルを再生するコードをWaveで作成しました。これを実現するためにWavOutxxxAPIを使用しています。WavOutXxxAPIがストリームをデフォルトセッションに開くことは十分に文書化されています。現在、特定の理由により、IAudioSessionControl API(Windows Core Audio Interfaces)を使用してWaveOutXxxAPIによって開かれたセッションを制御しようとしています。
これが実際に可能かどうか教えていただけますか?すべてが同じコードで処理されるため、私のコードにはこのためのプロセス間通信は含まれていません。MSDNによると、これは可能です(http://msdn.microsoft.com/en-us/library/dd371428(v=vs.85).aspx)が、これを行う方法や例がわかりません。誰かが私に何か関係のあることを教えてくれたらとても親切です。
ありがとう。
c# - デバイスの特定のチャネルにウェーブ ファイルを再生するための WaveOut
WaveOut
デバイス情報を取得しているデバイス機能を使用して、.wav ファイルを再生するための API を使用しています。チャンネル情報を取得する方法はありますか (たとえば、ASIO が提供する方法)、デバイスの 2 つの異なるチャンネルに対して 2 つの異なる .wav ファイルを再生する必要があります。この点で私を助けてください。C# のサンプルは役に立ちます
よろしく、 ラマチャンドラン
c++ - WaveOutOpen(C ++)で.wavを再生する
waveOutOpen関数でオーディオファイル(.wav)を再生する必要があります。このためのマニュアルを見つけました。http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=4422&lngWId=3しかし、.wavファイルのこれをどのように変更するかわかりません。私を助けてください...
c++ - IDによるオーディオデバイスの名前(waveoutc ++)
IDでオーディオデバイスの名前を見つける必要があります。私はWaveOut関数を使用しています。私を助けてください
audio - WaveOUT API で歪みのないトーン サウンドを生成するために必要な最小のオーディオ バッファーはどれくらいですか?
WaveOut API には、現在再生中のバッファのサイズに関する内部制限がありますか? つまり、非常に小さなバッファーを提供すると、スピーカーに再生されるサウンドに何らかの影響がありますか。小さなバッファで正弦波を生成して再生すると、非常に奇妙なノイズが発生します。ピークのようなもの、または「BUMP」。
完全なストーリー:
洞音信号をリアルタイムで生成できるプログラムを作りました。可変パラメータは、Frequency と Volume です。プロジェクトの要件は、最大レイテンシを 50 ミリ秒にすることでした。したがって、プログラムは、オーディオ信号の周波数を手動で調整できる正弦波信号をリアルタイムで生成できなければなりません。
Windows WaveOut API、C#、および P/invoke を使用して API にアクセスしました。
サウンド バッファが 1000 ミリ秒の場合、すべて正常に動作します。遅延要件に従ってバッファを 50 ミリ秒に最小化すると、特定の周波数ですべてのバッファの最後にノイズまたは「バンプ」が発生します。生成されたサウンドの形式が正しくない (チェックしたところ、そうではない) のか、オーディオ チップで何かが発生したのか、初期化と再生に遅延が発生したのか、私にはわかりません。
制作したオーディオを .wav ファイルに保存すると、すべてが完璧になります。
これは、私のコードに何らかのバグがあるか、オーディオ サブシステムに送信されるバッファ チャンクに制限があることを意味します。
WaveOut を最初に初期化する必要があることを知らない人のために、再生する必要があるバイト数と、再生する必要があるオーディオを含むメモリへのポインターを含む各バッファーのオーディオ ヘッダーを準備する必要があります。プレーヤーになります。
アップデート
ノイズは次の組み合わせで発生します 44100 SamplingRate、16 ビット、2 チャネル、50 ms バッファ、および生成された 201Hz、202Hz、203Hz、204Hz、205Hz ... 219Hz、220Hz、240 Hz の Sinus オーディオ信号は問題ありません
なぜこの 20 の差なのか、私にはわかりません。
audio - Windows CE 6.0 R3 で WaveOut API を P/Invoke する方法
Windows CE 6.0 R3 で WaveOut API を P/Invoke する方法は?
これを入れると
Windows XP、7 では動作しますが、Wnidows CE 6.0 では「Can't P/Invoke winmm.dll」というメッセージがスローされます。
私は何を間違っていますか?WaveOut API は他の dll に移動されましたか、それとも別のものですか?
とにかく、SoundPlayer (.NET Compact Framework 3.5 から) は正しく動作します。
c# - C#のARMで実行されているWinCEでWaveOUTAPIを初期化する方法
Win CE(ARM)でWinOut APIを動作させようとしていますが、Windows 7で実行されるのと同じコードを使用して、バッファー準備の行にMMSYSERR_INVALIDPARAMを取得しています。
これがARMのバイト境界でのバッファアラインメントの問題だと思いますが、.NET Compact Framework forWindowsCEでそれを行う方法がわかりません。
私はいくつかの解決策や説明を見つけようとしていますが、何もありません。
アップデート
これは、WinCEおよび.NETCompactFrameworkで機能するP/Invokeです。インターネット上では、「coredll.dll」の代わりに「winmm.dll」に関連するP/Invokeを見つけることができます。Winmm.dllはWindowsXP、7に存在します。WindowsCEはcoredll.dllのみを動作させます。WinCEで「winmm.dll」を使用すると、「Can't P /Invokewinmm.dll」というメッセージが表示されます。
使用されるデータ構造と定数
audio-streaming - 同時にリアルタイムでサウンドを録音および再生する方法は?
私は受信機を持っています。受信機が送信している音声を聞き、この音声を wav ファイルとして保存できるようにしたいと考えています。受信者と通信するためのクライアントサーバーアプリを作成しました。レシーバーは udp を介してオーディオを送信しています。WaveOut 関数を使用してオーディオを再生しますが、いくつかの問題が発生しました。
1) オーディオを録音するために WaveIn 関数を使用する方法はありますか? この方法で何かを試しましたが、get dev caps func でデバイスが見つかりませんでした。デバイスがあると思うように関数をだますことはできますか?
2) データを wav ファイルとして直接書き込もうとしたところ、ストリームにノイズが追加されていることに気付きました。最初に生の pcm としてデータを書き込んでから wav ファイルに変換する必要がありましたか、それとも別の方法がありますか?
他の提案はありますか?
waveout - waveOut API での予期しない波形
waveOut インターフェイスに問題があります。オーディオ出力を非常に簡単にするクラス AudioStream を持つ単純なクラス構造を書きたいと思います。次の引数を取るコンストラクタがあります: AudioStream32(int sampleRate, int sampleSize, bool stereo, int bufferSize) (sampleSize はバイト単位のサンプルのサイズで、残りは自明であることを願っています)
アイデアは、AudioStream を一度初期化してから setSample(float sample) を呼び出してオーディオ ストリームを設定するというものです。このクラスは初期段階にあるため、現在はダブル バッファリングとモノラル サウンドのみが実装されています。
setSample メソッドでは、float サンプルを 0 から 2^(8*sampleSize) の範囲の unsigned int に変換し、その unsigned int を unsigned char に変換します。unsigned int を直接使用することもできますが、その方法では、他の sampleSize に使用するコードを再利用できませんでした。コード:
mid は、値 (1 << (sampleSize * 8 - 1)) - 1 が割り当てられた unsigned int です (これは、2^(sampleSize * 8 - 1)) を行うより高速な方法です。したがって、sampleSize が 1 の場合、これは 127 に評価され、sampleSize が 2 の場合は 32767 (または、一般に、最大値の約半分) に評価されます。
これは、sampleSize として 1 を使用する場合 (つまり、1 文字をサンプルとして使用する場合) に正常に機能します。しかし、sampleSize として 2 (またはサンプルのサイズとして 2 バイトまたは short int) を使用すると、非常に奇妙な結果が得られます。
単純な正弦波をストリーミングしようとしています。sampleSize として 1 を使用すると、実際に波形として正弦波が得られます。ただし、sampleSize として 2 を使用すると、次の奇妙な波形が得られます。
オーディオ出力とマイク入力を接続するミニジャック ケーブルを介して Audacity に波形を記録し、32 ビット フロート ストリームとして記録しました。出力は、実際には 16 ビットの int ストリームです。
これは、オーバーフローの問題、または unsigned と signed の int または char 間の変換の問題を示しているようです。さらに奇妙な動作が発生します: setSample メソッドに送信するサンプルのスケーリング (またはボリュームの変更など) は問題にならないようです。波形、0.00001 は無音になります)。
非常に奇妙なことに、256 ではなく 512 で割ろうとすると (つまり、setSample メソッドで ">> 8" を ">> 9" に変更すると)、すべてが機能するように見えます (サウンドの変更を含む)。 . ただし、sampleSize を 1 にしたときよりも音が弱くなるので、これはまだ正しい方法ではないようです。
サウンド デバイスに書き込んだサンプルと、サウンド デバイスの出力を単純な方法で比較できないのは残念です。そうすれば、少なくとも問題がバイト形式にあるのか、それとも私が行っている変換にあるのかを知ることができます。
何が起こっているのか誰にも分かりませんか?