問題タブ [winmm]
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 - DirectSoundとWinMMはWASAPIに基づいていますか?
このスライドでは、vistaのwinmmとdirectsoundがwasapiに基づいていることがわかりました。
これは、winmmとdirectsoundが実際にWASAPIの関数を呼び出すことによって機能することを意味しますか?
私はいくつかのグーグル検索の後でこの情報を見つけることができず、ここの誰かが知っていることを願っています。
c# - コンパイラが16進値を受け入れられるようにするにはどうすればよいですか?
http://www.pinvoke.net/default.aspx/coredll/playsound.htmlのコードを使用しようとしています
ただし、いくつかのエラーメッセージが発生します。つまり、「予期しない文字'×'」が26回発生します。
そこで、次のように、valsを逐語的な文字列に変更してみました。
SND_SYNC = @ "0×0000"、
...しかし今、私は「タイプ'文字列'を'int'に暗黙的に変換することはできません」を取得します
これらの文字列をintに変換できることはわかっていますが、それは本当にそれを行う方法ですか?私はそれをそのようにコンパイルすることができるかもしれないのではないかと心配していますが、それでも動作しません(またはさらに悪いことに)。コンパイラがそれらを受け入れるように、これらの16進値をそのようにマークする適切な方法は何ですか?
コードの最初のビットは次のとおりです。
[DllImport( "winmm.dll"、SetLastError = true)] static extern bool PlaySound(string pszSound、UIntPtr hmod、uint fdwSound);
c++ - WaveOutWrite コールバックが途切れ途切れの音声を作成する
シンセサイザーでのオーディオ再生に使用している 4 つのバッファーがあります。最初に 2 つのバッファーを送信し、コールバック ルーチンで次のバッファーにデータを書き込み、そのバッファーを送信します。
各バッファーを生成するときは、周期がバッファー長の倍数である正弦波をそれに入れているだけです。
実行すると、各バッファ間で短い一時停止が聞こえます。バッファー サイズを 44100 Hz で 16K サンプルに増やしたので、バッファー全体が再生されていることがはっきりと聞こえますが、それぞれの間に中断があります。
私が考えているのは、コールバック関数は、書き込まれたすべてのバッファが完了したときにのみ呼び出されるということです。再生の前に合成を行う必要があるため、各バッファが完了したときにコールバックが必要です。
人々は通常、この問題をどのように解決しますか?
更新: コードを追加するように求められました。ここに私が持っているものがあります:
まず、WaveOut デバイスに接続します。
使用する 4 つのフレームを初期化します。
SubmitBuffer コードは次のとおりです。
そして、ここに私のコールバックコードがあります:
RenderQueue コードは非常に単純です。テンプレート バッファーの一部を出力バッファーにコピーするだけです。
更新: ほとんどの問題を解決しました。_curFrame と共に _nextFrame をインクリメントする必要があります (条件付きではありません)。再生バッファが書き込みバッファよりも先に進んでいました。
ただし、再生バッファを 1024 サンプルに減らすと、再び不安定になります。2048 サンプルでは明らかです。これは、デバッグ ビルドとリリース ビルドの両方で発生します。
.net - timeBeginPeriod および timeEndPeriod メソッドの .NET 代替品はありますか?
私は SerialPort で通信するプログラムに取り組んでおり、それに問題があります。その通信は50%以下です。そうでない場合は、ほとんどの場合タイムアウトになります。
この問題を調査したところ、デフォルトでグローバルまたはシステム タイマーの分解能が最小で 10 ミリ秒以上であることがわかりました。
したがって、通信で Thread.Sleep を使用して X ミリ秒の間一時停止する場合、ノーオペレーションまたは一時停止の場合は 10 ミリ秒以上が最適です。
私の場合、プログラムが外部デバイスと通信するには長すぎます。デバイスは、プログラムから要求を受け取るとすぐに 10 ミリ秒以内に応答します。プログラムが応答を受け取る準備ができていない場合、プログラムはタイムアウトになります。
この問題を解決する唯一の方法は、システム タイマーの解像度を調整または変更することです。そのために、winmm.dll の Windows メソッド timeBeginPeriod と timeEndPeriod を使用するように言われました。プログラムの Windows .NET バージョンにこれらのメソッドをインポートすることはできますが、.NET フレームワークでこれらのメソッドに代わるものがあるかどうかを知りたいです。
c - C での winmm ライブラリの使用
音楽、つまりmp3ファイルを再生できるプログラムを作成しようとしています.winmmライブラリを使用してこれを実行しようとしています.最初にリンクしようとしたとき、コンパイラはエラーを出し、そこからプログラムがライブラリと適切にリンクされていませんでしたが、リンカー設定にライブラリファイルを追加したところ、プログラムは正常に実行されるようになりました(エラーはなく、適切にリンクされていることを示唆しています)が、音楽は再生されません。問題は何ですか.私は現在、gccコンパイラを使用するコードブロックを使用しています.誰が問題が何であり、なぜ音楽が再生されないのか説明できますか? 誰かが私を助けることができれば、私は感謝します! :)
私のコード(単にテキストを出力しますが、音楽は再生されません):
excel - MIDIコントローラーを介したExcelの制御
私はこれらの1つを持っています(ソース:netdna-cdn.com)
そして、Excelフォームコントロールのスクロールバーの1つと同じように、そのスライダーを使用してExcelを制御したいと考えていました。
このコードをVBA用に変更することができましたが、非常に不安定です。誰かが私がそれを安定させるのを手伝ってくれる?関数MidiIn_Eventは、十分な速度で返されない場合にクラッシュする可能性があると思いますが、間違っている可能性があります。
前もって感謝します。
c# - Windows 7 で録音中にマイクのサウンド レベルを取得する
WAV ファイルを再生および録音できる単純な録音再生アプリケーションを実装しています。
要件は次のとおりです。
1) Windows 7、Visual Studio 2010 (または 2012)、C#
2) スペック情報を含む Wav ファイルの録音、再生: samplerate 22050、mono、bitspersample 16
3) 録音中にマイクロ サウンド レベルを表示可能
1) と 2) では、lib (winmm.dll) と mciSendString() を次のように使用できます。
3)では、mciSendStringも使いたいです。次のコマンド (ステータス) を見つけました。
しかし、上記のコマンドからボリュームを取得する方法がわかりません。誰か教えてもらえますか?
参照: mciSendString() からのステータス コマンドは Microsoft doc にあります:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd798683%28v=vs.85%29.aspx
それは言う: レベル: 現在の PCM オーディオ サンプル値を返します。
wpf - WPF MediaElement と WinMM
WinMM についてできることはすべて学びました (ミキサーの開閉、コントロールの列挙など)。困惑しているのは、WPF の MediaElement が WinMM を介して私の設定を無視しているように見えることですが、Windows のボリューム ミキサーは、設定を正しく変更していることを示しています。 .
したがって、基本的には自分のコントロールでボリュームをミュートし、ボリューム ミキサーでミュートされていることを確認し、サウンドを再生して聞いてから、ボリューム ミキサーのミュート ボタンをダブルクリックして、サウンドを再生しても聞こえないようにすることができます。
Windows のボリューム ミキサーを介して WinMM API 呼び出し以上の何かが行われますが、ディスプレイは WinMM 設定を使用しています。
足りないものはありますか?
私はすべての回線を使用しましたが、Speaker/WaveOut のみが機能します。ラインからボリュームとミュートのコントロールを取得していますが、どちらも同じ効果があります。
これは、これを引き起こしている MediaElement だけです。WinMM を介してサウンドを再生する場合、またはネイティブ コントロールまたはエクスプローラーが組み込まれている場合は、ボリューム コントロールでミュートできます。
私の最初の理論は、Windows7 でテストしているため、MediaElement がアプリケーションの既定のセッションとは別のセッションに割り当てられており、どういうわけかボリューム ミキサーがアプリケーション内のすべてのセッションに影響を与えているというものです。その時点で、OS に応じて WinMM と WASAPI のどちらを使用するかを選択する必要があります。それが本当なら、WinMM は Windows の主張のように実際にはサポートされていません (下位互換性のため) が、古いテクノロジ (Winforms や AFX/MFC など) を対象としている可能性があります。
編集:私はこの回答でコードを使用しています: https://stackoverflow.com/a/294525/491837
c++ - c スレッド - mmsystem (mciSendString を使用) がサウンド ファイルを再生しないのはなぜですか?
ゲームで sfx を再生したい。最初に、いくつかの mp3 ファイルを開きますmciSendString("open Muzle.mp3 alias Muzle");
。
私の問題は、mciSendString("play Muzle from 0");
まだ少しラグが発生し、ゲームが頻繁にサウンドを再生する必要があることです。
別の質問で、スレッドを使用すると問題が解決すると読みました。私はスレッドの使用にまったく慣れていません。問題は、サウンドが再生されないことです:p。最後に cout を与えて、スレッドが正常に実行されることを確認しました。
私は今この機能を持っています:
(Sleepも無しでやってみました。スレッドが最後まで来たら削除されて音が途切れる可能性があるので必要なのかな…スレッドやmmsystemの仕組みがよくわかりません)
このShout()
関数を単純に呼び出すと、サウンドが再生され、Sleep(2000) が実行され、次にカウントされます。すべてがうまくいきました。しかし、スレッドを使用する必要があるため、次のことを試します。
エラーが発生しました:abort()が呼び出されました。スレッドを切り離す必要があるかもしれないことがわかりました:
これで、すべて正常に動作しているように見えましたが (2 秒後、コンソールに「Test woi」と出力されました)、サウンドは再生されませんでした。
うーん、すべてを読んでくれてありがとう ^.^ . この問題を解決する方法を知っていますか?