blob: e01e9d9db90e5fa6f8bcec2e6e91cd12cf7363e9 [file] [log] [blame]
LUOJian5bbddc22023-09-04 18:49:11 +08001#include "mbtk_type.h"
2#include <fcntl.h>
3#include <stdint.h>
4#include <limits.h>
5#include <termios.h>
6#include <stdarg.h>
7// #include "ql_at.h"
8#include "ql/ql_audio.h"
9// #include "mopen_tts.h"
10
11#define MBTK_AUD_DEMO_WAV "/data/demo.wav"
12
13static int record_fd = 0;
14
15int Ql_cb_playback(int hdl, int result)
16{
17 printf("%s: hdl=%d, result=%d\n\r", __func__, hdl, result);
18 if (result == AUD_PLAYER_FINISHED || result == AUD_PLAYER_NODATA)
19 {
20 printf("%s: play finished\n\r", __func__);
21 }
22 return 0;
23}
24
25void record_cb_func(int cb_result, char* databuf, unsigned int len)
26{
27 int rc;
28
29 if(NULL != databuf && len > 0 && record_fd > 0)
30 {
31 //for debug:save into file
32 rc = write(record_fd, databuf, len);
33 if (rc < 0) {
34 printf("%s: error writing to file!\n", __FUNCTION__);
35 } else if (rc < len) {
36 printf("%s: wrote less the buffer size!\n", __FUNCTION__);
37 }
38 }
39}
40
41void dtmf_cb1(char dtmf)
42{
43 printf("%s:%c\n", __FUNCTION__, dtmf);
44}
45
46int MBTK_wav_pcm16Le_check(int fd)
47{
48 struct wav_header hdr;
49
50 if (fd <= 0)
51 return -1;
52
53 if (read(fd, &hdr, sizeof(hdr)) != sizeof(hdr))
54 {
55 printf("\n%s: cannot read header\n", __FUNCTION__);
56 return -1;
57 }
58
59 if ((hdr.riff_id != ID_RIFF)
60 || (hdr.riff_fmt != ID_WAVE)
61 || (hdr.fmt_id != ID_FMT))
62 {
63 printf("\n%s: is not a riff/wave file\n", __FUNCTION__);
64 return -1;
65 }
66
67 if ((hdr.audio_format != FORMAT_PCM) || (hdr.fmt_sz != 16)) {
68 printf("\n%s: is not pcm format\n", __FUNCTION__);
69 return -1;
70 }
71
72 if (hdr.bits_per_sample != 16) {
73 printf("\n%s: is not 16bit per sample\n", __FUNCTION__);
74 return -1;
75 }
76
77 return 0;
78}
79
80int MBTK_wav_pcm16Le_set(int fd)
81{
82 struct wav_header hdr;
83
84 if (fd <= 0)
85 return -1;
86
87 memset(&hdr, 0, sizeof(struct wav_header));
88
89 hdr.riff_id = ID_RIFF;
90 hdr.riff_fmt = ID_WAVE;
91 hdr.fmt_id = ID_FMT;
92 hdr.fmt_sz = 16;
93 hdr.audio_format = FORMAT_PCM;
94 hdr.num_channels = 1;
95 hdr.sample_rate = 8000;
96 hdr.bits_per_sample = 16;
97 hdr.byte_rate = (8000 * 1 * hdr.bits_per_sample) / 8;
98 hdr.block_align = (hdr.bits_per_sample * 1) / 8;
99 hdr.data_id = ID_DATA;
100 hdr.data_sz = 0;
101
102 hdr.riff_sz = hdr.data_sz + 44 - 8;
103 if (write(fd, &hdr, sizeof(hdr)) != sizeof(hdr)) {
104 return -1;
105 }
106
107 return 0;
108}
109void aplay(void)
110{
111 char operator[10];
112 char databuf[1024];
113 int opt = 0;
114 int fd = 0;
115 int size = 0;
116 int state;
117 int play_hdl = 0;
118 int handler = 0;
119
120 while(1)
121 {
122 printf("=========aplay========\n"
123 "\t 0 Open PCM\n"
124 "\t 1 Play Stream\n"
125 "\t 2 Play file\n"
126 "\t 3 Close\n"
127 "\t others exit\n\n"
128 "operator >> ");
129
130 fflush(stdin);
131 fgets(operator, sizeof(operator), stdin);
132 opt = atoi(operator);
133 switch (opt)
134 {
135 case 0:
136 mbtk_audio_ubus_client_init(&handler, dtmf_cb1);
137 mbtk_audio_switch_pcm(1);
138 mbtk_audio_mode_set(2);
139 play_hdl = Ql_AudPlayer_Open(NULL, Ql_cb_playback);
140 if(0 == play_hdl)
141 printf("Ql_AudPlayer_Open fail\n");
142 break;
143 case 1:
144 if(0 == play_hdl)
145 continue;
146
147 fd = open(MBTK_AUD_DEMO_WAV, O_RDWR);
148 if (fd <= 0)
149 continue;
150 mbtk_audio_path_enable(1);
151
152 if(0 == MBTK_wav_pcm16Le_check(fd))
153 {
154 memset(databuf, 0, sizeof(databuf));
155 while(0 < (size = read(fd, databuf, sizeof(databuf))))
156 {
157 if(-1 == Ql_AudPlayer_Play(play_hdl, databuf, size))
158 break;
159 }
160 printf("aplay Stream end \n");
161 }
162 mbtk_audio_path_enable(0);
163
164 close(fd);
165 break;
166 case 2:
167 if(0 == play_hdl)
168 continue;
169 fd = open(MBTK_AUD_DEMO_WAV, O_RDWR);
170 if (fd <= 0)
171 continue;
172
173 mbtk_audio_path_enable(1);
174 if(0 == MBTK_wav_pcm16Le_check(fd))
175 {
176 Ql_AudPlayer_PlayFrmFile(play_hdl, fd, 0);
177 }
178 else
179 {
180 printf("aplay file type error\n");
181 }
182 close(fd);
183 mbtk_audio_path_enable(0);
184 break;
185 case 3:
186 if(0 == play_hdl)
187 continue;
188 Ql_AudPlayer_Close(play_hdl);
189 mbtk_audio_mode_set(0);
190 mbtk_audio_switch_pcm(0);
191 break;
192 case 4:
193 // aplay_thread(MBTK_AUD_DEMO_WAV);
194 Ql_Mp3_To_Play("/data/mp3demo.mp3", play_hdl, 0);
195 break;
196 default:
197 return;
198 }
199
200 sleep(1);
201 }
202
203 printf("aplay exit\n");
204 return ;
205}
206void arec(void)
207{
208 int ret;
209 char operator[10];
210 int opt;
211 int hdl = 0;
212 int handler = 0;
213
214 while(1)
215 {
216 printf("=======arec======\n"
217 "\t 0 Open PCM\n"
218 "\t 1 Start Record\n"
219 "\t 2 Get state\n"
220 "\t 3 Pause\n"
221 "\t 4 Resume\n"
222 "\t 5 Stop\n"
223 "\t 6 Close\n"
224 "\t others exit\n\n"
225 "operator >> ");
226
227 fflush(stdin);
228 fgets(operator, sizeof(operator), stdin);
229 opt = atoi(operator);
230 switch (opt)
231 {
232 case 0:
233 mbtk_audio_ubus_client_init(&handler, dtmf_cb1);
234 mbtk_audio_switch_pcm(1);
235 mbtk_audio_mode_set(2);
236 hdl = Ql_AudRecorder_Open(NULL, record_cb_func);
237 if (hdl == 0)
238 return ;
239 break;
240 case 1:
241 if(0 == hdl)
242 {
243 printf("audio is not initialized yet.\n");
244 continue;
245 }
246
247 if(0 != record_fd)
248 {
249 printf("audio It's already being recorded.\n");
250 continue;
251 }
252
253 record_fd = open(MBTK_AUD_DEMO_WAV, O_RDWR|O_CREAT|O_TRUNC, 0644);
254 if (record_fd <= 0)
255 {
256 printf("file open error\n");
257 continue;
258 }
259
260 mbtk_audio_path_enable(1);
261
262 if(0 == MBTK_wav_pcm16Le_set(record_fd))
263 {
264 ret = Ql_AudRecorder_StartRecord();
265 if(0 != ret)
266 {
267 printf("audio record error: %d\n", ret);
268 close(record_fd);
269 record_fd = 0;
270 }
271 }
272 else
273 {
274 printf("arec set file header error\n");
275 close(record_fd);
276 record_fd = 0;
277 }
278 mbtk_audio_path_enable(0);
279 break;
280 case 2:
281 // printf("arec state : %d\n", state);
282 break;
283 case 3:
284 break;
285 case 4:
286 break;
287 case 5:
288 break;
289 case 6:
290 Ql_AudRecorder_Close();
291// mbtk_audio_mode_set(2);
292 if(record_fd > 0)
293 {
294 close(record_fd);
295 record_fd = 0;
296 }
297 mbtk_audio_mode_set(0);
298 mbtk_audio_switch_pcm(0);
299 break;
300 default:
301 return;
302 }
303
304 sleep(1);
305 }
306
307 printf("arec exit\n");
308 return ;
309}
310int main(void)
311{
312 char operator[10];
313 int opt;
314
315 while(1)
316 {
317 printf("=========audio main=========\n"
318 "\t0 exit\n"
319 "\t1 aplay\n"
320 "\t2 arec\n"
321 "\t3 set speaker Volume\n"
322 "\t4 get speaker Volume\n"
323 "\t5 set mic Volume\n"
324 "\t6 get mic Volume\n"
325 "\t7 tts\n"
326 "\t8 tone\n"
327 "operator: >> ");
328
329 fgets(operator, sizeof(operator), stdin);
330 fflush(stdin);
331 opt = atoi(operator);
332 switch (opt)
333 {
334 case 0:
335 printf("main exit\n");
336 return 0;
337 case 1:
338 aplay();
339 break;
340 case 2:
341 arec();
342 break;
343 case 3:
344 mbtk_at_rec(NULL);
345 break;
346 case 4:
347 mbtk_at_play(NULL);
348 break;
349 case 5:
350 break;
351 case 6:
352 break;
353 case 7:
354 break;
355 case 8:
356 break;
357 default:
358 break;
359 }
360
361 sleep(1);
362 }
363
364 return 0;
365}