You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.4 KiB
64 lines
1.4 KiB
/* |
|
* ao_example.c |
|
* Written by Stan Seibert - July 2001 |
|
* |
|
* Compilation command line (for Linux systems): |
|
* gcc -o ao_example ao_example.c -lao -ldl -lm |
|
*/ |
|
|
|
#include <stdio.h> |
|
#include <string.h> |
|
#include <ao/ao.h> |
|
#include <math.h> |
|
|
|
#define BUF_SIZE 4096 |
|
|
|
int main(int argc, char **argv) |
|
{ |
|
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); |
|
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); |
|
}
|
|
|