Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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 "аналоговый" аудио драйвер для динамика ПК. Я считаю, что в первый раз я скомпилировал ядро. Это было за несколько дней до модулей ядра, или, по крайней мере, до того, как они превратились в популярные дистрибутивы.