Dozingfiretruck 1 год назад
Родитель
Сommit
7f3fce76c1

+ 1 - 1
components/multimedia/luat_multimedia.h

@@ -8,7 +8,7 @@
 #include "luat_multimedia_codec.h"
 #include "luat_audio.h"	// 音频设备
 //预留
-// #include "luat_vedio.h"	// 视频设备
+// #include "luat_video.h"	// 视频设备
 
 //以下LUAT_MULTIMEDIA_AUDIO_BUS_XXX 枚举只做保留,不要再使用,使用 LUAT_AUDIO_BUS_XXX 
 enum{

+ 6 - 0
components/multimedia/luat_multimedia_codec.h

@@ -40,6 +40,10 @@ enum{
 #include <stddef.h>
 #include <stdio.h>
 
+#ifndef __BSP_COMMON_H__
+#include "c_common.h"
+#endif
+
 typedef struct{
 	union{
 		void *mp3_decoder;
@@ -50,6 +54,8 @@ typedef struct{
 #ifdef __LUATOS__
 	luat_zbuff_t buff;
 #endif
+	Buffer_Struct file_data_buffer;
+	Buffer_Struct audio_data_buffer;
 	uint8_t type;
 	uint8_t is_decoder;
 }luat_multimedia_codec_t;

+ 68 - 19
demo/tts/main.lua

@@ -65,6 +65,72 @@ if rtos.bsp() == "EC618" and pm and pm.PWK_MODE then
     pm.power(pm.PWK_MODE, false)
 end
 
+function audio_setup()
+    local bsp = rtos.bsp()
+    if bsp == "EC618" then
+        --Air780E开发板配套+音频扩展板. ES7149
+        --由于音频扩展板的PA是长供电的,有塔塔声音是正常的,做产品的话有额外的参考设计
+        i2s.setup(0, 0, 0, 0, 0, i2s.MODE_I2S)
+
+        --如果用TM8211,打开下面的注释
+        -- i2s.setup(0, 0, 0, 0, 0, i2s.MODE_MSB)
+
+        --如果用软件DAC,打开下面的注释
+        -- if audio.setBus then
+        --     audio.setBus(0, audio.BUS_SOFT_DAC)
+        -- end
+        audio.config(0, 25, 1, 3, 100)
+    elseif bsp == "EC718P" then
+        pm.power(pm.LDO_CTL, false)  --开发板上ES8311由LDO_CTL控制上下电
+        sys.wait(100)
+        pm.power(pm.LDO_CTL, true)  --开发板上ES8311由LDO_CTL控制上下电
+
+        local multimedia_id = 0
+        local i2c_id = 0
+        local i2s_id = 0
+        local i2s_mode = 0
+        local i2s_sample_rate = 16000
+        local i2s_bits_per_sample = 16
+        local i2s_channel_format = 0
+        local i2s_communication_format = 0
+        local i2s_channel_bits = 16
+    
+        local pa_pin = 25
+        local pa_on_level = 1
+        local pa_delay = 100
+        local power_pin = 255
+        local power_on_level = 1
+        local power_delay = 3
+        local power_time_delay = 100
+
+        local voice_vol = 70
+        local mic_vol = 80
+    
+        i2c.setup(i2c_id,i2c.FAST)
+        i2s.setup(i2s_id, i2s_mode, i2s_sample_rate, i2s_bits_per_sample, i2s_channel_format, i2s_communication_format,i2s_channel_bits)
+    
+        audio.config(multimedia_id, pa_pin, pa_on_level, power_delay, pa_delay, power_pin, power_on_level, power_time_delay)
+        audio.setBus(multimedia_id, audio.BUS_I2S,{chip = "es8311",i2cid = i2c_id , i2sid = i2s_id})	--通道0的硬件输出通道设置为I2S
+
+        audio.vol(multimedia_id, voice_vol)
+        audio.micVol(multimedia_id, mic_vol)
+    
+    elseif bsp == "AIR105" then
+        -- Air105开发板支持DAC直接输出
+        audio.config(0, 25, 1, 3, 100)
+    else
+        -- 其他板子未支持
+        while 1 do
+            log.info("audio", "尚未支持的BSP")
+            sys.wait(1000)
+        end
+    end
+    sys.publish("AUDIO_READY")
+end
+
+-- 配置好audio外设
+sys.taskInit(audio_setup)
+
 local taskName = "task_audio"
 
 local MSG_MD = "moreData"   -- 播放缓存有空余
@@ -85,25 +151,8 @@ end)
 
 
 local function audio_task()
-    local result
-    --Air780E开发板配套+音频扩展板. ES7149
-    --由于音频扩展板的PA是长供电的,有塔塔声音是正常的,做产品的话有额外的参考设计
-    i2s.setup(0, 0, 0, 0, 0, i2s.MODE_I2S)
-
-    --如果用TM8211,打开下面的注释
-    -- i2s.setup(0, 0, 0, 0, 0, i2s.MODE_MSB)
-
-    
-    --如果用软件DAC,打开下面的注释
-    -- if audio.setBus then
-    --     audio.setBus(0, audio.BUS_SOFT_DAC)
-    -- end
-    audio.config(0, 25, 1, 6, 200)
-    -- gpio.setup(24, 0)
-    -- gpio.setup(23, 0)
-    -- gpio.setup(27, 0)
-    -- gpio.setup(2, 0)
-
+    local result    
+    sys.waitUntil("AUDIO_READY")
     -- 初始化spi flash, 如果是极限版TTS_ONCHIP,就不需要初始化
     if sfud then
         spi_flash = spi.deviceSetup(0,8,0,0,8,25600000,spi.MSB,1,0)