Răsfoiți Sursa

add: 添加tm8211播放tts的demo

??? 8 luni în urmă
părinte
comite
b746aa2fb3
2 a modificat fișierele cu 191 adăugiri și 0 ștergeri
  1. 128 0
      luat/demo/tm8211_tts/main.lua
  2. 63 0
      luat/demo/tm8211_tts/qianzw.txt

+ 128 - 0
luat/demo/tm8211_tts/main.lua

@@ -0,0 +1,128 @@
+
+-- LuaTools需要PROJECT和VERSION这两个信息
+PROJECT = "tts_tm8211"
+VERSION = "1.0.0"
+
+-- sys库是标配
+_G.sys = require("sys")
+_G.sysplus = require("sysplus")
+
+local pa_pin = 16 -- 喇叭pa功放脚
+local power_pin = 17 -- tm8211电源脚 -----> 也是AirAudio_1020扩展板上的I2S_EN脚
+
+local i2s_id = 0            -- i2s_id 0
+local i2s_mode = 0          -- i2s模式 0 主机 1 从机
+local i2s_sample_rate = 16000   -- 采样率
+local i2s_bits_per_sample = 16  -- 数据位数
+local i2s_channel_format = i2s.STEREO   -- 声道, 0 左声道, 1 右声道, 2 立体声
+local i2s_communication_format = i2s.MODE_MSB   -- 格式, 可选MODE_I2S, MODE_LSB, MODE_MSB
+local i2s_channel_bits = 16     -- 声道的BCLK数量
+
+local multimedia_id = 0         -- 音频通道 0
+local pa_on_level = 1           -- PA打开电平 1 高电平 0 低电平
+local power_delay = 3           -- 在DAC启动前插入的冗余时间,单位100ms
+local pa_delay = 10            -- 在DAC启动后,延迟多长时间打开PA,单位1ms
+local power_on_level = 1        -- 电源控制IO的电平,默认拉高
+local power_time_delay = 0    -- 音频播放完毕时,PA与DAC关闭的时间间隔,单位1ms
+
+local voice_vol = 60        -- 喇叭音量
+local mic_vol = 80          -- 麦克风音量
+function audio_setup()
+    sys.wait(100)
+    gpio.setup(power_pin, 1, gpio.PULLUP)
+    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 = "tm8211", i2sid = i2s_id})	--通道0的硬件输出通道设置为I2S
+
+    audio.vol(multimedia_id, voice_vol)
+    -- audio.micVol(multimedia_id, mic_vol)
+    sys.publish("AUDIO_READY")
+end
+
+-- 配置好audio外设
+sys.taskInit(audio_setup)
+
+local taskName = "task_audio"
+
+local MSG_MD = "moreData"   -- 播放缓存有空余
+local MSG_PD = "playDone"   -- 播放完成所有数据
+
+audio.on(0, function(id, event)
+    --使用play来播放文件时只有播放完成回调
+    local succ,stop,file_cnt = audio.getError(0)
+    if not succ then
+        if stop then
+            log.info("用户停止播放")
+        else
+            log.info("第", file_cnt, "个文件解码失败")
+        end
+    end
+    sysplus.sendMsg(taskName, MSG_PD)
+end)
+
+
+local function audio_task()
+    local result    
+    sys.waitUntil("AUDIO_READY")
+
+    -- 本例子是按行播放 "千字文", 文本来源自wiki百科
+    local fd = nil
+    local line = nil
+    while true do
+        log.info("开始播放")
+        line = nil
+        if not fd then
+            fd = io.open("/luadb/qianzw.txt")
+        end
+        if fd then
+            line = fd:read("*l")
+            if line == nil then
+                fd:close()
+                fd = nil
+            end
+        end
+        if line == nil then
+            line = "一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十"
+        end
+        line = line:trim()
+        log.info("播放内容", line)
+        result = audio.tts(0, line)
+        if result then
+        --等待音频通道的回调消息,或者切换歌曲的消息
+            while true do
+                msg = sysplus.waitMsg(taskName, nil)
+                if type(msg) == 'table' then
+                    if msg[1] == MSG_PD then
+                        log.info("播放结束")
+                        break
+                    end
+                else
+                    log.error(type(msg), msg)
+                end
+            end
+        else
+            log.debug("解码失败!")
+            sys.wait(1000)
+        end
+        if not audio.isEnd(0) then
+            log.info("手动关闭")
+            audio.playStop(0)
+        end
+        if audio.pm then
+		    audio.pm(0,audio.STANDBY)
+        end
+		-- audio.pm(0,audio.SHUTDOWN)	--低功耗可以选择SHUTDOWN或者POWEROFF,如果codec无法断电用SHUTDOWN
+        log.info("mem", "sys", rtos.meminfo("sys"))
+        log.info("mem", "lua", rtos.meminfo("lua"))
+        sys.wait(1000)
+    end
+    sysplus.taskDel(taskName)
+end
+
+sysplus.taskInitEx(audio_task, taskName)
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!

