Звуковой сигнал в Linux на C

Я хочу генерировать звуковой сигнал с определенной частотой и длиной (для различных звуковых сигналов )с помощью системного звукового сигнала (и только динамиков, если звуковой сигнал недоступен / доступный ). Я знаю, что это можно сделать с помощью ioctl, но для этого требуется root-доступ, чего я не хочу.

Я знаю, что могу просто использовать команду "beep", но это будет зависимость, которую, по возможности, не следует использовать (вообще никаких внешних зависимостей, только основные библиотеки Linux и C ).

На данный момент у меня есть следующий код (но для запуска требуются права суперпользователя):

#include <stdlib.h>
#include <fcntl.h>
#include <linux/kd.h>

int main(int argc, char *argv[])
{
 int fd = open("/dev/console", O_RDONLY);
 if (fd == -1 || argc != 3) return -1;
 return ioctl(fd, KDMKTONE, (atoi(argv[2])<<16)+(1193180/atoi(argv[1])));
}

Если нет другого способа сделать это, то я буду использовать beep, но я бы очень хотел избежать зависимостей и интегрировать звуковой сигнал прямо в мой сценарий, но я уверен, что кто-то здесь знает решение/обходной путь.

Мне не очень нужны внешние библиотеки, так как программа должна быть как можно более легкой.

12
задан omnidan 9 April 2012 в 12:03
поделиться