伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

通話錄音功能實現:自動接聽 + 自動錄音開源方案

合宙LuatOS ? 2026-04-13 13:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

AirUI 可視化方案仍在優化中,其輕量化、低成本、高可靠的特性在工業場景具備一定應用價值。針對用戶對通話錄音功能的需求,本文提供一套可直接落地的實現方案,支持自動接聽與自動錄音,適用于暫無需可視化 UI 的場景參考。

一、方案功能
基于LuatOS開發,適配多種型號核心板,可實現低成本通話留痕,適用于客服系統、會議記錄、遠程問診、話務工單追溯等場景。

主要功能特色如下:

自動接聽: 來電響鈴2聲后自動接聽,無需手動操作。

自動錄音: 通話接通后自動開始錄音,對方掛斷后自動停止。

SD卡存儲: 錄音文件以PCM格式保存到SD卡,支持自動掛載和空間檢測。

數據優化: 只保存上行數據,避免下行數據造成的回聲問題。

跨模組兼容: Air780EHM、Air780EGH、Air780EHV、Air8000系列核心板,均可通過外掛音頻配件板和SD卡存儲配件板實現。

簡而言之:一套方案搞定多個硬件型號,極大提升開發效率。

二、主要硬件準備
方案一:Air8000/Air780EHV開發板

開發板提供了豐富的音頻接口資源,可通過開發板上的音頻接口進行連接和測試。

如Air8000/Air780EHV開發板:

wKgZO2ncfY6AYoGSABp3sKCAJA0239.png

方案二:核心板+配件板

如果沒有Air780EHV和Air8000系列Turnkey開發板,那么可使用Air780EHM、Air780EGH、Air780EHV、Air8000系列核心板,通過外掛音頻配件板和存儲配件板來實現通話錄音功能。

AirAUDIO_1010音頻配件板: 負責音頻輸入輸出;

AirMICROSD_1010存儲配件板: 提供SD卡存儲功能。

連接小貼士: 如果搭配AirAUDIO_1010擴展板測試,需將擴展板中PA開關撥到OFF,讓軟件控制PA,避免pop音。

本文以Air780EGH為例:

接線方式參照下方圖表對應連接(注意不同型號核心板具體引腳號差異):

wKgZO2ncfcaADN0oABUG9Ev8m6w734.png

wKgZPGncfeCAfg0dAAUthHXjVAo797.png

三、開源示例與教程
基于LuatOS開發的通話錄音示例已上傳Gitee開源倉庫,即便是新接觸LuatOS開發的朋友,也可以根據合宙資料中心提供配套實操教程快速上手。

核心功能模塊包括SD卡掛載、通話狀態機、錄音數據回調等,完整示例代碼詳見源碼倉庫最新文件。

