日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

安卓音频开发(四)使用lame把wav转mp3

發布時間:2023/12/16 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓音频开发(四)使用lame把wav转mp3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在上文中,展示了安卓項目如何構建lame,接下來,我們要使用lame把wav音頻轉為mp3。
上文回顧:lame編譯
項目結構如下圖:

LameUtils主要是用來編寫與native-lib交互的方法的,也就是native方法的聲明,對于轉換這個流程,我們需要聲明兩個方法,一個轉換方法,一個轉換進度回調方法。如下圖:

/*** wav轉換成mp3的本地方法** @param wav* @param mp3*/private native void convertToMp3(String wav, String mp3);/*** 設置進度條的進度,提供給C語言調用** @param progress*/public void setConvertProgress(long progress, long total, String path) {Log.d(this.getClass().getSimpleName(), "回調的進度:" + progress + "----總進度:" + total + "----path:" + path);}

然后在native-lib.cpp文件中,也同樣聲明兩個實現方法:

native-lib的轉換核心代碼如下:

do {read = fread(wav_buffer, sizeof(short int) * 2, 8192, fwav);total += read * sizeof(short int) * 2;fseek(fwavCount, 0, SEEK_END);long length = ftell(fwavCount);rewind(fwavCount);LOGI("converting ....%d", total);publishJavaProgress(env, obj, total, length, jmp3);// 調用java代碼 完成進度條的更新if (read != 0) {write = lame_encode_buffer_interleaved(lame, wav_buffer, read, mp3_buffer, 8192);//把轉化后的mp3數據寫到文件里fwrite(mp3_buffer, sizeof(unsigned char), write, fmp3);}if (read == 0) {lame_encode_flush(lame, mp3_buffer, 8192);}} while (read != 0);

通過fread方法,讀取數據流,然后通過調用lame_encode_buffer)interleaved方法,實現流的轉換并且賦值給write對象,最后調用fwriter方法寫入到文件中,并用lame_encode_flush方法,刷新緩沖區實現文件更新。至此,文件全部寫入完成,別忘了最后關閉文件指針哦。

源碼地址:
https://gitee.com/motosheep/liblamb

that’s all---------------------------------------------------------------------------------------------

總結

以上是生活随笔為你收集整理的安卓音频开发(四)使用lame把wav转mp3的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。