web-dev-qa-db-ja.com

WindowsのCでビープ音を鳴らす方法は?

ビープ音を含むプログラムを作成しようとしています。私は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を使用してビープ音を鳴らすこともできると読みました。私はそれを試しましたが、機能していません。スピーカーとサウンドカードを確認しました。すべてが完璧ですが、ビープ音は聞こえません。サンプルコードで表示した方法でも機能しません。

7
Ashish Ahuja

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_を追加します。

8
Damian Yerrick
_MessageBeep(-1);
_

MSDNドキュメントから:

MessageBeep関数

波形音を鳴らします。各サウンドタイプの波形サウンドは、レジストリのエントリによって識別されます。

BOOL WINAPI MessageBeep( _In_ UINT uType ); ... ...

uTypeの値:_0xFFFFFFFF_

意味:単純なビープ音。サウンドカードが利用できない場合、サウンドはスピーカーを使用して生成されます。


また、驚いたことに、私はそれをテストしました。少なくともWindows7 32ビット(そして確かにWindows Vistaも)は、リング3プロセスで使用可能な古い8253 I/Oポートとキーボードポートに対して何らかのエミュレーションを行うため、sound()との古い実装はnosound()が機能するはずです。残念ながら、ATMで利用できる32ビットマシンがないため、これを確認できません。

1
mcleod_ideafix

ビープ音は、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 を参照してください。

0
user8137222

これは、Visual Studio2017でコンパイルされたWindows7で動作します。問題はありません。

printf("\n Bad request - check status code parameter\a");
0
Mats Stenfeldt

Windows.hの Beep() 関数を実際に機能させるには、関数のドキュメントに記載されているように、PCに「PCスピーカー」ブザーが必要です。したがって、この機能のサポートはWindows Vistaで明らかに廃止されたため、かなり古いPCとWindows XP以前)が必要です。

新しいWindowsバージョンでは、Beep()を呼び出すと、サウンドカードを使用して代わりにスピーカーからビープ音が鳴ります。ビープ音が鳴らない場合は、プログラムに関係していない可能性がありますが、特定のコンピューターハードウェアに関係している可能性があります。

0
Lundin