+ 63 - 0
luat/demo/tm8211_tts/qianzw.txt

@@ -0,0 +1,63 @@
+天地玄黄,宇宙洪荒.日月盈昃,辰宿列张.
+寒来暑往,秋收冬藏.闰余成岁,律吕调阳.
+云腾致雨,露结为霜.金生丽水,玉出昆冈.
+剑号巨阙,珠称夜光.果珍李柰,菜重芥姜.
+海咸河淡,鳞潜羽翔.龙师火帝,鸟官人皇.
+始制文字,乃服衣裳.推位让国,有虞陶唐.
+吊民伐罪,周发殷汤.坐朝问道,垂拱平章.
+爱育黎首,臣伏戎羌.遐迩一体,率宾归王.
+鸣凤在竹,白驹食场.化被草木,赖及万方.
+盖此身发,四大五常.恭惟鞠养,岂敢毁伤.
+女慕贞洁,男效才良.知过必改,得能莫忘.
+罔谈彼短,靡恃己长.信使可覆,器欲难量.
+墨悲丝染,诗赞羔羊.景行维贤,克念作圣.
+德建名立,形端表正.空谷传声,虚堂习听.
+祸因恶积,福缘善庆.尺璧非宝,寸阴是竞.
+资父事君,曰严与敬.孝当竭力,忠则尽命.
+临深履薄,夙兴温凊.似兰斯馨,如松之盛.
+川流不息,渊澄取映.容止若思,言辞安定.
+笃初诚美,慎终宜令.荣业所基,籍甚无竟.
+学优登仕,摄职从政.存以甘棠,去而益咏.
+乐殊贵贱,礼别尊卑.上和下睦,夫唱妇随.
+外受傅训,入奉母仪.诸姑伯叔,犹子比儿.
+孔怀兄弟,同气连枝.交友投分,切磨箴规.
+仁慈隐恻,造次弗离.节义廉退,颠沛匪亏.
+性静情逸,心动神疲.守真志满,逐物意移.
+坚持雅操,好爵自縻.都邑华夏,东西二京.
+背邙面洛,浮渭据泾.宫殿盘郁,楼观飞惊.
+图写禽兽,画彩仙灵.丙舍旁启,甲帐对楹.
+肆筵设席,鼓瑟吹笙.升阶纳陛,弁转疑星.
+右通广内,左达承明.既集坟典,亦聚群英.
+杜稿钟隶,漆书壁经.府罗将相,路侠槐卿.
+户封八县,家给千兵.高冠陪辇,驱毂振缨.
+世禄侈富,车驾肥轻.策功茂实,勒碑刻铭.
+磻溪伊尹,佐时阿衡.奄宅曲阜,微旦孰营.
+桓公匡合,济弱扶倾.绮回汉惠,说感武丁.
+俊乂密勿,多士实宁.晋楚更霸,赵魏困横.
+假途灭虢,践土会盟.何遵约法,韩弊烦刑.
+起翦颇牧,用军最精.宣威沙漠,驰誉丹青.
+九州禹迹,百郡秦并.岳宗泰岱,禅主云亭.
+雁门紫塞,鸡田赤城.昆池碣石,钜野洞庭.
+旷远绵邈,岩岫杳冥.治本于农,务兹稼穑.
+俶载南亩,我艺黍稷.税熟贡新,劝赏黜陟.
+孟轲敦素,史鱼秉直.庶几中庸,劳谦谨敕.
+聆音察理,鉴貌辨色.贻厥嘉猷,勉其祗植.
+省躬讥诫,宠增抗极.殆辱近耻,林皋幸即.
+两疏见机,解组谁逼.索居闲处,沉默寂寥.
+求古寻论,散虑逍遥.欣奏累遣,戚谢欢招.
+渠荷的历,园莽抽条.枇杷晚翠,梧桐蚤凋.
+陈根委翳,落叶飘摇.游鹍独运,凌摩绛霄.
+耽读玩市,寓目囊箱.易輶攸畏,属耳垣墙.
+具膳餐饭,适口充肠.饱饫烹宰,饥厌糟糠.
+亲戚故旧,老少异粮.妾御绩纺,侍巾帷房.
+纨扇圆絜,银烛炜煌.昼眠夕寐,蓝笋象床.
+弦歌酒宴,接杯举觞.矫手顿足,悦豫且康.
+嫡后嗣续,祭祀烝尝.稽颡再拜,悚惧恐惶.
+笺牒简要,顾答审详.骸垢想浴,执热愿凉.
+驴骡犊特,骇跃超骧.诛斩贼盗,捕获叛亡.
+布射僚丸,嵇琴阮啸.恬笔伦纸,钧巧任钓.
+释纷利俗,并皆佳妙.毛施淑姿,工颦妍笑.
+年矢每催,曦晖朗曜.璇玑悬斡,晦魄环照.
+指薪修祜,永绥吉劭.矩步引领,俯仰廊庙.
+束带矜庄,徘徊瞻眺.孤陋寡闻,愚蒙等诮.
+谓语助者,焉哉乎也.