2

ビープ音を使用して良い結果と悪い結果を示す Visual C++/CLI アプリがあります (ユーザーが画面を見ることができない場合に使用されます)。

現在、悪い結果には低音のビープ音を使用し、良い結果には高音のビープ音を使用しています。

if( goodResult == true )
{
    Beep(1000, 40);
}
else
{
    Beep(2000, 20);
}

これは私の Vista ラップトップでは問題なく動作しますが、他のラップトップで試してみたところ、サウンドの再生時間が短い (ビープ音よりもクリック音のように聞こえる) ように見えるものや、サウンドがまったく再生されないものもあります。

そこで、ここで 2 つの質問があります。

  1. より確実なビープ機能はありますか?
  2. 代わりに短い .wav ファイルまたは同様のものを再生できる (簡単な) 方法はありますか (推奨される解決策)。
4

5 に答える 5

3

Beep機能は、従来 PC のスピーカーを使用していましたが、現在では多かれ少なかれ時代遅れになっていると思います。機能はラップトップの BIOS によって処理されるため、ハードウェアに依存していると思います。代わりに、PC:s サウンドカードを使用してサウンドを再生することをお勧めします。

Audacityなどで 2 つのトーンを WAV ファイルとして作成し、 PlaySoundなどを使用してそれらを再生します。

于 2010-06-15T10:58:21.090 に答える
1

Krumelur の回答に基づいて、実行可能ファイルに .wav を埋め込むかなりきちんとしたソリューションを得ました。SoundPlayer関数の代わりに使用しPlaySoundます。

Visual C++ / CLI プロジェクトの場合、埋め込みリソースの追加は、.net がサポートする他の言語とは少し異なるようです。

  1. プロジェクトを右クリックし、 を選択しますProperties
  2. に移動しConfiguration Properties -> Linker -> Inputます。
  3. 埋め込みたい .wav ファイルへのパスを追加します (私の場合は$(ProjectDir)\Audio\PingSend.wav)。

.wav の 1 つを再生するには、次のように呼び出します。

System::IO::Stream^ s = Assembly::GetExecutingAssembly()->GetManifestResourceStream("PingSend.wav");
System::Media::SoundPlayer^ pingPlayer = gcnew System::Media::SoundPlayer(s);
pingPlayer->Play();

..新しいスレッドでサウンドを再生する必要があります。

于 2010-06-15T14:04:01.420 に答える
0

Windows MessageBeep機能は、デフォルトのエラー、OK、またはアラート システム サウンドを正しいパラメータで再生します。そのため、実際に再生されるサウンドと音量はユーザーの制御下にありますが、エラーまたは OK として認識できるはずです。

于 2010-06-15T11:05:08.317 に答える
0

おそらく、音声合成が適切かもしれませんが、確かではありません。ユーザーは盲目であると想定しています。

http://msdn.microsoft.com/en-us/library/system.speech.synthesis.speechsynthesizer.aspx

于 2010-06-15T10:53:41.760 に答える
0

winmm ライブラリを使用した解決策があるようです。

于 2010-06-15T11:00:58.143 に答える