2012-04-22 20 views
4

私は、次のコードを持っている:私はのDev-C++でのMinGWを使用して、それをコンパイルしていますWindows 7でビープ音を鳴らしても音が聞こえないのはなぜですか?

#include <windows.h> 
#include <stdio.h> 

int main(void) 
{ 
     Beep(523, 500); 
     Sleep(1000); 
     return 0; 
} 

を。私の問題は何も聞こえないということですが、私は間違いはありません。私はWindows 7を持っています。

+1

このコードは正常です。このトピックに疑問を投げかけているコードには何も問題はありません。 –

+0

@David:なぜ話題ですか?コードが構文上有効であっても、期待どおりの動作をしない場合でも、スタックオーバーフローに対してはまだ許容されていませんか?それはまだコード*についての質問です。最高のものです。 –

+0

私は@Codyに同意しますが、Soundコントロールパネルでサウンドが再生されないことを知ったので、これはシステム上の問題であり、プログラミング上の問題ではありません。スーパーユーザーに移動するように投票しました。 –

答えて

6

スピーカーをオンにします。すでにオンになっている場合は、音量を上げてください。スピーカーとサウンドカードがコンピュータにインストールされていない場合は、いくつかのものを入手してインストールしてから、もう一度プログラムを実行してみてください。

これらのすべては、Windows 7のBeep functionから何かを聞く必要があります。It no longer plays sound from the built-in hardware system speaker.代わりに、サウンドはユーザーセッションのデフォルトのサウンドデバイスに渡されます。標準ローカルユーザーセッションでは、それがサウンドカードになります。 「備考」セクションのこの重要な詳細については、このドキュメントの説明を参照してください。

以前はすべてのPCコンピュータが、プリミティブサウンドの生成に共通の8254プログラマブルインターバルタイマーチップを共有していました。 Beep関数は、そのハードウェアにビープ音を鳴らすために作成されました。

これらの古いシステムでは、ミュートと音量コントロールは、Beepには影響しません。あなたはまだトーンを聞くでしょう。トーンを消音するには、次のコマンドを使用します。

net stop beep 
sc config beep start= disabled 

その後、サウンドカードはほぼすべてのPCコンピュータで標準装備になりました。サウンドカードが普及するにつれて、メーカーは古いタイマーチップをコンピュータから取り除き始めました。このチップはサーバーコンピュータの設計からも除外されていました。その結果、Beepはチップなしのすべてのコンピュータで動作しませんでした。これは、ほとんどの開発者がMessageBeep functionを8254チップの代わりにデフォルトのサウンドデバイスを使用して呼び出すことに移ったため、これは問題ありませんでした。

最終的には、通信するハードウェアが不足しているため、Windows VistaおよびWindows XP 64-Bit EditionではBeepのサポートが削除されました。

Windows 7では、ビープ音がセッションのデフォルトのサウンドデバイスに渡されるように書き換えられました。これは通常、ターミナルサービスで実行されている場合を除いてサウンドカードです。この場合、ビープ音はクライアントで表示されます。

+0

何も変更されていません。 :/私はコントロールパネルからデフォルトサウンドの何かを変更する必要がありますか? –

+0

@ Tha:そうですね、次の場所は "サウンド"コントロールパネルです。システムサウンドがミュートされていないこと、Windowsオーディオサービスが実行中であること、「デフォルトビープ」などのサウンドが選択されていることを確認してください。 –

+0

何もミュートされていません。私は "Test"を押しても何も聞こえませんし、C#Appをコード化してAsteriskを使ってMessageBoxを表示するようにプログラムしていても、この問題はほとんどすべてのサウンド、感嘆符、アスタリスクなどにあります。私は何も聞いていない。 :/ –

関連する問題