Alex Rivera | Logout

Beep on Linux in C

Asked 2012-04-09T12:03:06.430
17

I want to generate a beep sound with a specific frequency and length (for different sound signals) using the system beeper (and only the speakers if beeper is not available / accessible). I know it is possible to do this by using ioctl, but that requires root access, which I don't want.

I know I could just use the "beep" command, but that would be a dependency, which, if possible, shouldn't be used (no external dependencies at all, just the basic linux libraries and C).

What I currently have is the following code (but this requires superuser privileges to run):

#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])));
}

If there is no other way to do this, then I will use beep, but I would really like to avoid dependencies and integrate the beep directly into my script, but I'm sure somebody here will know a solution / workaround.

I don't really want external libraries as the program should be as lightweight as possible.

Edit
Report

3 Answers

5

The most basic beep is still '\a' , if your terminal supports it:

fprintf(stdout, "\aBeep!\n" );
answered 2012-04-09T15:02:04.020
3

I think the only way to do this is to either use suid to give my own program root access, or to use beep, which already has suid. I suppose I will just add one more dependency, then, as beep is not too big anyway.

Thank you for all the answers, I'm sure other libraries are great for more complex signals, but I need a very simple one!

I think this question can be marked as solved / closed, then.

If anybody finds a way to create a beep using the console without superuser-privileges, I'm still interested in this solution :)

Thank you all again.

answered 2012-04-09T12:34:05.840
0

Try using an audio library such as OpenAL.

answered 2012-04-09T12:05:42.887

Your Answer