> I wanted to do a simple task. I just want to playback a raw file (16BIT, > stereo, 44100Hz). So I used the alsa_pcm_seq-howto and compied a bit of code > from it. But it doesn't work. I get the device read for playing and I get > sound... But it's just noise. I'm frustrated. I tried to copy the relevant > part out of the aplay-sources, but they have so many config stuff... Can > anyone help me with a bit of code or a place where I should just get some > code > for only:
Moin > 1. opening a raw-file Use functions open() read() close() or fopen() fread() fclose() Examples deutsch http://pronix.de/modules/C/openbook/ http://pronix.de/modules/C/openbook/c_programmierung_19_5.php#25 #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #ifdef __unix__ #include <unistd.h> #elif __MSDOS__ || __WIN32__ || _MSC_VER #include <io.h> #endif int main() { int fh; if((fh=open("adress.txt",O_RDWR|O_CREAT|O_TRUNC))==-1) { printf("Fehler bei open()…\n"); exit (0); } close(fh); return 0; } 2. setting up the alsa-driver for playbakc sorry This is for oss int audio_fd; /*----*/void open_sound_device(void){ /*----*/ int format; int stereo = 1; int rate = 44100; /*----*/ if ((audio_fd = open("/dev/dsp", O_WRONLY , 0)) == -1) /*----*/ { /*----*/ perror("/dev/dsp"); /*----*/ exit(1); /*----*/ } /*----*/ format = AFMT_S16_LE; /*----*/ if (ioctl(audio_fd, SNDCTL_DSP_SETFMT, &format)==-1) /*----*/ { /*----*/ perror("SNDCTL_DSP_SETFMT"); exit(1); /*----*/ } /*----*/ if (format != AFMT_S16_LE) /*----*/ { fprintf(stderr,"Output format not set correctly"); } /*----*/ if (ioctl(audio_fd, SNDCTL_DSP_STEREO, &stereo)==-1) /*----*/ { /*----*/ perror("SNDCTL_DSP_STEREO"); exit(1); /*----*/ } /*----*/ if (ioctl(audio_fd, SNDCTL_DSP_SPEED, &rate)==-1) /*----*/ { /* Fatal error */ /*----*/ perror("SNDCTL_DSP_SPEED"); exit(1); /*----*/ } /*----*/} // o s d // /*----*/void close_sound_device(void) /*----*/{ /*----*/ close(audio_fd); /*----*/} 3. Read data from the file and write it to the soundcard. status = read(fdi, adat , sizeof( adat )); /* record some sound */ ///// wird etwas gemacht mit adat z.b. audio_buffer[i] = adat[i]; write(audio_fd , audio_buffer , sizeof( audio_buffer ) ); Ralfs K
