Как использовать динамик ПК в Linux?

Как использовать динамик ПК в Linux для программирования c/С++? Могу ли я контролировать время сигнала и частоту?

4 ответа

Взято из здесь:

#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;
}
</linux></unistd.h></sys>


Если вы действительно этого хотите, проверьте исходный код команды beep: http://www.johnath.com/beep/beep.c


Да, откройте консольное устройство (например,/dev/console или /dev/tty 0), затем выпустите на него KIOCSOUND ioctl, как описано на странице руководства console_ioctl (4).

Это yucky и Linux-specific, но я думаю, что он отвечает на ваш вопрос.

EDIT: Невероятно, есть драйвер PC-динамика в ядре для ALSA, который дает вам цифровое воспроизведение звука в динамике ПК. Его качество звука будет плохой, и он будет использовать много CPU, хотя:)


Предположительно, если на чипсете есть еще 8253 эквивалент, связанный с чем-то, приближающимся к динамику, вы можете получить к нему доступ в соответствии с регистрами данных или древними руководствами для ПК (я с облегчением признаю, что у меня больше нет этой информации в моей голове ) либо из модуля ядра, либо после вызова ioperm() как root.

Был также один раз ядро ​​PWM "аналоговый" аудио драйвер для динамика ПК. Я считаю, что в первый раз я скомпилировал ядро. Это было за несколько дней до модулей ядра, или, по крайней мере, до того, как они превратились в популярные дистрибутивы.

licensed under cc by-sa 3.0 with attribution.