486 #include #include #include #include #include #include #include "wav.h" int play_wav(char *wav_name) { struct WAVhdr_str WAVhdr; char *audiobuf; int fd, audio, abuf_size, samplesize, stereo, speed, to_read, n; if ((audio = open("/dev/dsp", O_WRONLY)) == -1) { perror("/dev/dsp"); return 0; } if ((fd = open(wav_name, O_RDONLY)) == -1) { perror("open"); return 0; } read (fd, &WAVhdr, 44); ioctl(audio, SNDCTL_DSP_GETBLKSIZE, &abuf_size); audiobuf = malloc(abuf_size); samplesize = (int)WAVhdr.bits_per_sample; ioctl(audio, SNDCTL_DSP_SAMPLESIZE, &samplesize); stereo = (WAVhdr.channels == 2) ? 1 : 0; ioctl(audio, SNDCTL_DSP_STEREO, &stereo); speed = WAVhdr.samp_rate; ioctl(audio, SNDCTL_DSP_SPEED, &speed); to_read = WAVhdr.data_length; while (to_read) { n = (to_read > abuf_size) ? abuf_size : to_read; read(fd, audiobuf, n); write(audio, audiobuf, n); to_read -= n; } close(audio); close(fd); free(audiobuf); return 1; } . 0