/* * * ao_example.c * * Written by Stan Seibert - July 2001 * * Legal Terms: * * This source file is released into the public domain. It is * distributed without any warranty; without even the implied * warranty * of merchantability or fitness for a particular * purpose. * * Function: * * This program opens the default driver and plays a 440 Hz tone for * one second. * * Compilation command line (for Linux systems): * * gcc -o ao_example ao_example.c -lao -ldl -lm * */ #include #include #include #include #define BUF_SIZE 4096 int main() { ao_device *device; ao_sample_format format; int default_driver; char *buffer; int buf_size; int sample; float freq = 440.0; int i; /* -- Initialize -- */ fprintf(stderr, "libao example program\n"); ao_initialize(); /* -- Setup for default driver -- */ default_driver = ao_default_driver_id(); memset(&format, 0, sizeof(format)); format.bits = 16; format.channels = 2; format.rate = 44100; format.byte_format = AO_FMT_LITTLE; /* -- Open driver -- */ device = ao_open_live(default_driver, &format, NULL /* no options */); if (device == NULL) { fprintf(stderr, "Error opening device.\n"); return 1; } /* -- Play some stuff -- */ buf_size = format.bits/8 * format.channels * format.rate; buffer = calloc(buf_size, sizeof(char)); for (i = 0; i < format.rate; i++) { sample = (int)(0.75 * 32768.0 * sin(2 * M_PI * freq * ((float) i/format.rate))); /* Put the same stuff in left and right channel */ buffer[4*i] = buffer[4*i+2] = sample & 0xff; buffer[4*i+1] = buffer[4*i+3] = (sample >> 8) & 0xff; } ao_play(device, buffer, buf_size); /* -- Close and shutdown -- */ ao_close(device); ao_shutdown(); return (0); }