ビープ音を含むプログラムを作成しようとしています。私は32ビットのWindowsVistaで作業しています。私はCode :: Blocks IDEこれはGNUコンパイラで実行されます。私のサンプルコードは-
#include <stdio.h>
#include <windows.h>
#include <dos.h>
int main(void)
{
Beep(750, 300);
printf("\n \n \t This is a dummy program for Beep.");
getch();
return 0;
}
インターネットで、printfで\ aを使用してビープ音を鳴らすこともできると読みました。私はそれを試しましたが、機能していません。スピーカーとサウンドカードを確認しました。すべてが完璧ですが、ビープ音は聞こえません。サンプルコードで表示した方法でも機能しません。
C標準 推奨 標準出力に_'\a'
_を書き込むと、可聴または可視のアラート信号が生成されますが、標準出力がリダイレクトされている場合は機能しません。同様に、一部の新しいコンピューターには、Windows Beep()
および一部の端末が依存するPCブザーがありません。デスクトップアプリケーションでWindowsPCにアラートサウンドを再生させるには、Windows固有の MessageBeep
関数を呼び出すことができます。この関数は、サウンドを「非同期に」再生します。プログラムは引き続き実行されます)。ユーザーは、サウンドコントロールパネルで、これら4つの値のそれぞれに関連付けるサウンドを構成できます。
_#include <windows.h>
/* Include one of these in a function */
MessageBeep(MB_OK); /* play Windows default beep */
MessageBeep(MB_ICONINFORMATION); /* play asterisk sound */
MessageBeep(MB_ICONQUESTION); /* play question sound */
MessageBeep(MB_ICONWARNING); /* play warning sound */
_
MessageBeep()
は_User32.dll
_で定義されているため、リンクエラーが発生する場合は、対応するインポートライブラリにリンクしていることを確認してください。 MinGW GCC(Code :: Blocksのコンパイラ)で、リンカーに渡されるライブラリのリストに_-lUser32
_を追加します。
_MessageBeep(-1);
_
MSDNドキュメントから:
MessageBeep関数
波形音を鳴らします。各サウンドタイプの波形サウンドは、レジストリのエントリによって識別されます。
BOOL WINAPI MessageBeep( _In_ UINT uType );
... ...
uType
の値:_0xFFFFFFFF
_意味:単純なビープ音。サウンドカードが利用できない場合、サウンドはスピーカーを使用して生成されます。
また、驚いたことに、私はそれをテストしました。少なくともWindows7 32ビット(そして確かにWindows Vistaも)は、リング3プロセスで使用可能な古い8253 I/Oポートとキーボードポートに対して何らかのエミュレーションを行うため、sound()
との古い実装はnosound()
が機能するはずです。残念ながら、ATMで利用できる32ビットマシンがないため、これを確認できません。
ビープ音は、Windows7以降のWindowsでも機能します。形式は次のとおりです。
Beep(frequency, duration) where frequency is the pitch in hertz, and duration is the length in milliseconds
https://msdn.Microsoft.com/en-us/library/windows/desktop/ms679277(v = vs.85).aspx を参照してください。
これは、Visual Studio2017でコンパイルされたWindows7で動作します。問題はありません。
printf("\n Bad request - check status code parameter\a");
Windows.hの Beep()
関数を実際に機能させるには、関数のドキュメントに記載されているように、PCに「PCスピーカー」ブザーが必要です。したがって、この機能のサポートはWindows Vistaで明らかに廃止されたため、かなり古いPCとWindows XP以前)が必要です。
新しいWindowsバージョンでは、Beep()
を呼び出すと、サウンドカードを使用して代わりにスピーカーからビープ音が鳴ります。ビープ音が鳴らない場合は、プログラムに関係していない可能性がありますが、特定のコンピューターハードウェアに関係している可能性があります。