This is sgi.c in view mode; [Download] [Up]
/* DAC and sound-file header support for clm on the SGI Indigo */ #include <audio.h> #include <stdio.h> #include <fcntl.h> /* from headers.c */ extern int c_read_header_with_fd (int chan); extern int c_snd_header_data_size (void); extern int c_snd_header_data_location (void); extern int c_snd_header_chans (void); extern int c_snd_header_type (void); extern int c_snd_header_srate (void); extern int c_snd_header_format (void); extern void c_update_header_with_fd(int chan, int type, int siz); int volume = 100; /* "gain" in SGI */ int setvolume (int g) { volume = g; return 0; } int getvolume (void) { return volume; } int urdac (char* arg) { long fil, audio, datasize, srate, dataloc, channels, snd_magic_number, format; long amp[4], sr[2]; int bytes_read, samps_read; short* buffer; unsigned size = 100000; /* default dac buffer size in samples */ ALconfig config; ALport audio_p; fil = open(arg,O_RDONLY); /* get header info */ c_read_header_with_fd(fil); dataloc = c_snd_header_data_location(); datasize = c_snd_header_data_size(); format = c_snd_header_format(); if (format != 1) /* 16-bit linear */ { printf("%s is not a 16-bit integer sound file.",arg); fflush(stdout); return 0; } srate = c_snd_header_srate(); channels = c_snd_header_chans(); /* initialize audio */ amp[0]=AL_LEFT_SPEAKER_GAIN; amp[1]=volume; amp[2]=AL_RIGHT_SPEAKER_GAIN; amp[3]=volume; ALsetparams(AL_DEFAULT_DEVICE,amp,4); sr[0]=AL_OUTPUT_RATE; sr[1]=srate; ALsetparams(AL_DEFAULT_DEVICE,sr,2); config = ALnewconfig(); ALsetwidth(config,AL_SAMPLE_16); ALsetchannels(config,channels); audio_p = ALopenport("dac","w",config); /* read samples */ buffer=(short *)calloc(size,sizeof(short)); lseek(fil,dataloc,SEEK_SET); while ((bytes_read = read(fil,buffer,size)) != 0) { samps_read=bytes_read/2; ALwritesamps(audio_p,buffer,samps_read); while (ALgetfilled(audio_p) > 0) sginap(1); } /* cleanup */ close(fil); ALcloseport(audio_p); ALfreeconfig(config); free(buffer); return 0; } /* main(int argc, char **argv) { char *filename; filename = argv[1]; urdac(filename); exit(0); } */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.