Libao and pyao

libao provides a simple API for audio output. pyao is Python bindings for libao.

Installation

 * 1) emerge pyao

Test
$ vim libaotest.c Enter this test program: /* C IMPLEMENTAION FILE ______________________________________________ vim:textwidth=100:tabstop=8 *              file : libaotest.c  *             author : Jakob Schmid *             notes : based on original source by Stan Seibert - July 2001 *                     LEGAL TERMS of the original source: *                     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. _______________________________________________________________________________________________ */

// INCLUDES _______________________________________________________________________________________
 * 1) include 
 * 2) include 
 * 3) include 

// DEFINITIONS ____________________________________________________________________________________
 * 1) 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;

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(freq = 50; freq < 2000; freq += 200) {        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); }

$ gcc -lao -ldl -lm -o libaotest libaotest.c