aboutsummaryrefslogtreecommitdiffstats
path: root/src/common/includes/Audio/audio.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/includes/Audio/audio.h')
-rw-r--r--src/common/includes/Audio/audio.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/common/includes/Audio/audio.h b/src/common/includes/Audio/audio.h
new file mode 100644
index 0000000..006f82e
--- /dev/null
+++ b/src/common/includes/Audio/audio.h
@@ -0,0 +1,50 @@
+#ifndef __AUDIO_H__
+#define __AUDIO_H__
+
+#include <stdint.h>
+#include <stdbool.h>
+
+typedef void AudioCallbackFunction(void *context,int buffer);
+
+#define Audio8000HzSettings 256,5,12,1,8000
+#define Audio16000HzSettings 213,2,13,0,16000
+#define Audio32000HzSettings 213,2,6,1,32000
+#define Audio48000HzSettings 258,3,3,1,48000
+#define Audio96000HzSettings 344,2,3,1,96000
+#define Audio22050HzSettings 429,4,9,1,22050
+#define Audio44100HzSettings 271,2,6,0,44100
+#define AudioVGAHSyncSettings 419,2,13,0,31475 // 31475.3606. Actual VGA timer is 31472.4616.
+
+#define AUDIO_BUF_LEN 4096
+
+
+// Initialize and power up audio hardware. Use the above defines for the parameters.
+// Can probably only be called once.
+void audio_initialize(int plln,int pllr,int i2sdiv,int i2sodd, int rate);
+
+// Power up and down the audio hardware.
+void audio_on();
+void audio_off();
+
+// Set audio volume in steps of 0.5 dB. 0xff is +12 dB.
+void audio_set_volume(int volume);
+
+// Output one audio sample directly to the hardware without using DMA.
+void audio_output_sample(int16_t sample);
+void audio_output_sample_without_blocking(int16_t sample);
+
+// Start and stop audio playback using DMA.
+// Callback is optional, and called whenever a new buffer is needed.
+void audio_play_with_callback(AudioCallbackFunction *callback,void *context);
+void audio_stop();
+
+// Provide a new buffer to the audio DMA. Output is double buffered, so
+// at least two buffers must be maintained by the program. It is not allowed
+// to overwrite the previously provided buffer until after the next callback
+// invocation.
+// Buffers must reside in DMA1-accessible memory, that is, the 128k RAM bank,
+// or flash.
+void audio_provide_buffer(void *samples,int numsamples);
+bool audio_provide_buffer_without_blocking(void *samples,int numsamples);
+
+#endif