一臺手機如何在微信語音/視頻通話時把聲音錄下來

背景

微信語音/視頻開會一遍聽不清楚
和客戶微信語音溝通過後又忘記重點
保留重要的人的語音音頻
懶得用另外的設備錄音?

解決方案

既然微信沒有保存語音聊天的功能,自己加一個不就好了嗎?!

本文結束!
Alt

功能實現

1、 依賴Xposed框架(非root環境),給微信添加自定義的功能;
2、 微信語音文件(.amr格式)生成到自定義目錄

( 默認目錄:SD卡/tencent/micromsg/用戶/voice2)

3、 提供將.amr格式文件轉換成.mp3的功能;

文末附源碼

使用流程

  1. 安裝一個Xposed框架(推薦Xpatch
  2. 將微信和此模塊添加到框架裏
  3. 語音/視頻通話時,建議開啓免提,使對方的聲音更清楚
  4. 正常使用微信即可生成文件,平時無感知

預覽

  1. 點擊左.amr文件可在右側生成.mp3格式文件
  2. 點擊mp3文件點擊可直接播放
  3. 可在右上角設置mp3輸出文件路徑

錄音文件播放語音

思路

//發起或接聽語音視頻通話時,調用微信音頻方法

object LogHook:IXLogHook{
    //直接從日誌入手
    override fun onXLogWrite(level: String, tag: String, msg: String) {
         if(tag.contains("MicroMsg.Voip.VoipMgr")){
            if(msg.contains("onAccept")||msg.contains("on accept")){//接聽
                    if(Objects.ActivityParam!=null){
                    val outClassCon=Classes.ClassInternal.getDeclaredConstructors()[0]
                    val mContext=Objects.ActivityParam as Context
                    val mmContext=mContext.applicationContext
                    val outClassIntence=outClassCon.newInstance(mmContext,false)
                    val interClasseCon=Classes.ClassInternal.declaredClasses[0]
                    val con=interClasseCon.getDeclaredConstructors()[0]
                    con.setAccessible(true)
                    val interClasseInstance=con.newInstance(outClassIntence)
                    val methodGo= Classes.ClassInternal.getDeclaredMethod("go", C.String)
                    val Amethodgo=methodGo
                    Amethodgo.setAccessible(true)
                    val success = Amethodgo.invoke(outClassIntence,"_pathGo_") as Boolean
                    val methods= interClasseCon.getDeclaredMethod("run")
                    val Amethod=methods
                    Amethod.setAccessible(true)
                    Amethod.invoke(interClasseInstance)
                }
            if(msg=="finish"){//掛斷
                if(Objects.ActivityParam!=null){
                    val outClassCon=Classes.ClassInternal.getDeclaredConstructors()[0]
                    val mContext=Objects.ActivityParam as Context
                    val mmContext=mContext.applicationContext
                    val outClassIntence=outClassCon.newInstance(mmContext,false)
                    val methods= Classes.ClassInternal.getDeclaredMethod("reset")
                    val Amethod=methods
                    Amethod.setAccessible(true)
                    Amethod.invoke(outClassIntence)
                }

待實現的功能

  1. 使用微信備註和聯繫人暱稱替換隨機文件名;
  2. 支持錄音時長設置
  3. 音頻文件生成延遲結束的問題
  4. 播放頁優化

爲什麼會有bug呢……第一次做android,第一次用kotlin,兩件快樂事情重合在一起。而這兩份快樂,又給我帶來更多的快樂。得到的,本該是一次通過、完美運行……但是,爲什麼,會變成這樣呢……
啪

已測試設備

備註:手機系統必須支持多個應用同時使用音頻接口(如微信和微信小程序可以同時錄音)

測試設備 結果
小米miui11、安卓10 支持
華爲Emui9、安卓9 不支持
google pix、安卓10 支持
oppo、安卓10 不支持

源代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章