--[[ 錄音功能特性: - 錄音文件保存為PCM格式:/sd/record_call.pcm - 只保存上行數據(包含本地聲音和網絡回聲) - 下行數據自動跳過,避免重復存儲 - 支持SD卡自動掛載和空間檢測 -- ====================== 錄音功能 ====================== -- 創建音頻數據緩沖區 local up1 = zbuff.create(BUFFER_SIZE,0) -- 上行數據保存區1 local up2 = zbuff.create(BUFFER_SIZE,0) -- 上行數據保存區2 local down1 = zbuff.create(BUFFER_SIZE,0) -- 下行數據保存區1 local down2 = zbuff.create(BUFFER_SIZE,0) -- 下行數據保存區2 -- 打開錄音文件 local function open_record_file() -- 先掛載SD卡 if not mount_sd_card() then log.error("錄音文件", "SD卡掛載失敗,無法進行錄音") return false end log.info("錄音文件", "SD卡掛載成功,錄音文件將保存到SD卡") -- 關閉已打開的文件 if record_file then record_file:close() record_file = nil end -- 刪除舊錄音文件 if io.exists(RECORD_FILE_PATH) then os.remove(RECORD_FILE_PATH) log.info("錄音文件", "刪除舊錄音文件:", RECORD_FILE_PATH) end -- 創建錄音文件 record_file = io.open(RECORD_FILE_PATH, "wb") if record_file then log.info("錄音文件", "創建錄音文件成功:", RECORD_FILE_PATH) record_start_time = mcu.ticks() is_recording_to_file = true return true else log.error("錄音文件", "創建錄音文件失敗:", RECORD_FILE_PATH) return false end end -- 關閉錄音文件 local function close_record_file() if record_file then record_file:close() record_file = nil local file_size = io.fileSize(RECORD_FILE_PATH) record_duration = (mcu.ticks() - record_start_time) / 1000 -- 轉換為秒 log.info("錄音文件", "錄音完成", "文件大小:", file_size, "字節", "錄音時長:", string.format("%.1f", record_duration), "秒", "路徑:", RECORD_FILE_PATH) is_recording_to_file = false record_start_time = 0 record_duration = 0 end end -- 寫入錄音數據到文件 local function write_record_data(buff, is_downlink) if not record_file or not is_recording_to_file then return false end -- 保存數據 if not is_downlink then local data_size = buff:used() if data_size > 0 then local start_time = mcu.ticks() -- 寫入數據到文件 record_file:write(buff:query()) local end_time = mcu.ticks() local write_time = end_time - start_time local write_speed = data_size / (write_time / 1000) -- 字節/秒 log.info("錄音寫入", "數據大小:", data_size, "字節,", "寫入耗時:", string.format("%.2f", write_time), "ms,", "寫入速度:", string.format("%.2f", write_speed / 1024), "KB/s") return true end else -- 下行數據不保存,只記錄日志 -- 寫入下行數據會導致文件內有回聲 local data_size = buff:used() if data_size > 0 then log.info("錄音寫入", "下行數據跳過", "數據大小:", data_size, "字節") end end return false end -- 音頻數據回調函數 local function recordCallback(is_dl, point) if is_dl then log.info("錄音", "下行數據,位于緩存", point+1, "緩存1數據量", down1:used(), "緩存2數據量", down2:used()) -- 處理下行數據 if point == 0 then write_record_data(down1, true) down1:del() -- 清空緩沖區 else write_record_data(down2, true) down2:del() -- 清空緩沖區 end else log.info("錄音", "上行數據,位于緩存", point+1, "緩存1數據量", up1:used(), "緩存2數據量", up2:used()) -- 處理上行數據 if point == 0 then write_record_data(up1, false) up1:del() -- 清空緩沖區 else write_record_data(up2, false) up2:del() -- 清空緩沖區 end end log.info("通話質量", cc.quality()) end -- 啟用通話錄音 local function enableRecording() cc.record(true, up1, up2, down1, down2) cc.on("record", recordCallback) log.info("cc_app", "通話錄音已啟用") end -- 開始通話錄音到文件 local function start_call_recording() if open_record_file() then log.info("通話錄音", "開始錄音到文件:", RECORD_FILE_PATH) return true else log.error("通話錄音", "無法開始錄音到文件,請檢查SD卡") return false end end -- 停止通話錄音到文件 local function stop_call_recording() close_record_file() log.info("通話錄音", "停止錄音到文件") end -- 獲取所有緩沖區 local function getRecordingBuffers() return { up1 = up1, up2 = up2, down1 = down1, down2 = down2 } end -- 獲取錄音文件信息 local function get_record_file_info() if io.exists(RECORD_FILE_PATH) then local file_size = io.fileSize(RECORD_FILE_PATH) return { path = RECORD_FILE_PATH, size = file_size, duration = record_duration, exists = true } else return { path = RECORD_FILE_PATH, size = 0, duration = 0, exists = false } end end -- 呼入自動接聽,等待對方掛斷 local function handle_scenario(status) if status == "INCOMINGCALL" then -- 獲取來電號碼 caller_number = cc.lastNum() or "未知號碼" call_counter = call_counter + 1 log.info("收到來電,號碼:", caller_number, "響鈴次數:", call_counter) -- 響鈴2聲后自動接聽 if call_counter >= 2 then log.info("自動接聽來電") cc.accept(0) call_counter = 0 -- 重置計數器 end elseif status == "SPEECH_START" then -- 語音通話真正開始 log.info("電話已接通,電話號碼:", caller_number) -- 開始通話錄音到文件 start_call_recording() elseif status == "DISCONNECTED" then -- 對方掛斷通話 log.info("通話結束對方掛斷") -- 停止通話錄音到文件 stop_call_recording() call_counter = 0 -- 重置計數器 end end -- ====================== 主事件處理器 ====================== sys.subscribe("CC_IND", function(status) log.info("CC狀態", status) handle_scenario(status) -- 需要處理的通用狀態 if status == "READY" then sys.publish("CC_READY") -- 發布系統就緒事件 elseif status == "HANGUP_CALL_DONE" or status == "MAKE_CALL_FAILED" or status == "DISCONNECTED" then exaudio.pm(audio.SHUTDOWN) --主動進入低功耗模式 end end) -- ====================== 電話系統初始化 ====================== local function init_cc() -- 先嘗試掛載SD卡 mount_sd_card() -- 初始化音頻設備 audio_drv.initAudioDevice() -- 等待電話系統就緒 sys.waitUntil("CC_READY") -- 初始化電話功能 cc.init(audio_drv.getMultimediaId()) -- 啟用通話錄音(錄音功能在cc_app中) enableRecording() log.info("cc_app", "電話系統初始化完成") end -- 啟動初始化任務 sys.taskInit(init_cc) 四、使用注意事項 必須插入SD卡才能使用錄音功能,因為錄音文件較大無法存入內存;緩沖區大小必須是640的倍數,否則可能導致錄音異常。

四、使用注意事項

必須插入SD卡才能使用錄音功能,因為錄音文件較大無法存入內存;緩沖區大小必須是640的倍數,否則可能導致錄音異常。

錄音文件保存在SD卡的/sd/record_call.pcm路徑下,可以通過讀卡器在電腦上查看;錄音文件為原始PCM格式,需要使用專用播放器(如Audacity)播放。

wKgZO2ncfw6APds2AADiMWJCQxw308.png


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Lua
    Lua
    +關注

    關注

    0

    文章

    88

    瀏覽量

    11505
  • 通話錄音
    +關注

    關注

    0

    文章

    3

    瀏覽量

    1125
  • 物聯網開發
    +關注

    關注

    0

    文章

    12

    瀏覽量

    1934
  • LuatOS
    +關注

    關注

    0

    文章

    168

    瀏覽量

    2738
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    解決蘋果手機通話不能錄音的問題

    的iphone7,也是一樣沒有通話錄音功能的。為這個問題,也在很多地方找過解決辦法,比較常見的的一種解決辦法,就是第三方錄音軟件。這樣的軟件大部分是有一個時間的免費試用時間,比如可以免費試錄5分鐘
    發表于 11-08 16:27

    iPhone6手機通話時怎么錄音?,完美攻略get起來吧~

    通話錄音便是其中的一項,通話錄音功能對于一些人的幫助還是蠻大的,畢竟在當下社會風氣下,有很多東西都是需要證據的,而這項功能無疑對于一些人來說還是有很大的需求的,并且是保護自身的一種方
    發表于 12-05 19:17

    8路電話錄音

    多路通話錄音(單機多達128路); 錄音任一路的實時通話情況; 在本機和網絡查詢、錄音任一個錄音; 系統24小時不間斷
    發表于 06-05 10:15 ?635次閱讀

    8路電話錄音

    主要功能 多路通話錄音(單機多達128路); 錄音任一路的實時通話情況; 在本機和網絡查詢、錄音任一個
    發表于 06-12 15:20 ?901次閱讀

    電話錄音,電話錄音系統,電話錄音卡,電話錄音

    主要功能 多路通話錄音(單臺電腦可組建1~128路電話錄音系統); 錄音任一路的實時通話情況; 在本機和網絡查詢、
    發表于 07-30 10:05 ?765次閱讀

    錄音電話,錄音電話是什么意思

    錄音電話,錄音電話是什么意思 錄音電話指具有能自動應答和對通話內容進行錄音
    發表于 03-06 17:31 ?2262次閱讀

    做好通話錄音設備,要考量這幾個方面

      在給許多客服打電話的時候,你肯定會聽到以下對白,“為了保障你的利益,你的通話可能會被錄音”。但是你知道是怎么錄音的嗎?用一支錄音筆放在電話機旁邊?用以前老港片里面用的那種磁帶式模擬
    發表于 05-27 16:36 ?1986次閱讀

    電腦版本的通話錄音軟件有哪些

    ? ? 隨著時代的進步,人民生活水平的提升,人們的通訊安全意識也在不斷的提高。手機上下載了各種錄音軟件、管家軟件。那么電腦版本的通話錄音軟件有哪些呢?今天就為大家推薦一款安全性高的通話錄音軟件
    發表于 07-09 13:34 ?1188次閱讀

    谷歌Android Pie系統正式推出,除了添加一些新特性外通話錄音功能遭遇封殺

    近日谷歌公司正式向外界推出Android Pie正式系統版本,這次更新又添加了一些新特性。新功能包含全新的導航UI、游戲保護、全局黑夜模式等,不過令人意外的是據外媒報道今年2月份添加的通話錄音功能被完全阻止,對眾多用戶來言并不能
    發表于 08-17 16:25 ?1279次閱讀

    ios15支持通話錄音功能嗎 蘋果如何設置通話錄音

    ios15支持通話錄音功能嗎?雖然蘋果公司已經發布了ios15系統,想必大家應該還不知道如何設置ios15系統通話錄音功能,下面就由小編簡單介紹一下!
    的頭像 發表于 06-11 09:59 ?2.8w次閱讀

    ios15出通話錄音,ios15有通話錄音

    由于蘋果手機對隱私保護看的很重要,所以就一直沒有通話錄音功能。隨著這次的ios15操作系統的發布,果粉們比較關注的問題就是蘋果手機能否錄音。據小編關注的發布會來看,ios15系統包含了多項新
    的頭像 發表于 06-11 11:17 ?1.5w次閱讀

    電銷自動外呼系統的主要功能都有哪些

    自動外呼系統主要功能: 1、自動外呼功能 可新建外呼任務,批量導入電話號碼,不用手動撥出,系統自動進行外呼,提高外呼效率。 2、
    發表于 07-16 17:07 ?2556次閱讀

    蘋果13有通話錄音功能

    iPhone13即將發布,也曝光了各種外觀、配置參數以及功能,網友們都很關注iPhone13有沒有通話錄音的這個功能,但是到目前為止還沒有看到有消息流出。由于iPhone對個人隱私權的看重,或許iPhone13依然不支持
    的頭像 發表于 09-10 10:50 ?4.8w次閱讀

    【蘋果神器來襲】錄音寶,讓你的通話錄音so easy!

    中,比如商務溝通、重要會議記錄、與家人朋友的珍貴對話等,通話錄音往往有著至關重要的作用。為了滿足廣大蘋果用戶對通話錄音這一功能的強烈需求;唯創知音公司精心研發并推
    的頭像 發表于 07-27 08:38 ?1710次閱讀
    【蘋果神器來襲】<b class='flag-5'>錄音</b>寶,讓你的<b class='flag-5'>通話錄音</b>so easy!

    工業場景通話錄音:LuatOS 開源方案

    目前AirUI可視化方案仍在優化階段,其輕量化、低成本、高可靠的特點已逐步顯現,在工業場景中具有一定的應用潛力。 考慮到大家對通話錄音功能的迫切需求,今天就為大家分享一套可直接實操的方案
    的頭像 發表于 04-14 12:36 ?26次閱讀
    工業場景<b class='flag-5'>通話錄音</b>:LuatOS <b class='flag-5'>開源</b><b class='flag-5'>方案</b>