Hallo Zusammen
Ich bin gleich enwenig ab C programmieren. Ich kompiliere meine Programme natürlich miti dem gcc.
Ich möchte nun gerne auf der Soundkarte möglichst einfach einen Sinus-Ton mit einer bestimmen Frequenz ausgeben.
Kennt jemand eine Anleitung, wie das geht?
Vielen Dank für eure Hilfe!
cumi
Zugriff auf die Soundkarte mit C
Ganz alter Code, nutzt noch OSS.
Schau dir mal das modernere ALSA API an, z.B. hier: http://equalarea.com/paul/alsa-audio.html
(compilieren mit gcc Programm.c -lm -oAusgabedateiname)
Schau dir mal das modernere ALSA API an, z.B. hier: http://equalarea.com/paul/alsa-audio.html
Code: Alles auswählen
#include <linux/soundcard.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdarg.h>
#include <math.h>
#ifndef M_PI
#define M_PI 3.141592653589793
#endif
int main()
{
int sd;
int fmt=AFMT_S16_LE;
int rate=22050;
int stereo=0;
int i;
static signed short buffer[22050];
sd = open("/dev/dsp", O_WRONLY);
if (!sd)
perror("Unable to open /dev/dsp!");
if (ioctl(sd, SNDCTL_DSP_RESET)<0)
perror("Unable to reset dsp");
if (ioctl(sd, SNDCTL_DSP_SPEED, &rate)<0)
perror("Unable to set rate");
if (ioctl(sd, SNDCTL_DSP_STEREO, &stereo)<0)
perror("unable to set stereo");
if (ioctl(sd, SNDCTL_DSP_SETFMT, &fmt)<0)
perror("unable to set format");
for(i=0;i<22050;i++) {
buffer[i] = 32767*sin(i/22050.*M_PI*440 );
}
write(sd, buffer, sizeof(buffer));
close(sd);
return 0;
}