2 * $Id: audio.h,v 1.10 2007-10-27 05:47:21 nkeynes Exp $
4 * Audio engine, ie the part that does the actual work.
6 * Copyright (c) 2005 Nathan Keynes.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
19 #define dream_audio_H 1
23 #include <glib/gtypes.h>
29 #define AUDIO_CHANNEL_COUNT 64
31 #define AUDIO_FMT_8BIT 0
32 #define AUDIO_FMT_16BIT 1
33 #define AUDIO_FMT_ADPCM 2
34 #define AUDIO_FMT_MONO 0
35 #define AUDIO_FMT_STEREO 4
36 #define AUDIO_FMT_SIGNED 0
37 #define AUDIO_FMT_UNSIGNED 8
39 #define AUDIO_FMT_16ST (AUDIO_FMT_16BIT|AUDIO_FMT_STEREO)
41 typedef enum { LOOP_OFF = 0, LOOP_ON = 1, LOOP_LOOPED = 2 } loop_t;
43 typedef struct audio_channel {
45 uint32_t posn; /* current sample #, 0 = first sample */
52 int pan; /* 0 (left) .. 31 (right) */
55 /* Envelope etc stuff */
62 typedef struct audio_buffer {
63 uint32_t length; /* Bytes */
64 uint32_t posn; /* Bytes */
69 typedef struct audio_driver {
71 gboolean (*set_output_format)( uint32_t sample_rate, uint32_t format );
72 gboolean (*process_buffer)( audio_buffer_t buffer );
75 extern struct audio_driver audio_null_driver;
76 extern struct audio_driver audio_esd_driver;
79 * Set the output driver, sample rate and format. Also initializes the
80 * output buffers, flushing any current data and reallocating as
81 * necessary. Must be called before attempting to generate any audio.
83 gboolean audio_set_driver( audio_driver_t driver, uint32_t samplerate,
87 * Mark the current write buffer as full and prepare the next buffer for
88 * writing. Returns the next buffer to write to.
89 * If all buffers are full, returns NULL.
91 audio_buffer_t audio_next_write_buffer();
94 * Mark the current read buffer as empty and return the next buffer for
95 * reading. If there is no next buffer yet, returns NULL.
97 audio_buffer_t audio_next_read_buffer();
100 * Mix a single output sample and append it to the output buffers
102 void audio_mix_samples( int num_samples );
105 * Retrieve the channel information for the channel, numbered 0..63.
107 audio_channel_t audio_get_channel( int channel );
109 void audio_start_stop_channel( int channel, gboolean start );
110 void audio_start_channel( int channel );
111 void audio_stop_channel( int channel );
113 void audio_save_state( FILE *f );
114 int audio_load_state( FILE *f );
.