2010-12-15 8 views
12

c/C++プログラミングのためにlinuxでPCスピーカーを使用するには? ビープ音と周波数を制御することはできますか?linuxでPCスピーカーを使用するには?

+0

のalsa-libのhttp://www.alsa-project.org/alsa-doc/ alsa-lib/ –

+5

$ 10以下のサウンドカードを手に入れることができます。あなたはもうPCスピーカーの近くのどこにも行くビジネスはありません。 –

+4

また、12の質問と回答がありません。あなたが本当に将来もっと多くの質問をしたいのなら、**それを修正してください。 – ereOn

答えて

2

おそらく8253と同等のスピーカーを近似何かに接続されているチップセットに残っていた場合、あなたがアクセスすることができますカーネルモジュールから、またはルートとしてioperm()を呼び出した後で、データシートのレジスタや古典的なPCガイド(私はもはや私の頭にこの情報がないことを認めて安心しています)に従います。

また、PCスピーカーのカーネルPWM「アナログ」オーディオドライバもありました。カーネルをコンパイルしたのはこれが初めてだったと思います。これはカーネルモジュールの前の時代であったが、少なくとも一般的なディストリビューションになる前はそうだった。

+1

これは実際には標準カーネルのデバイスドライバです(ロードされていない可能性があります)。それを使わないのはなぜですか? – MarkR

+0

はいそれが利用可能であるか利用可能である場合、それを使用するのがおそらく好ましいでしょう。 –

3

はい、コンソールデバイス(/ dev/consoleまたは/ dev/tty0など)を開き、console_ioctl(4)のマニュアルページに記載されているように、KIOCSOUND ioctlを発行します。

これはおかしなことですが、Linux固有の問題ですが、あなたの質問に答えると思います。


EDIT:Unbelivablyは、あなたのPCのスピーカーでデジタルサウンドの再生を与えるALSAのためのカーネル内のPCスピーカードライバがあります。その音質が悪くなるとそれがhereから撮影:)

9

もののCPUを大量に使用します。

#include <sys/ioctl.h> 
#include <unistd.h> 
#include <linux/kd.h> 
int main(void) 
{ 
    int freq[] = { /* C D E F G A B C */ 
        523, 587, 659, 698, 784, 880, 988, 1046 }; 
    int i; 

    for (i=0; i<8; i++) 
    { 
      ioctl(STDOUT_FILENO, KIOCSOUND, 1193180/freq[i]); 
      usleep(500000); 
    } 
    ioctl(STDOUT_FILENO, KIOCSOUND, 0); /*Stop silly sound*/ 
    return 0; 
} 
関連する問題