beep / sound über pc-speaker ausgeben?

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
deb
Beiträge: 82
Registriert: 18.09.2005 13:30:20

beep / sound über pc-speaker ausgeben?

Beitrag von deb » 06.03.2006 16:16:32

Hi.

Wie kann man eigentlich einen Biepton über den PC-Speaker ausgeben.
Die Methode mit echo funktioniert leider nur wenn man angemeldet ist, nicht aber aus cronjob herraus. (bei mir zumindest ist das leider so)

Außerdem: Wie könnte man verschiedene Töne erzeugen. Kann man an irgendwelche devices Frequenz leiten?

Gruß

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 06.03.2006 16:46:07

Dass echo nicht klappt im Cron-Job ist klar, da du da kein Terminal offen hast, das das Steuerzeichen fuer den Beep interpretiert.

storm
Beiträge: 1581
Registriert: 01.05.2004 13:21:26
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DE

Beitrag von storm » 06.03.2006 17:11:22

Entweder (die einfachere Variante) du schaust dir mal das Paket beep an, oder du programmierst dir gleich selbst deinen gewünschten Sound in C mittels system-call, hint: ioctl. :)


ciao, storm
drivers/ata/libata-core.c: /* devices which puke on READ_NATIVE_MAX */

deb
Beiträge: 82
Registriert: 18.09.2005 13:30:20

Beitrag von deb » 06.03.2006 19:04:49

storm hat geschrieben:Entweder (die einfachere Variante) du schaust dir mal das Paket beep an, oder du programmierst dir gleich selbst deinen gewünschten Sound in C mittels system-call, hint: ioctl. :)
Ich kann Basic, ich kann Comal, ich kann VB, ich kann PHP, ich kann SQL, ich kann BASH, ich kan AutoIt3, ich kann WSH, ich kann cmd,
doch C - leider nein , keine Ahnung:-(

Bring mich bitte (*please*) mal auf den richtigen weg:

/root/proejct/beep//beep.c

Code: Alles auswählen

/********
/* beep *
/********

#include <stdio.h>
#include <stdlib.h>
#include <ioctl.h>

main()
{
	...........???...........
}

Und wie mache ich dieses dann ausführbar?

yeti

Beitrag von yeti » 06.03.2006 19:12:32

Code: Alles auswählen

echo -en '\a' > /dev/console
bzw

Code: Alles auswählen

echo -en "\e[10;440]\e[11;900]\a" > /dev/console
sleep 1
echo -en "\e[10;660]\e[11;900]\a" > /dev/console
sleep 1
echo -en "\e[10;880]\e[11;900]\a" > /dev/console

storm
Beiträge: 1581
Registriert: 01.05.2004 13:21:26
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DE

Beitrag von storm » 07.03.2006 11:42:14

deb hat geschrieben: ...
doch C - leider nein , keine Ahnung:-(
...
Und wie mache ich dieses dann ausführbar?
Mist, da hab ich ja was angerichtet. :)
Versuch mal lieber den Vorschlag von yeti (da war doch noch was!), der ist sicherer.

Aber zum spielen:

Code: Alles auswählen

/*
 *  compile: gcc -Wall beep.c -obeep
 *
 *  you have to be root to run this
 *    sudo ./beep
 * */

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/kd.h>

// high word: duration (in ticks)
// low word:  tone value (reverse: higher values mean lower frequencies)
//
#define SOUND 0x00FF03BF

int main (int argc, char *argv[])
{   
    
    int fd;
    int ret;
    
    ret = 0;

    if ( (fd = open("/dev/console", O_WRONLY)) == -1) {
        perror("cannot open /dev/console!\n");
        ret = 1;
    }
    else{
        // here it beeps
        ret = ioctl (fd, KDMKTONE, (long) SOUND);
        close(fd);
    }
    
    return ret;
}
// vim:tw=80:ts=4:
Das ist eine Variante des ioctl um den Speaker zu nutzen, die Zweite wäre für diesen Zweck eigentlich besser geeignet.

ciao, storm
drivers/ata/libata-core.c: /* devices which puke on READ_NATIVE_MAX */

Antworten