Как использовать динамик ПК в Linux для программирования c/С++? Могу ли я контролировать время сигнала и частоту?
Как использовать динамик ПК в Linux?
Ответ 1
Взято из здесь:
#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;
}
Ответ 2
Если вы действительно этого хотите, проверьте исходный код команды beep: http://www.johnath.com/beep/beep.c
Ответ 3
Да, откройте консольное устройство (например,/dev/console или /dev/tty 0), затем выпустите на него KIOCSOUND ioctl, как описано на странице руководства console_ioctl (4).
Это yucky и Linux-specific, но я думаю, что он отвечает на ваш вопрос.
EDIT: Невероятно, есть драйвер PC-динамика в ядре для ALSA, который дает вам цифровое воспроизведение звука в динамике ПК. Его качество звука будет плохой, и он будет использовать много CPU, хотя:)
Ответ 4
Предположительно, если на чипсете есть еще 8253 эквивалент, связанный с чем-то, приближающимся к динамику, вы можете получить к нему доступ в соответствии с регистрами данных или древними руководствами для ПК (я с облегчением признаю, что у меня больше нет этой информации в моей голове ) либо из модуля ядра, либо после вызова ioperm() как root.
Был также один раз ядро PWM "аналоговый" аудио драйвер для динамика ПК. Я считаю, что в первый раз я скомпилировал ядро. Это было за несколько дней до модулей ядра, или, по крайней мере, до того, как они превратились в популярные дистрибутивы.