summaryrefslogtreecommitdiffstats
path: root/gsm_audio.c
diff options
context:
space:
mode:
Diffstat (limited to 'gsm_audio.c')
-rw-r--r--gsm_audio.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/gsm_audio.c b/gsm_audio.c
new file mode 100644
index 0000000..751f354
--- /dev/null
+++ b/gsm_audio.c
@@ -0,0 +1,54 @@
+/*****************************************************************************\
+** **
+** LCR **
+** **
+**---------------------------------------------------------------------------**
+** Copyright: Andreas Eversberg **
+** **
+** gsm audio **
+** **
+\*****************************************************************************/
+
+extern "C" {
+#include "/usr/local/include/gsm.h"
+
+
+/* create gsm instance */
+void *gsm_audio_create(void)
+{
+ int value = 1;
+ gsm handle;
+
+ handle = gsm_create();
+ if (handle)
+ gsm_option(handle, GSM_OPT_WAV49, &value);
+
+ return handle;
+}
+
+/* free gsm instance */
+void gsm_audio_destroy(void *arg)
+{
+ gsm_destroy((gsm)arg);
+}
+
+/* decode frame into samples, return error */
+int gsm_audio_decode(void *arg, unsigned char *frame, signed short *samples)
+{
+ int value = 0;
+
+ gsm_option((gsm)arg, GSM_OPT_FRAME_INDEX, &value);
+ return gsm_decode((gsm)arg, (gsm_byte *)frame, (gsm_signal *)samples);
+}
+
+/* encode samples into frame */
+void gsm_audio_encode(void *arg, signed short *samples, unsigned char *frame)
+{
+ int value = 0;
+
+ gsm_option((gsm)arg, GSM_OPT_FRAME_INDEX, &value);
+ gsm_encode((gsm)arg, (gsm_signal *)samples, (gsm_byte *)frame);
+}
+
+}
+