1 /*
2 * Copyright (C) 2020-2023 Alibaba Group Holding Limited
3 */
4 #include <stdio.h>
5 #include <stdint.h>
6 #include <stdbool.h>
7 #include <ulog/ulog.h>
8 #include "uvoice_init.h"
9 #include "uvoice_types.h"
10 #include "uvoice_event.h"
11 #include "uvoice_player.h"
12 #include "uvoice_recorder.h"
13 #include "ulog/ulog.h"
14 #include "aos/kernel.h"
15 #include "uvoice_os.h"
16 #include "player.h"
17
18 #define TAG "player"
19 static aos_task_t play_task;
20 static uvoice_player_t *uvocplayer;
21 static char text_source[256];
22 static player_cb_t play_done_cb = NULL;
23 static player_mp3_e g_file = PLAYER_MP3_MAX;
24
25 extern int audio_install_codec_driver();
26
get_format_from_name(char * name,media_format_t * format)27 static int get_format_from_name(char *name, media_format_t *format)
28 {
29 if (!name || !format) {
30 LOGE(TAG, "arg null !\n");
31 return -1;
32 }
33
34 if (strstr(name, ".mp3") || strstr(name, ".MP3"))
35 *format = MEDIA_FMT_MP3;
36 else if (strstr(name, ".wav") || strstr(name, ".WAV"))
37 *format = MEDIA_FMT_WAV;
38 else if (strstr(name, ".aac") || strstr(name, ".AAC"))
39 *format = MEDIA_FMT_AAC;
40 else if (strstr(name, ".m4a") || strstr(name, ".M4A"))
41 *format = MEDIA_FMT_M4A;
42 else if (strstr(name, ".pcm") || strstr(name, ".PCM"))
43 *format = MEDIA_FMT_PCM;
44 else if (strstr(name, ".spx") || strstr(name, ".SPX"))
45 *format = MEDIA_FMT_SPX;
46 else if (strstr(name, ".ogg") || strstr(name, ".OGG"))
47 *format = MEDIA_FMT_OGG;
48 else if (strstr(name, ".amrwb") || strstr(name, ".AMRWB"))
49 *format = MEDIA_FMT_AMRWB;
50 else if (strstr(name, ".amr") || strstr(name, ".AMR"))
51 *format = MEDIA_FMT_AMR;
52 else if (strstr(name, ".opus") || strstr(name, ".OPUS"))
53 *format = MEDIA_FMT_OPS;
54 else if (strstr(name, ".flac") || strstr(name, ".FLAC"))
55 *format = MEDIA_FMT_FLAC;
56
57 return 0;
58 }
59
play_music(void * arg)60 static void *play_music(void *arg)
61 {
62 media_format_t format = MEDIA_FMT_UNKNOWN;
63 get_format_from_name(text_source, &format);
64
65 if (uvocplayer->set_source(text_source)) {
66 LOGE(TAG, "set source failed !\n");
67 return NULL;
68 }
69
70 if (uvocplayer->start()) {
71 LOGE(TAG, "start failed !\n");
72 uvocplayer->clr_source();
73 }
74
75 // uvocplayer->wait_complete();
76
77 if (play_done_cb)
78 play_done_cb(g_file);
79
80 return NULL;
81 }
82
83
player_play(player_mp3_e file)84 int32_t player_play(player_mp3_e file)
85 {
86 int32_t random;
87
88 random = rand() % 240;
89 LOG("random: %d\n", random);
90 memset(text_source, 0, sizeof(text_source));
91 if (file == PLAYER_MP3_WELCOME) {
92 strcpy(text_source, "fs:/data/mp3/welcome.mp3");
93 } else if (file == PLAYER_MP3_WAKEUP) {
94 // if (random < 100) {
95 // strcpy(text_source, "fs:/data/mp3/haas_intro.mp3");
96 // } else
97 if (random > 0 && random < 150) {
98 strcpy(text_source, "fs:/data/mp3/zhurenyoushenmkeyibangnin.mp3");
99 } else if (random > 150 && random < 200) {
100 strcpy(text_source, "fs:/data/mp3/zhurenwozai.mp3");
101 } else {
102 strcpy(text_source, "fs:/data/mp3/eiwozai.mp3");
103 }
104 g_file = PLAYER_MP3_WAKEUP;
105 } else if (file == PLAYER_MP3_LIGHT_ON) {
106 strcpy(text_source, "fs:/data/mp3/haodeyiweinindakai.mp3");
107 g_file = PLAYER_MP3_LIGHT_ON;
108 } else if (file == PLAYER_MP3_LIGHT_OFF) {
109 strcpy(text_source, "fs:/data/mp3/haodeyiweininguanbi.mp3");
110 g_file = PLAYER_MP3_LIGHT_OFF;
111 }
112
113 #if 1
114 /*set player enter idle state after a long time*/
115 uvocplayer->set_standby(2147483646);
116
117 play_music(NULL);
118 uvocplayer->wait_complete();
119 aos_msleep(500);
120 #else
121 aos_task_new_ext(&play_task,
122 "play music task", play_music,
123 NULL, 8192, 0);
124 #endif
125 return 0;
126 }
127
player_stop(void)128 int32_t player_stop(void)
129 {
130 player_state_t state;
131
132 /*stop and clear current playing*/
133 uvocplayer->set_fade(40, 40);
134 uvocplayer->stop_async();
135 uvocplayer->clr_source();
136
137 }
138
139
player_wait_complete(void)140 int32_t player_wait_complete(void)
141 {
142 int32_t ret;
143
144 ret = uvocplayer->wait_complete();
145 if (ret < 0)
146 aos_msleep(1000);
147 aos_msleep(500);
148 }
149
player_init(player_cb_t cb)150 int32_t player_init(player_cb_t cb)
151 {
152 int32_t ret;
153
154 /*Init uvoice to play mp3*/
155 ret = uvoice_init();
156 if (ret < 0) {
157 LOGE(TAG, "uvoice_init failed !\n");
158 return -1;
159 }
160
161 /*create uvoice player*/
162 uvocplayer = uvoice_player_create();
163 if (!uvocplayer) {
164 LOGE(TAG, "create media player failed !\n");
165 return -1;
166 }
167 /*set eq*/
168 uvocplayer->eq_enable(0);
169
170 /*set play volume*/
171 uvocplayer->set_volume(10);
172
173 play_done_cb = cb;
174 return 0;
175 }
176