Răsfoiți Sursa

Merge branch 'master' of https://gitee.com/openLuat/LuatOS

Dozingfiretruck 3 ani în urmă
părinte
comite
3683e44d25

+ 27 - 0
components/multimedia/luat_lib_multimedia_audio.c

@@ -321,6 +321,23 @@ static int l_audio_vol(lua_State *L) {
     return 1;
 }
 
+/*
+配置一个音频通道的硬件输出总线,只有对应soc软硬件平台支持才设置对应类型
+@api audio.vol(id, bus_type)
+@int 音频通道
+@int 总线类型
+@return
+@usage
+audio.setBus(0, audio.BUS_SOFT_DAC)	--通道0的硬件输出通道设置为软件DAC
+audio.setBus(0, audio.BUS_I2S)	--通道0的硬件输出通道设置为I2S
+*/
+static int l_audio_set_output_bus(lua_State *L) {
+	luat_audio_set_bus_type(luaL_checkinteger(L, 1));
+    return 0;
+}
+
+
+
 
 #include "rotable2.h"
 static const rotable_Reg_t reg_audio[] =
@@ -339,9 +356,19 @@ static const rotable_Reg_t reg_audio[] =
 	{ "config",			ROREG_FUNC(l_audio_config)},
 	{ "vol",			ROREG_FUNC(l_audio_vol)},
 	{ "getError",			ROREG_FUNC(l_audio_play_get_last_error)},
+	{ "setBus",			ROREG_FUNC(l_audio_set_output_bus)},
+	//@const PCM number PCM格式,即原始ADC数据
     { "PCM",           ROREG_INT(MULTIMEDIA_DATA_TYPE_PCM)},
+	//@const MORE_DATA number audio.on回调函数传入参数的值,表示底层播放完一段数据,可以传入更多数据
 	{ "MORE_DATA",     ROREG_INT(MULTIMEDIA_CB_AUDIO_NEED_DATA)},
+	//@const DONE number audio.on回调函数传入参数的值,表示底层播放完全部数据了
 	{ "DONE",          ROREG_INT(MULTIMEDIA_CB_AUDIO_DONE)},
+	//@const BUS_DAC number 硬件输出总线,DAC类型
+	{ "BUS_DAC", 		ROREG_INT(MULTIMEDIA_AUDIO_BUS_DAC)},
+	//@const BUS_I2S number 硬件输出总线,I2S类型
+	{ "BUS_I2S", 		ROREG_INT(MULTIMEDIA_AUDIO_BUS_I2S)},
+	//@const BUS_SOFT_DAC number 硬件输出总线,软件模式DAC类型
+	{ "BUS_SOFT_DAC", 		ROREG_INT(MULTIMEDIA_AUDIO_BUS_SOFT_DAC)},
 	{ NULL,            ROREG_INT(0)}
 };
 

+ 4 - 0
components/multimedia/luat_multimedia.h

@@ -26,6 +26,10 @@ enum
 	MULTIMEDIA_CB_DECODE_DONE,			//音频解码完成
 	MULTIMEDIA_CB_TTS_INIT,				//TTS做完了必要的初始化,用户可以通过audio_play_tts_set_param做个性化配置
 	MULTIMEDIA_CB_TTS_DONE,				//TTS编码完成了。注意不是播放完成
+
+	MULTIMEDIA_AUDIO_BUS_DAC=0,
+	MULTIMEDIA_AUDIO_BUS_I2S,
+	MULTIMEDIA_AUDIO_BUS_SOFT_DAC
 };
 int l_multimedia_raw_handler(lua_State *L, void* ptr);
 

+ 4 - 0
demo/multimedia/main.lua

@@ -33,6 +33,10 @@ function audio_setup()
         --Air780E开发板配套+音频扩展板. ES8211
         --由于音频扩展板的PA是长供电的,有塔塔声音是正常的,做产品的话有额外的参考设计
         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)

+ 7 - 0
luat/include/luat_audio.h

@@ -129,4 +129,11 @@ int luat_audio_play_tts_set_param(uint32_t multimedia_id, uint32_t param_id, uin
 void luat_audio_config_pa(uint8_t multimedia_id, uint32_t pin, int level, uint32_t dummy_time_len, uint32_t pa_delay_time);
 void luat_audio_config_dac(uint8_t multimedia_id, int pin, int level, uint32_t dac_off_delay_time);
 uint16_t luat_audio_vol(uint8_t multimedia_id, uint16_t vol);
+
+/**
+ * @brief 设置音频硬件输出类型
+ *
+ * @param bus_type 见MULTIMEDIA_AUDIO_BUS,目前只有0=DAC 1=I2S 2=SOFT_DAC
+ */
+void luat_audio_set_bus_type(uint8_t bus_type);
 #endif