From 74af58587359206ef92249d18e4830c40cac0bc5 Mon Sep 17 00:00:00 2001 From: Jedidiah Barber Date: Mon, 19 Jun 2023 22:15:44 +1200 Subject: Initial commit --- example/ao_example.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 example/ao_example.c (limited to 'example/ao_example.c') diff --git a/example/ao_example.c b/example/ao_example.c new file mode 100644 index 0000000..a5642a0 --- /dev/null +++ b/example/ao_example.c @@ -0,0 +1,87 @@ +/* + * + * 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); +} -- cgit