1 /* GSequencer - Advanced GTK Sequencer
2  * Copyright (C) 2005-2021 Joël Krähemann
3  *
4  * This file is part of GSequencer.
5  *
6  * GSequencer is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * GSequencer is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with GSequencer.  If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef __AGS_AUDIO_BUFFER_UTIL_H__
21 #define __AGS_AUDIO_BUFFER_UTIL_H__
22 
23 #include <glib.h>
24 #include <glib-object.h>
25 
26 #include <ags/libags.h>
27 
28 #ifdef __APPLE__
29 #include <AudioToolbox/AudioToolbox.h>
30 #endif
31 
32 G_BEGIN_DECLS
33 
34 #define AGS_TYPE_AUDIO_BUFFER_UTIL         (ags_audio_buffer_util_get_type())
35 
36 typedef struct _AgsAudioBufferUtil AgsAudioBufferUtil;
37 
38 struct _AgsAudioBufferUtil
39 {
40   //empty
41 };
42 
43 GType ags_audio_buffer_util_get_type(void);
44 
45 #define AGS_AUDIO_BUFFER_S8(ptr) ((gint8 *)(ptr))
46 #define AGS_AUDIO_BUFFER_S16(ptr) ((gint16 *)(ptr))
47 #define AGS_AUDIO_BUFFER_S24(ptr) ((gint32 *)(ptr))
48 #define AGS_AUDIO_BUFFER_S32(ptr) ((gint32 *)(ptr))
49 #define AGS_AUDIO_BUFFER_S64(ptr) ((gint64 *)(ptr))
50 #define AGS_AUDIO_BUFFER_FLOAT(ptr) ((gfloat *)(ptr))
51 #define AGS_AUDIO_BUFFER_DOUBLE(ptr) ((gdouble *)(ptr))
52 #define AGS_AUDIO_BUFFER_COMPLEX(ptr) ((AgsComplex *)(ptr))
53 
54 #define AGS_AUDIO_BUFFER_UTIL_S8_TO_COMPLEX(x_val, x_retval) { double complex l_z; \
55     l_z = ((double) x_val / (double) G_MAXINT8) + I * 0;					\
56     ags_complex_set(x_retval[0], l_z); }
57 #define AGS_AUDIO_BUFFER_UTIL_S16_TO_COMPLEX(x_val, x_retval) { double complex l_z; \
58     l_z = ((double) x_val / (double) G_MAXINT16) + I * 0;			\
59     ags_complex_set(x_retval[0], l_z); }
60 #define AGS_AUDIO_BUFFER_UTIL_S24_TO_COMPLEX(x_val, x_retval) { double complex l_z; \
61     l_z = ((double) x_val / (double) (0xffffff - 1)) + I * 0;				\
62     ags_complex_set(x_retval[0], l_z); }
63 #define AGS_AUDIO_BUFFER_UTIL_S32_TO_COMPLEX(x_val, x_retval) { double complex l_z; \
64     l_z = ((double) x_val / (double) G_MAXINT32) + I * 0;				\
65     ags_complex_set(x_retval[0], l_z); }
66 #define AGS_AUDIO_BUFFER_UTIL_S64_TO_COMPLEX(x_val, x_retval) { double complex l_z; \
67     l_z = ((double) x_val / (double) G_MAXINT64) + I * 0;				\
68     ags_complex_set(x_retval[0], l_z); }
69 #define AGS_AUDIO_BUFFER_UTIL_FLOAT_TO_COMPLEX(x_val, x_retval) { double complex l_z; \
70     l_z = (x_val) + I * 0;						\
71     ags_complex_set(x_retval[0], l_z); }
72 #define AGS_AUDIO_BUFFER_UTIL_DOUBLE_TO_COMPLEX(x_val, x_retval) { double complex l_z; \
73     l_z = (x_val) + I * 0;						\
74     ags_complex_set(x_retval[0], l_z); }
75 
76 #define AGS_AUDIO_BUFFER_UTIL_COMPLEX_TO_S8(x_val, x_retval) { double complex l_z; \
77     l_z = ags_complex_get(x_val);					\
78     x_retval[0] = (gint8) ((double) G_MAXINT8 * creal(l_z)); }
79 #define AGS_AUDIO_BUFFER_UTIL_COMPLEX_TO_S16(x_val, x_retval) { double complex l_z; \
80     l_z = ags_complex_get(x_val);					\
81     x_retval[0] = (gint16) ((double) G_MAXINT16 * creal(l_z)); }
82 #define AGS_AUDIO_BUFFER_UTIL_COMPLEX_TO_S24(x_val, x_retval) { double complex l_z; \
83     l_z = ags_complex_get(x_val);					\
84     x_retval[0] = (gint32) ((double) (0xffffff - 1) * creal(l_z)); }
85 #define AGS_AUDIO_BUFFER_UTIL_COMPLEX_TO_S32(x_val, x_retval) { double complex l_z; \
86     l_z = ags_complex_get(x_val);					\
87     x_retval[0] = (gint32) ((double) G_MAXINT32 * creal(l_z)); }
88 #define AGS_AUDIO_BUFFER_UTIL_COMPLEX_TO_S64(x_val, x_retval) { double complex l_z; \
89     l_z = ags_complex_get(x_val);					\
90     x_retval[0] = (gint64) ((double) G_MAXINT64 * creal(l_z)); }
91 #define AGS_AUDIO_BUFFER_UTIL_COMPLEX_TO_FLOAT(x_val, x_retval) { double complex l_z; \
92     l_z = ags_complex_get(x_val);					\
93     x_retval[0] = creal(l_z); }
94 #define AGS_AUDIO_BUFFER_UTIL_COMPLEX_TO_DOUBLE(x_val, x_retval) { double complex l_z; \
95     l_z = ags_complex_get(x_val);					\
96     x_retval[0] = creal(l_z); }
97 
98 /**
99  * AgsAudioBufferUtilFormat:
100  * @AGS_AUDIO_BUFFER_UTIL_S8: signed 8 bit raw pcm
101  * @AGS_AUDIO_BUFFER_UTIL_S16: signed 16 bit raw pcm
102  * @AGS_AUDIO_BUFFER_UTIL_S24: signed 24 bit raw pcm
103  * @AGS_AUDIO_BUFFER_UTIL_S32: signed 32 bit raw pcm
104  * @AGS_AUDIO_BUFFER_UTIL_S64: signed 64 bit raw pcm
105  * @AGS_AUDIO_BUFFER_UTIL_FLOAT: signed float raw pcm
106  * @AGS_AUDIO_BUFFER_UTIL_DOUBLE: signed double raw pcm
107  * @AGS_AUDIO_BUFFER_UTIL_FLOAT32: signed float32 raw pcm
108  * @AGS_AUDIO_BUFFER_UTIL_COMPLEX: complex data type
109  *
110  * #AgsAudioBufferUtilFormat specifies the audio data representation.
111  */
112 typedef enum{
113   AGS_AUDIO_BUFFER_UTIL_S8,
114   AGS_AUDIO_BUFFER_UTIL_S16,
115   AGS_AUDIO_BUFFER_UTIL_S24,
116   AGS_AUDIO_BUFFER_UTIL_S32,
117   AGS_AUDIO_BUFFER_UTIL_S64,
118   AGS_AUDIO_BUFFER_UTIL_FLOAT,
119   AGS_AUDIO_BUFFER_UTIL_DOUBLE,
120   AGS_AUDIO_BUFFER_UTIL_FLOAT32,
121   AGS_AUDIO_BUFFER_UTIL_COMPLEX,
122 }AgsAudioBufferUtilFormat;
123 
124 /**
125  * AgsAudioBufferUtilSamplerate:
126  * @AGS_AUDIO_BUFFER_UTIL_8000HZ: 8000 Hz
127  * @AGS_AUDIO_BUFFER_UTIL_44100HZ: 44100 Hz
128  * @AGS_AUDIO_BUFFER_UTIL_48000HZ: 48000 Hz
129  * @AGS_AUDIO_BUFFER_UTIL_96000HZ: 96000 Hz
130  * @AGS_AUDIO_BUFFER_UTIL_176400HZ: 176400 Hz
131  * @AGS_AUDIO_BUFFER_UTIL_192000HZ: 192000 Hz
132  * @AGS_AUDIO_BUFFER_UTIL_352800HZ: 352800 Hz
133  * @AGS_AUDIO_BUFFER_UTIL_2822400HZ: 2822400 Hz
134  * @AGS_AUDIO_BUFFER_UTIL_5644800HZ: 5644800 Hz
135  *
136  * Some common samplerates in Hertz.
137  */
138 typedef enum{
139   AGS_AUDIO_BUFFER_UTIL_8000HZ,
140   AGS_AUDIO_BUFFER_UTIL_44100HZ,
141   AGS_AUDIO_BUFFER_UTIL_48000HZ,
142   AGS_AUDIO_BUFFER_UTIL_96000HZ,
143   AGS_AUDIO_BUFFER_UTIL_176400HZ,
144   AGS_AUDIO_BUFFER_UTIL_192000HZ,
145   AGS_AUDIO_BUFFER_UTIL_352800HZ,
146   AGS_AUDIO_BUFFER_UTIL_2822400HZ,
147   AGS_AUDIO_BUFFER_UTIL_5644800HZ,
148 }AgsAudioBufferUtilSamplerate;
149 
150 /**
151  * AgsAudioBufferUtilCopyMode:
152  * @AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_S8: copy AGS_AUDIO_BUFFER_UTIL_S8 to AGS_AUDIO_BUFFER_UTIL_S8
153  * @AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_S16: copy AGS_AUDIO_BUFFER_UTIL_S8 to AGS_AUDIO_BUFFER_UTIL_S16
154  * @AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_S24: copy AGS_AUDIO_BUFFER_UTIL_S8 to AGS_AUDIO_BUFFER_UTIL_S24
155  * @AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_S32: copy AGS_AUDIO_BUFFER_UTIL_S8 to AGS_AUDIO_BUFFER_UTIL_S32
156  * @AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_S64: copy AGS_AUDIO_BUFFER_UTIL_S8 to AGS_AUDIO_BUFFER_UTIL_S64
157  * @AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_FLOAT: copy AGS_AUDIO_BUFFER_UTIL_S8 to AGS_AUDIO_BUFFER_UTIL_FLOAT
158  * @AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_DOUBLE: copy AGS_AUDIO_BUFFER_UTIL_S8 to AGS_AUDIO_BUFFER_UTIL_DOUBLE
159  * @AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_S8: copy AGS_AUDIO_BUFFER_UTIL_S16 to AGS_AUDIO_BUFFER_UTIL_S8
160  * @AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_S16: copy AGS_AUDIO_BUFFER_UTIL_S16 to AGS_AUDIO_BUFFER_UTIL_S16
161  * @AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_S24: copy AGS_AUDIO_BUFFER_UTIL_S16 to AGS_AUDIO_BUFFER_UTIL_S24
162  * @AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_S32: copy AGS_AUDIO_BUFFER_UTIL_S16 to AGS_AUDIO_BUFFER_UTIL_S32
163  * @AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_S64: copy AGS_AUDIO_BUFFER_UTIL_S16 to AGS_AUDIO_BUFFER_UTIL_S64
164  * @AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_FLOAT: copy AGS_AUDIO_BUFFER_UTIL_S16 to AGS_AUDIO_BUFFER_UTIL_FLOAT
165  * @AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_DOUBLE: copy AGS_AUDIO_BUFFER_UTIL_S16 to AGS_AUDIO_BUFFER_UTIL_DOUBLE
166  * @AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_S8: copy AGS_AUDIO_BUFFER_UTIL_S24 to AGS_AUDIO_BUFFER_UTIL_S8
167  * @AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_S16: copy AGS_AUDIO_BUFFER_UTIL_S24 to AGS_AUDIO_BUFFER_UTIL_S16
168  * @AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_S24: copy AGS_AUDIO_BUFFER_UTIL_S24 to AGS_AUDIO_BUFFER_UTIL_S24
169  * @AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_S32: copy AGS_AUDIO_BUFFER_UTIL_S24 to AGS_AUDIO_BUFFER_UTIL_S32
170  * @AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_S64: copy AGS_AUDIO_BUFFER_UTIL_S24 to AGS_AUDIO_BUFFER_UTIL_S64
171  * @AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_FLOAT: copy AGS_AUDIO_BUFFER_UTIL_S24 to AGS_AUDIO_BUFFER_UTIL_FLOAT
172  * @AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_DOUBLE: copy AGS_AUDIO_BUFFER_UTIL_S24 to AGS_AUDIO_BUFFER_UTIL_DOUBLE
173  * @AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_S8: copy AGS_AUDIO_BUFFER_UTIL_S32 to AGS_AUDIO_BUFFER_UTIL_S8
174  * @AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_S16: copy AGS_AUDIO_BUFFER_UTIL_S32 to AGS_AUDIO_BUFFER_UTIL_S16
175  * @AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_S24: copy AGS_AUDIO_BUFFER_UTIL_S32 to AGS_AUDIO_BUFFER_UTIL_S24
176  * @AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_S32: copy AGS_AUDIO_BUFFER_UTIL_S32 to AGS_AUDIO_BUFFER_UTIL_S32
177  * @AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_S64: copy AGS_AUDIO_BUFFER_UTIL_S32 to AGS_AUDIO_BUFFER_UTIL_S64
178  * @AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_FLOAT: copy AGS_AUDIO_BUFFER_UTIL_S32 to AGS_AUDIO_BUFFER_UTIL_FLOAT
179  * @AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_DOUBLE: copy AGS_AUDIO_BUFFER_UTIL_S32 to AGS_AUDIO_BUFFER_UTIL_DOUBLE
180  * @AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_S8: copy AGS_AUDIO_BUFFER_UTIL_S64 to AGS_AUDIO_BUFFER_UTIL_S8
181  * @AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_S16: copy AGS_AUDIO_BUFFER_UTIL_S64 to AGS_AUDIO_BUFFER_UTIL_S16
182  * @AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_S24: copy AGS_AUDIO_BUFFER_UTIL_S64 to AGS_AUDIO_BUFFER_UTIL_S24
183  * @AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_S32: copy AGS_AUDIO_BUFFER_UTIL_S64 to AGS_AUDIO_BUFFER_UTIL_S32
184  * @AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_S64: copy AGS_AUDIO_BUFFER_UTIL_S64 to AGS_AUDIO_BUFFER_UTIL_S64
185  * @AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_FLOAT: copy AGS_AUDIO_BUFFER_UTIL_S64 to AGS_AUDIO_BUFFER_UTIL_FLOAT
186  * @AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_DOUBLE: copy AGS_AUDIO_BUFFER_UTIL_S64 to AGS_AUDIO_BUFFER_UTIL_DOUBLE
187  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_S8: copy AGS_AUDIO_BUFFER_UTIL_FLOAT to AGS_AUDIO_BUFFER_UTIL_S8
188  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_S16: copy AGS_AUDIO_BUFFER_UTIL_FLOAT to AGS_AUDIO_BUFFER_UTIL_S16
189  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_S24: copy AGS_AUDIO_BUFFER_UTIL_FLOAT to AGS_AUDIO_BUFFER_UTIL_S24
190  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_S32: copy AGS_AUDIO_BUFFER_UTIL_FLOAT to AGS_AUDIO_BUFFER_UTIL_S32
191  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_S64: copy AGS_AUDIO_BUFFER_UTIL_FLOAT to AGS_AUDIO_BUFFER_UTIL_S64
192  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_FLOAT: copy AGS_AUDIO_BUFFER_UTIL_FLOAT to AGS_AUDIO_BUFFER_UTIL_FLOAT
193  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_DOUBLE: copy AGS_AUDIO_BUFFER_UTIL_FLOAT to AGS_AUDIO_BUFFER_UTIL_DOUBLE
194  * @AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_S8: copy AGS_AUDIO_BUFFER_UTIL_DOUBLE to AGS_AUDIO_BUFFER_UTIL_S8
195  * @AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_S16: copy AGS_AUDIO_BUFFER_UTIL_DOUBLE to AGS_AUDIO_BUFFER_UTIL_S16
196  * @AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_S24: copy AGS_AUDIO_BUFFER_UTIL_DOUBLE to AGS_AUDIO_BUFFER_UTIL_S24
197  * @AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_S32: copy AGS_AUDIO_BUFFER_UTIL_DOUBLE to AGS_AUDIO_BUFFER_UTIL_S32
198  * @AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_S64: copy AGS_AUDIO_BUFFER_UTIL_DOUBLE to AGS_AUDIO_BUFFER_UTIL_S64
199  * @AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_FLOAT: copy AGS_AUDIO_BUFFER_UTIL_DOUBLE to AGS_AUDIO_BUFFER_UTIL_FLOAT
200  * @AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_DOUBLE: copy AGS_AUDIO_BUFFER_UTIL_DOUBLE to AGS_AUDIO_BUFFER_UTIL_DOUBLE
201  * @AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_FLOAT32: copy AGS_AUDIO_BUFFER_UTIL_S8 to AGS_AUDIO_BUFFER_UTIL_FLOAT32
202  * @AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_FLOAT32: copy AGS_AUDIO_BUFFER_UTIL_S16 to AGS_AUDIO_BUFFER_UTIL_FLOAT32
203  * @AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_FLOAT32: copy AGS_AUDIO_BUFFER_UTIL_S24 to AGS_AUDIO_BUFFER_UTIL_FLOAT32
204  * @AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_FLOAT32: copy AGS_AUDIO_BUFFER_UTIL_S32 to AGS_AUDIO_BUFFER_UTIL_FLOAT32
205  * @AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_FLOAT32: copy AGS_AUDIO_BUFFER_UTIL_S64 to AGS_AUDIO_BUFFER_UTIL_FLOAT32
206  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_FLOAT32: copy AGS_AUDIO_BUFFER_UTIL_FLOAT to AGS_AUDIO_BUFFER_UTIL_FLOAT
207  * @AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_FLOAT32: copy AGS_AUDIO_BUFFER_UTIL_DOUBLE to AGS_AUDIO_BUFFER_UTIL_DOUBLE
208  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_FLOAT32: copy AGS_AUDIO_BUFFER_UTIL_FLOAT32 to AGS_AUDIO_BUFFER_UTIL_FLOAT32
209  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_S8: copy AGS_AUDIO_BUFFER_UTIL_FLOAT32 to AGS_AUDIO_BUFFER_UTIL_S8
210  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_S16: copy AGS_AUDIO_BUFFER_UTIL_FLOAT32 to AGS_AUDIO_BUFFER_UTIL_S16
211  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_S24: copy AGS_AUDIO_BUFFER_UTIL_FLOAT32 to AGS_AUDIO_BUFFER_UTIL_S24
212  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_S32: copy AGS_AUDIO_BUFFER_UTIL_FLOAT32 to AGS_AUDIO_BUFFER_UTIL_S32
213  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_S64: copy AGS_AUDIO_BUFFER_UTIL_FLOAT32 to AGS_AUDIO_BUFFER_UTIL_S64
214  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_FLOAT: copy AGS_AUDIO_BUFFER_UTIL_FLOAT32 to AGS_AUDIO_BUFFER_UTIL_FLOAT
215  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_DOUBLE: copy AGS_AUDIO_BUFFER_UTIL_FLOAT32 to AGS_AUDIO_BUFFER_UTIL_DOUBLE
216  * @AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_COMPLEX: copy AGS_AUDIO_BUFFER_UTIL_S8 to AGS_AUDIO_BUFFER_UTIL_COMPLEX
217  * @AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_COMPLEX: copy AGS_AUDIO_BUFFER_UTIL_S16 to AGS_AUDIO_BUFFER_UTIL_COMPLEX
218  * @AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_COMPLEX: copy AGS_AUDIO_BUFFER_UTIL_S24 to AGS_AUDIO_BUFFER_UTIL_COMPLEX
219  * @AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_COMPLEX: copy AGS_AUDIO_BUFFER_UTIL_S32 to AGS_AUDIO_BUFFER_UTIL_COMPLEX
220  * @AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_COMPLEX: copy AGS_AUDIO_BUFFER_UTIL_S64 to AGS_AUDIO_BUFFER_UTIL_COMPLEX
221  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_COMPLEX: copy AGS_AUDIO_BUFFER_UTIL_FLOAT to AGS_AUDIO_BUFFER_UTIL_COMPLEX
222  * @AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_COMPLEX: copy AGS_AUDIO_BUFFER_UTIL_DOUBLE to AGS_AUDIO_BUFFER_UTIL_COMPLEX
223  * @AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_COMPLEX: copy AGS_AUDIO_BUFFER_UTIL_FLOAT32 to AGS_AUDIO_BUFFER_UTIL_COMPLEX
224  * @AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_COMPLEX: copy AGS_AUDIO_BUFFER_UTIL_COMPLEX to AGS_AUDIO_BUFFER_UTIL_COMPLEX
225  * @AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_S8: copy AGS_AUDIO_BUFFER_UTIL_COMPLEX to AGS_AUDIO_BUFFER_UTIL_S8
226  * @AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_S16: copy AGS_AUDIO_BUFFER_UTIL_COMPLEX to AGS_AUDIO_BUFFER_UTIL_S16
227  * @AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_S24: copy AGS_AUDIO_BUFFER_UTIL_COMPLEX to AGS_AUDIO_BUFFER_UTIL_S24
228  * @AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_S32: copy AGS_AUDIO_BUFFER_UTIL_COMPLEX to AGS_AUDIO_BUFFER_UTIL_S32
229  * @AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_S64: copy AGS_AUDIO_BUFFER_UTIL_COMPLEX to AGS_AUDIO_BUFFER_UTIL_S64
230  * @AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_FLOAT: copy AGS_AUDIO_BUFFER_UTIL_COMPLEX to AGS_AUDIO_BUFFER_UTIL_FLOAT
231  * @AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_DOUBLE: copy AGS_AUDIO_BUFFER_UTIL_COMPLEX to AGS_AUDIO_BUFFER_UTIL_DOUBLE
232  * @AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_FLOAT32: copy AGS_AUDIO_BUFFER_UTIL_COMPLEX to AGS_AUDIO_BUFFER_UTIL_FLOAT32
233  *
234  * Copy modes.
235  */
236 typedef enum{
237   /* signed 8 bit source*/
238   AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_S8,
239   AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_S16,
240   AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_S24,
241   AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_S32,
242   AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_S64,
243   AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_FLOAT,
244   AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_DOUBLE,
245 
246   /* signed 16 bit source */
247   AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_S8,
248   AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_S16,
249   AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_S24,
250   AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_S32,
251   AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_S64,
252   AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_FLOAT,
253   AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_DOUBLE,
254 
255   /* signed 24 bit source */
256   AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_S8,
257   AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_S16,
258   AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_S24,
259   AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_S32,
260   AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_S64,
261   AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_FLOAT,
262   AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_DOUBLE,
263 
264   /* signed 32 bit source */
265   AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_S8,
266   AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_S16,
267   AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_S24,
268   AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_S32,
269   AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_S64,
270   AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_FLOAT,
271   AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_DOUBLE,
272 
273   /* signed 64 bit source */
274   AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_S8,
275   AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_S16,
276   AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_S24,
277   AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_S32,
278   AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_S64,
279   AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_FLOAT,
280   AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_DOUBLE,
281 
282   /* float source */
283   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_S8,
284   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_S16,
285   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_S24,
286   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_S32,
287   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_S64,
288   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_FLOAT,
289   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_DOUBLE,
290 
291   /* double source */
292   AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_S8,
293   AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_S16,
294   AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_S24,
295   AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_S32,
296   AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_S64,
297   AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_FLOAT,
298   AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_DOUBLE,
299 
300   /* Float32 */
301   AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_FLOAT32,
302   AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_FLOAT32,
303   AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_FLOAT32,
304   AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_FLOAT32,
305   AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_FLOAT32,
306   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_FLOAT32,
307   AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_FLOAT32,
308   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_FLOAT32,
309   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_S8,
310   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_S16,
311   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_S24,
312   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_S32,
313   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_S64,
314   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_FLOAT,
315   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_DOUBLE,
316 
317   /* AgsComplex */
318   AGS_AUDIO_BUFFER_UTIL_COPY_S8_TO_COMPLEX,
319   AGS_AUDIO_BUFFER_UTIL_COPY_S16_TO_COMPLEX,
320   AGS_AUDIO_BUFFER_UTIL_COPY_S24_TO_COMPLEX,
321   AGS_AUDIO_BUFFER_UTIL_COPY_S32_TO_COMPLEX,
322   AGS_AUDIO_BUFFER_UTIL_COPY_S64_TO_COMPLEX,
323   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT_TO_COMPLEX,
324   AGS_AUDIO_BUFFER_UTIL_COPY_DOUBLE_TO_COMPLEX,
325   AGS_AUDIO_BUFFER_UTIL_COPY_FLOAT32_TO_COMPLEX,
326   AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_COMPLEX,
327   AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_S8,
328   AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_S16,
329   AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_S24,
330   AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_S32,
331   AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_S64,
332   AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_FLOAT,
333   AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_DOUBLE,
334   AGS_AUDIO_BUFFER_UTIL_COPY_COMPLEX_TO_FLOAT32,
335 
336 }AgsAudioBufferUtilCopyMode;
337 
338 typedef gint8 ags_v8s8 __attribute__ ((vector_size(8 * sizeof(gint8))));
339 typedef gint16 ags_v8s16 __attribute__ ((vector_size(8 * sizeof(gint16))));
340 typedef gint32 ags_v8s32 __attribute__ ((vector_size(8 * sizeof(gint32))));
341 typedef gint64 ags_v8s64 __attribute__ ((vector_size(8 * sizeof(gint64))));
342 typedef gfloat ags_v8float __attribute__ ((vector_size(8 * sizeof(gfloat))));
343 typedef gdouble ags_v8double __attribute__ ((vector_size(8 * sizeof(gdouble))));
344 
345 guint ags_audio_buffer_util_format_from_soundcard(guint soundcard_format);
346 guint ags_audio_buffer_util_get_copy_mode(guint destination_format,
347 					  guint source_format);
348 
349 /* clear */
350 void ags_audio_buffer_util_clear_float(gfloat *buffer, guint channels,
351 				       guint count);
352 
353 #ifdef __APPLE__
354 void ags_audio_buffer_util_clear_float32(Float32 *buffer, guint channels,
355 					 guint count);
356 #endif
357 
358 void ags_audio_buffer_util_clear_double(gdouble *buffer, guint channels,
359 					guint count);
360 void ags_audio_buffer_util_clear_complex(AgsComplex *buffer, guint channels,
361 					 guint count);
362 void ags_audio_buffer_util_clear_buffer(void *buffer, guint channels,
363 					guint count, guint format);
364 
365 /* envelope */
366 G_DEPRECATED_FOR(ags_envelope_util_compute_s8)
367 gdouble ags_audio_buffer_util_envelope_s8(gint8 *buffer, guint channels,
368 					  guint buffer_length,
369 					  gdouble current_volume,
370 					  gdouble ratio);
371 G_DEPRECATED_FOR(ags_envelope_util_compute_s16)
372 gdouble ags_audio_buffer_util_envelope_s16(gint16 *buffer, guint channels,
373 					   guint buffer_length,
374 					   gdouble current_volume,
375 					   gdouble ratio);
376 G_DEPRECATED_FOR(ags_envelope_util_compute_s24)
377 gdouble ags_audio_buffer_util_envelope_s24(gint32 *buffer, guint channels,
378 					   guint buffer_length,
379 					   gdouble current_volume,
380 					   gdouble ratio);
381 G_DEPRECATED_FOR(ags_envelope_util_compute_s32)
382 gdouble ags_audio_buffer_util_envelope_s32(gint32 *buffer, guint channels,
383 					   guint buffer_length,
384 					   gdouble current_volume,
385 					   gdouble ratio);
386 G_DEPRECATED_FOR(ags_envelope_util_compute_s64)
387 gdouble ags_audio_buffer_util_envelope_s64(gint64 *buffer, guint channels,
388 					   guint buffer_length,
389 					   gdouble current_volume,
390 					   gdouble ratio);
391 G_DEPRECATED_FOR(ags_envelope_util_compute_float)
392 gdouble ags_audio_buffer_util_envelope_float(gfloat *buffer, guint channels,
393 					     guint buffer_length,
394 					     gdouble current_volume,
395 					     gdouble ratio);
396 G_DEPRECATED_FOR(ags_envelope_util_compute_double)
397 gdouble ags_audio_buffer_util_envelope_double(gdouble *buffer, guint channels,
398 					      guint buffer_length,
399 					      gdouble current_volume,
400 					      gdouble ratio);
401 G_DEPRECATED_FOR(ags_envelope_util_compute_complex)
402 gdouble ags_audio_buffer_util_envelope_complex(AgsComplex *buffer, guint channels,
403 					       guint buffer_length,
404 					       gdouble current_volume,
405 					       gdouble ratio);
406 
407 G_DEPRECATED_FOR(ags_envelope_util_compute)
408 gdouble ags_audio_buffer_util_envelope(void *buffer, guint channels,
409 				       guint format,
410 				       guint buffer_length,
411 				       gdouble current_volume,
412 				       gdouble ratio);
413 
414 /* volume */
415 G_DEPRECATED_FOR(ags_volume_util_compute_s8)
416 void ags_audio_buffer_util_volume_s8(gint8 *buffer, guint channels,
417 				     guint buffer_length,
418 				     gdouble volume);
419 G_DEPRECATED_FOR(ags_volume_util_compute_s16)
420 void ags_audio_buffer_util_volume_s16(gint16 *buffer, guint channels,
421 				      guint buffer_length,
422 				      gdouble volume);
423 G_DEPRECATED_FOR(ags_volume_util_compute_s24)
424 void ags_audio_buffer_util_volume_s24(gint32 *buffer, guint channels,
425 				      guint buffer_length,
426 				      gdouble volume);
427 G_DEPRECATED_FOR(ags_volume_util_compute_s32)
428 void ags_audio_buffer_util_volume_s32(gint32 *buffer, guint channels,
429 				      guint buffer_length,
430 				      gdouble volume);
431 G_DEPRECATED_FOR(ags_volume_util_compute_s64)
432 void ags_audio_buffer_util_volume_s64(gint64 *buffer, guint channels,
433 				      guint buffer_length,
434 				      gdouble volume);
435 G_DEPRECATED_FOR(ags_volume_util_compute_float)
436 void ags_audio_buffer_util_volume_float(gfloat *buffer, guint channels,
437 					guint buffer_length,
438 					gdouble volume);
439 G_DEPRECATED_FOR(ags_volume_util_compute_double)
440 void ags_audio_buffer_util_volume_double(gdouble *buffer, guint channels,
441 					 guint buffer_length,
442 					 gdouble volume);
443 G_DEPRECATED_FOR(ags_volume_util_compute_complex)
444 void ags_audio_buffer_util_volume_complex(AgsComplex *buffer, guint channels,
445 					  guint buffer_length,
446 					  gdouble volume);
447 
448 G_DEPRECATED_FOR(ags_volume_util_compute)
449 void ags_audio_buffer_util_volume(void *buffer, guint channels,
450 				  guint format,
451 				  guint buffer_length,
452 				  gdouble volume);
453 
454 /* peak */
455 G_DEPRECATED_FOR(ags_peak_util_compute_s8)
456 gdouble ags_audio_buffer_util_peak_s8(gint8 *buffer, guint channels,
457 				      guint buffer_length,
458 				      gdouble harmonic_rate,
459 				      gdouble max_rate,
460 				      gdouble pressure_factor);
461 G_DEPRECATED_FOR(ags_peak_util_compute_s16)
462 gdouble ags_audio_buffer_util_peak_s16(gint16 *buffer, guint channels,
463 				       guint buffer_length,
464 				       gdouble harmonic_rate,
465 				       gdouble max_rate,
466 				       gdouble pressure_factor);
467 G_DEPRECATED_FOR(ags_peak_util_compute_s24)
468 gdouble ags_audio_buffer_util_peak_s24(gint32 *buffer, guint channels,
469 				       guint buffer_length,
470 				       gdouble harmonic_rate,
471 				       gdouble max_rate,
472 				       gdouble pressure_factor);
473 G_DEPRECATED_FOR(ags_peak_util_compute_s32)
474 gdouble ags_audio_buffer_util_peak_s32(gint32 *buffer, guint channels,
475 				       guint buffer_length,
476 				       gdouble harmonic_rate,
477 				       gdouble max_rate,
478 				       gdouble pressure_factor);
479 G_DEPRECATED_FOR(ags_peak_util_compute_s64)
480 gdouble ags_audio_buffer_util_peak_s64(gint64 *buffer, guint channels,
481 				       guint buffer_length,
482 				       gdouble harmonic_rate,
483 				       gdouble max_rate,
484 				       gdouble pressure_factor);
485 G_DEPRECATED_FOR(ags_peak_util_compute_float)
486 gdouble ags_audio_buffer_util_peak_float(gfloat *buffer, guint channels,
487 					 guint buffer_length,
488 					 gdouble harmonic_rate,
489 					 gdouble max_rate,
490 					 gdouble pressure_factor);
491 G_DEPRECATED_FOR(ags_peak_util_compute_double)
492 gdouble ags_audio_buffer_util_peak_double(gdouble *buffer, guint channels,
493 					  guint buffer_length,
494 					  gdouble harmonic_rate,
495 					  gdouble max_rate,
496 					  gdouble pressure_factor);
497 G_DEPRECATED_FOR(ags_peak_util_compute_complex)
498 gdouble ags_audio_buffer_util_peak_complex(AgsComplex *buffer, guint channels,
499 					   guint buffer_length,
500 					   gdouble harmonic_rate,
501 					   gdouble max_rate,
502 					   gdouble pressure_factor);
503 
504 G_DEPRECATED_FOR(ags_peak_util_compute)
505 gdouble ags_audio_buffer_util_peak(void *buffer, guint channels,
506 				   guint format,
507 				   guint buffer_length,
508 				   gdouble harmonic_rate,
509 				   gdouble max_rate,
510 				   gdouble pressure_factor);
511 
512 /* resample */
513 G_DEPRECATED_FOR(ags_resample_util_compute_s8)
514 gint8* ags_audio_buffer_util_resample_s8(gint8 *buffer, guint channels,
515 					 guint samplerate,
516 					 guint buffer_length,
517 					 guint target_samplerate);
518 G_DEPRECATED_FOR(ags_resample_util_compute_s16)
519 gint16* ags_audio_buffer_util_resample_s16(gint16 *buffer, guint channels,
520 					   guint samplerate,
521 					   guint buffer_length,
522 					   guint target_samplerate);
523 G_DEPRECATED_FOR(ags_resample_util_compute_s24)
524 gint32* ags_audio_buffer_util_resample_s24(gint32 *buffer, guint channels,
525 					   guint samplerate,
526 					   guint buffer_length,
527 					   guint target_samplerate);
528 G_DEPRECATED_FOR(ags_resample_util_compute_s32)
529 gint32* ags_audio_buffer_util_resample_s32(gint32 *buffer, guint channels,
530 					   guint samplerate,
531 					   guint buffer_length,
532 					   guint target_samplerate);
533 G_DEPRECATED_FOR(ags_resample_util_compute_s64)
534 gint64* ags_audio_buffer_util_resample_s64(gint64 *buffer, guint channels,
535 					   guint samplerate,
536 					   guint buffer_length,
537 					   guint target_samplerate);
538 G_DEPRECATED_FOR(ags_resample_util_compute_float)
539 gfloat* ags_audio_buffer_util_resample_float(gfloat *buffer, guint channels,
540 					     guint samplerate,
541 					     guint buffer_length,
542 					     guint target_samplerate);
543 G_DEPRECATED_FOR(ags_resample_util_compute_double)
544 gdouble* ags_audio_buffer_util_resample_double(gdouble *buffer, guint channels,
545 					       guint samplerate,
546 					       guint buffer_length,
547 					       guint target_samplerate);
548 G_DEPRECATED_FOR(ags_resample_util_compute_complex)
549 AgsComplex* ags_audio_buffer_util_resample_complex(AgsComplex *buffer, guint channels,
550 						   guint samplerate,
551 						   guint buffer_length,
552 						   guint target_samplerate);
553 
554 G_DEPRECATED_FOR(ags_resample_util_compute)
555 void* ags_audio_buffer_util_resample(void *buffer, guint channels,
556 				     guint format,  guint samplerate,
557 				     guint buffer_length,
558 				     guint target_samplerate);
559 
560 /* resample with buffer */
561 G_DEPRECATED
562 void ags_audio_buffer_util_resample_s8_with_buffer(gint8 *buffer, guint channels,
563 						   guint samplerate,
564 						   guint buffer_length,
565 						   guint target_samplerate,
566 						   guint target_buffer_length,
567 						   gint8 *target_buffer);
568 G_DEPRECATED
569 void ags_audio_buffer_util_resample_s16_with_buffer(gint16 *buffer, guint channels,
570 						    guint samplerate,
571 						    guint buffer_length,
572 						    guint target_samplerate,
573 						    guint target_buffer_length,
574 						    gint16 *target_buffer);
575 G_DEPRECATED
576 void ags_audio_buffer_util_resample_s24_with_buffer(gint32 *buffer, guint channels,
577 						    guint samplerate,
578 						    guint buffer_length,
579 						    guint target_samplerate,
580 						    guint target_buffer_length,
581 						    gint32 *target_buffer);
582 G_DEPRECATED
583 void ags_audio_buffer_util_resample_s32_with_buffer(gint32 *buffer, guint channels,
584 						    guint samplerate,
585 						    guint buffer_length,
586 						    guint target_samplerate,
587 						    guint target_buffer_length,
588 						    gint32 *target_buffer);
589 G_DEPRECATED
590 void ags_audio_buffer_util_resample_s64_with_buffer(gint64 *buffer, guint channels,
591 						    guint samplerate,
592 						    guint buffer_length,
593 						    guint target_samplerate,
594 						    guint target_buffer_length,
595 						    gint64 *target_buffer);
596 G_DEPRECATED
597 void ags_audio_buffer_util_resample_float_with_buffer(gfloat *buffer, guint channels,
598 						      guint samplerate,
599 						      guint buffer_length,
600 						      guint target_samplerate,
601 						      guint target_buffer_length,
602 						      gfloat *target_buffer);
603 G_DEPRECATED
604 void ags_audio_buffer_util_resample_double_with_buffer(gdouble *buffer, guint channels,
605 						       guint samplerate,
606 						       guint buffer_length,
607 						       guint target_samplerate,
608 						       guint target_buffer_length,
609 						       gdouble *target_buffer);
610 G_DEPRECATED
611 void ags_audio_buffer_util_resample_complex_with_buffer(AgsComplex *buffer, guint channels,
612 							guint samplerate,
613 							guint buffer_length,
614 							guint target_samplerate,
615 							guint target_buffer_length,
616 							AgsComplex *target_buffer);
617 
618 G_DEPRECATED
619 void ags_audio_buffer_util_resample_with_buffer(void *buffer, guint channels,
620 						guint format,  guint samplerate,
621 						guint buffer_length,
622 						guint target_samplerate,
623 						guint target_buffer_length,
624 						void *target_buffer);
625 
626 /* pong */
627 void ags_audio_buffer_util_pong_s8(gint8 *destination, guint dchannels,
628 				   gint8 *source, guint schannels,
629 				   guint count);
630 void ags_audio_buffer_util_pong_s16(gint16 *destination, guint dchannels,
631 				    gint16 *source, guint schannels,
632 				    guint count);
633 void ags_audio_buffer_util_pong_s24(gint32 *destination, guint dchannels,
634 				    gint32 *source, guint schannels,
635 				    guint count);
636 void ags_audio_buffer_util_pong_s32(gint32 *destination, guint dchannels,
637 				    gint32 *source, guint schannels,
638 				    guint count);
639 void ags_audio_buffer_util_pong_s64(gint64 *destination, guint dchannels,
640 				    gint64 *source, guint schannels,
641 				    guint count);
642 void ags_audio_buffer_util_pong_float(gfloat *destination, guint dchannels,
643 				      gfloat *source, guint schannels,
644 				      guint count);
645 void ags_audio_buffer_util_pong_double(gdouble *destination, guint dchannels,
646 				       gdouble *source, guint schannels,
647 				       guint count);
648 void ags_audio_buffer_util_pong_complex(AgsComplex *destination, guint dchannels,
649 					AgsComplex *source, guint schannels,
650 					guint count);
651 
652 void ags_audio_buffer_util_pong(void *destination, guint dchannels,
653 				void *source, guint schannels,
654 				guint count, guint format);
655 
656 /* copy 8 bit */
657 void ags_audio_buffer_util_copy_s8_to_s8(gint8 *destination, guint dchannels,
658 					 gint8 *source, guint schannels,
659 					 guint count);
660 void ags_audio_buffer_util_copy_s8_to_s16(gint16 *destination, guint dchannels,
661 					  gint8 *source, guint schannels,
662 					  guint count);
663 void ags_audio_buffer_util_copy_s8_to_s24(gint32 *destination, guint dchannels,
664 					  gint8 *source, guint schannels,
665 					  guint count);
666 void ags_audio_buffer_util_copy_s8_to_s32(gint32 *destination, guint dchannels,
667 					  gint8 *source, guint schannels,
668 					  guint count);
669 void ags_audio_buffer_util_copy_s8_to_s64(gint64 *destination, guint dchannels,
670 					  gint8 *source, guint schannels,
671 					  guint count);
672 void ags_audio_buffer_util_copy_s8_to_float(gfloat *destination, guint dchannels,
673 					    gint8 *source, guint schannels,
674 					    guint count);
675 void ags_audio_buffer_util_copy_s8_to_double(gdouble *destination, guint dchannels,
676 					     gint8 *source, guint schannels,
677 					     guint count);
678 
679 /* copy 16 bit */
680 void ags_audio_buffer_util_copy_s16_to_s8(gint8 *destination, guint dchannels,
681 					  gint16 *source, guint schannels,
682 					  guint count);
683 void ags_audio_buffer_util_copy_s16_to_s16(gint16 *destination, guint dchannels,
684 					   gint16 *source, guint schannels,
685 					   guint count);
686 void ags_audio_buffer_util_copy_s16_to_s24(gint32 *destination, guint dchannels,
687 					   gint16 *source, guint schannels,
688 					   guint count);
689 void ags_audio_buffer_util_copy_s16_to_s32(gint32 *destination, guint dchannels,
690 					   gint16 *source, guint schannels,
691 					   guint count);
692 void ags_audio_buffer_util_copy_s16_to_s64(gint64 *destination, guint dchannels,
693 					   gint16 *source, guint schannels,
694 					   guint count);
695 void ags_audio_buffer_util_copy_s16_to_float(gfloat *destination, guint dchannels,
696 					     gint16 *source, guint schannels,
697 					     guint count);
698 void ags_audio_buffer_util_copy_s16_to_double(gdouble *destination, guint dchannels,
699 					      gint16 *source, guint schannels,
700 					      guint count);
701 
702 /* copy 24 bit */
703 void ags_audio_buffer_util_copy_s24_to_s8(gint8 *destination, guint dchannels,
704 					  gint32 *source, guint schannels,
705 					  guint count);
706 void ags_audio_buffer_util_copy_s24_to_s16(gint16 *destination, guint dchannels,
707 					   gint32 *source, guint schannels,
708 					   guint count);
709 void ags_audio_buffer_util_copy_s24_to_s24(gint32 *destination, guint dchannels,
710 					   gint32 *source, guint schannels,
711 					   guint count);
712 void ags_audio_buffer_util_copy_s24_to_s32(gint32 *destination, guint dchannels,
713 					   gint32 *source, guint schannels,
714 					   guint count);
715 void ags_audio_buffer_util_copy_s24_to_s64(gint64 *destination, guint dchannels,
716 					   gint32 *source, guint schannels,
717 					   guint count);
718 void ags_audio_buffer_util_copy_s24_to_float(gfloat *destination, guint dchannels,
719 					     gint32 *source, guint schannels,
720 					     guint count);
721 void ags_audio_buffer_util_copy_s24_to_double(gdouble *destination, guint dchannels,
722 					      gint32 *source, guint schannels,
723 					      guint count);
724 
725 /* copy 32 bit */
726 void ags_audio_buffer_util_copy_s32_to_s8(gint8 *destination, guint dchannels,
727 					  gint32 *source, guint schannels,
728 					  guint count);
729 void ags_audio_buffer_util_copy_s32_to_s16(gint16 *destination, guint dchannels,
730 					   gint32 *source, guint schannels,
731 					   guint count);
732 void ags_audio_buffer_util_copy_s32_to_s24(gint32 *destination, guint dchannels,
733 					   gint32 *source, guint schannels,
734 					   guint count);
735 void ags_audio_buffer_util_copy_s32_to_s32(gint32 *destination, guint dchannels,
736 					   gint32 *source, guint schannels,
737 					   guint count);
738 void ags_audio_buffer_util_copy_s32_to_s64(gint64 *destination, guint dchannels,
739 					   gint32 *source, guint schannels,
740 					   guint count);
741 void ags_audio_buffer_util_copy_s32_to_float(gfloat *destination, guint dchannels,
742 					     gint32 *source, guint schannels,
743 					     guint count);
744 void ags_audio_buffer_util_copy_s32_to_double(gdouble *destination, guint dchannels,
745 					      gint32 *source, guint schannels,
746 					      guint count);
747 
748 /* copy 64 bit */
749 void ags_audio_buffer_util_copy_s64_to_s8(gint8 *destination, guint dchannels,
750 					  gint64 *source, guint schannels,
751 					  guint count);
752 void ags_audio_buffer_util_copy_s64_to_s16(gint16 *destination, guint dchannels,
753 					   gint64 *source, guint schannels,
754 					   guint count);
755 void ags_audio_buffer_util_copy_s64_to_s24(gint32 *destination, guint dchannels,
756 					   gint64 *source, guint schannels,
757 					   guint count);
758 void ags_audio_buffer_util_copy_s64_to_s32(gint32 *destination, guint dchannels,
759 					   gint64 *source, guint schannels,
760 					   guint count);
761 void ags_audio_buffer_util_copy_s64_to_s64(gint64 *destination, guint dchannels,
762 					   gint64 *source, guint schannels,
763 					   guint count);
764 void ags_audio_buffer_util_copy_s64_to_float(gfloat *destination, guint dchannels,
765 					     gint64 *source, guint schannels,
766 					     guint count);
767 void ags_audio_buffer_util_copy_s64_to_double(gdouble *destination, guint dchannels,
768 					      gint64 *source, guint schannels,
769 					      guint count);
770 
771 /* copy float */
772 void ags_audio_buffer_util_copy_float_to_s8(gint8 *destination, guint dchannels,
773 					    gfloat *source, guint schannels,
774 					    guint count);
775 void ags_audio_buffer_util_copy_float_to_s16(gint16 *destination, guint dchannels,
776 					     gfloat *source, guint schannels,
777 					     guint count);
778 void ags_audio_buffer_util_copy_float_to_s24(gint32 *destination, guint dchannels,
779 					     gfloat *source, guint schannels,
780 					     guint count);
781 void ags_audio_buffer_util_copy_float_to_s32(gint32 *destination, guint dchannels,
782 					     gfloat *source, guint schannels,
783 					     guint count);
784 void ags_audio_buffer_util_copy_float_to_s64(gint64 *destination, guint dchannels,
785 					     gfloat *source, guint schannels,
786 					     guint count);
787 void ags_audio_buffer_util_copy_float_to_float(gfloat *destination, guint dchannels,
788 					       gfloat *source, guint schannels,
789 					       guint count);
790 void ags_audio_buffer_util_copy_float_to_double(gdouble *destination, guint dchannels,
791 						gfloat *source, guint schannels,
792 						guint count);
793 
794 /* copy double */
795 void ags_audio_buffer_util_copy_double_to_s8(gint8 *destination, guint dchannels,
796 					     gdouble *source, guint schannels,
797 					     guint count);
798 void ags_audio_buffer_util_copy_double_to_s16(gint16 *destination, guint dchannels,
799 					      gdouble *source, guint schannels,
800 					      guint count);
801 void ags_audio_buffer_util_copy_double_to_s24(gint32 *destination, guint dchannels,
802 					      gdouble *source, guint schannels,
803 					      guint count);
804 void ags_audio_buffer_util_copy_double_to_s32(gint32 *destination, guint dchannels,
805 					      gdouble *source, guint schannels,
806 					      guint count);
807 void ags_audio_buffer_util_copy_double_to_s64(gint64 *destination, guint dchannels,
808 					      gdouble *source, guint schannels,
809 					      guint count);
810 void ags_audio_buffer_util_copy_double_to_float(gfloat *destination, guint dchannels,
811 						gdouble *source, guint schannels,
812 						guint count);
813 void ags_audio_buffer_util_copy_double_to_double(gdouble *destination, guint dchannels,
814 						 gdouble *source, guint schannels,
815 						 guint count);
816 
817 #ifdef __APPLE__
818 /* Float32 */
819 void ags_audio_buffer_util_copy_s8_to_float32(Float32 *destination, guint dchannels,
820 					      gint8 *source, guint schannels,
821 					      guint count);
822 
823 void ags_audio_buffer_util_copy_s16_to_float32(Float32 *destination, guint dchannels,
824 					       gint16 *source, guint schannels,
825 					       guint count);
826 
827 void ags_audio_buffer_util_copy_s24_to_float32(Float32 *destination, guint dchannels,
828 					       gint32 *source, guint schannels,
829 					       guint count);
830 
831 void ags_audio_buffer_util_copy_s32_to_float32(Float32 *destination, guint dchannels,
832 					       gint32 *source, guint schannels,
833 					       guint count);
834 
835 void ags_audio_buffer_util_copy_s64_to_float32(Float32 *destination, guint dchannels,
836 					       gint64 *source, guint schannels,
837 					       guint count);
838 
839 void ags_audio_buffer_util_copy_float_to_float32(Float32 *destination, guint dchannels,
840 						 float *source, guint schannels,
841 						 guint count);
842 
843 void ags_audio_buffer_util_copy_double_to_float32(Float32 *destination, guint dchannels,
844 						  gdouble *source, guint schannels,
845 						  guint count);
846 
847 void ags_audio_buffer_util_copy_float32_to_float32(Float32 *destination, guint dchannels,
848 						   Float32 *source, guint schannels,
849 						   guint count);
850 
851 void ags_audio_buffer_util_copy_float32_to_s8(gint8 *destination, guint dchannels,
852 					      Float32 *source, guint schannels,
853 					      guint count);
854 void ags_audio_buffer_util_copy_float32_to_s16(gint16 *destination, guint dchannels,
855 					       Float32 *source, guint schannels,
856 					       guint count);
857 void ags_audio_buffer_util_copy_float32_to_s24(gint32 *destination, guint dchannels,
858 					       Float32 *source, guint schannels,
859 					       guint count);
860 void ags_audio_buffer_util_copy_float32_to_s32(gint32 *destination, guint dchannels,
861 					       Float32 *source, guint schannels,
862 					       guint count);
863 void ags_audio_buffer_util_copy_float32_to_s64(gint64 *destination, guint dchannels,
864 					       Float32 *source, guint schannels,
865 					       guint count);
866 void ags_audio_buffer_util_copy_float32_to_float(gfloat *destination, guint dchannels,
867 						 Float32 *source, guint schannels,
868 						 guint count);
869 void ags_audio_buffer_util_copy_float32_to_double(gdouble *destination, guint dchannels,
870 						  Float32 *source, guint schannels,
871 						  guint count);
872 #endif
873 
874 /* AgsComplex */
875 void ags_audio_buffer_util_copy_s8_to_complex(AgsComplex *destination, guint dchannels,
876 					      gint8 *source, guint schannels,
877 					      guint count);
878 
879 void ags_audio_buffer_util_copy_s16_to_complex(AgsComplex *destination, guint dchannels,
880 					       gint16 *source, guint schannels,
881 					       guint count);
882 
883 void ags_audio_buffer_util_copy_s24_to_complex(AgsComplex *destination, guint dchannels,
884 					       gint32 *source, guint schannels,
885 					       guint count);
886 
887 void ags_audio_buffer_util_copy_s32_to_complex(AgsComplex *destination, guint dchannels,
888 					       gint32 *source, guint schannels,
889 					       guint count);
890 
891 void ags_audio_buffer_util_copy_s64_to_complex(AgsComplex *destination, guint dchannels,
892 					       gint64 *source, guint schannels,
893 					       guint count);
894 
895 void ags_audio_buffer_util_copy_float_to_complex(AgsComplex *destination, guint dchannels,
896 						 gfloat *source, guint schannels,
897 						 guint count);
898 
899 void ags_audio_buffer_util_copy_double_to_complex(AgsComplex *destination, guint dchannels,
900 						  gdouble *source, guint schannels,
901 						  guint count);
902 
903 #ifdef __APPLE__
904 void ags_audio_buffer_util_copy_float32_to_complex(AgsComplex *destination, guint dchannels,
905 						   Float32 *source, guint schannels,
906 						   guint count);
907 #endif
908 
909 void ags_audio_buffer_util_copy_complex_to_complex(AgsComplex *destination, guint dchannels,
910 						   AgsComplex *source, guint schannels,
911 						   guint count);
912 
913 void ags_audio_buffer_util_copy_complex_to_s8(gint8 *destination, guint dchannels,
914 					      AgsComplex *source, guint schannels,
915 					      guint count);
916 void ags_audio_buffer_util_copy_complex_to_s16(gint16 *destination, guint dchannels,
917 					       AgsComplex *source, guint schannels,
918 					       guint count);
919 void ags_audio_buffer_util_copy_complex_to_s24(gint32 *destination, guint dchannels,
920 					       AgsComplex *source, guint schannels,
921 					       guint count);
922 void ags_audio_buffer_util_copy_complex_to_s32(gint32 *destination, guint dchannels,
923 					       AgsComplex *source, guint schannels,
924 					       guint count);
925 void ags_audio_buffer_util_copy_complex_to_s64(gint64 *destination, guint dchannels,
926 					       AgsComplex *source, guint schannels,
927 					       guint count);
928 void ags_audio_buffer_util_copy_complex_to_float(gfloat *destination, guint dchannels,
929 						 AgsComplex *source, guint schannels,
930 						 guint count);
931 void ags_audio_buffer_util_copy_complex_to_double(gdouble *destination, guint dchannels,
932 						  AgsComplex *source, guint schannels,
933 						  guint count);
934 #ifdef __APPLE__
935 void ags_audio_buffer_util_copy_complex_to_float32(Float32 *destination, guint dchannels,
936 						   AgsComplex *source, guint schannels,
937 						   guint count);
938 #endif
939 
940 /* copy */
941 void ags_audio_buffer_util_copy_buffer_to_buffer(void *destination, guint dchannels, guint doffset,
942 						 void *source, guint schannels, guint soffset,
943 						 guint count, guint mode);
944 
945 G_END_DECLS
946 
947 #endif /*__AGS_AUDIO_BUFFER_UTIL_H__*/
948