2010-12-15 11 views
12

Jak używać głośnika PC w Linuksie do programowania w języku c/C++? Czy mogę kontrolować czas i częstotliwość sygnału dźwiękowego?Jak używać głośnika PC w systemie Linux?

+0

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

+5

Możesz otrzymać kartę dźwiękową za mniej niż 10 USD. Nie masz już żadnego biznesu w pobliżu głośnika PC. –

+4

Również 12 pytań i brak akceptowanych odpowiedzi. Jeśli naprawdę chcesz zadać więcej pytań w przyszłości, ** napraw to **. – ereOn

Odpowiedz

2

Przypuszczalnie jeśli jest nadal 8253 równowartość w chipset podłączony do czegoś zbliżenie głośnik, można uzyskać dostęp Zgodnie z rejestrem danych lub starożytnymi przewodnikami na PC (z ulgą przyznaję, że nie mam już tych informacji w mojej głowie) albo z modułu jądra, albo po wywołaniu ioperm() jako root.

Był też kiedyś sterownik PWM "analogowy" dla głośnika PC. Wierzę, że po raz pierwszy skompilowałem jądro. To było w czasach poprzedzających moduły jądra, a przynajmniej zanim trafili do popularnych dystrybucji.

+1

W standardowym jądrze istnieje sterownik urządzenia (może nie być załadowany). Dlaczego nie skorzystać z tego? – MarkR

+0

Tak, prawdopodobnie jest to lepsze rozwiązanie, jeśli jest lub może być dostępne. –

3

Tak, otwórz konsolowe urządzenie (takie jak/dev/console lub/dev/tty0), a następnie wprowadź do niego ioctl KIOCSOUND, zgodnie z opisem na stronie podręcznika console_ioctl (4).

To jest paskudne i specyficzne dla systemu Linux, ale myślę, że odpowiada na twoje pytanie.


EDIT: unbelivably, istnieje sterownik PC-głośnik w jądrze dla ALSA, który daje cyfrowego odtwarzania dźwięku w głośniku komputera. Jego jakość dźwięku będzie słaba i będzie używać dużo CPU chociaż :)

9

zaczerpnięte z here:

#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; 
} 
Powiązane problemy