安卓音频开发(四)使用lame把wav转mp3
生活随笔
收集整理的這篇文章主要介紹了
安卓音频开发(四)使用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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2015小米暑期实习笔试题_风口的猪-中
- 下一篇: 知识就是力量