標籤:img round channel 檔案頭 base 格式 fse 關閉 write
方案一:使用 AVAudioRecorder 錄製pcm資料格式檔案,然後啟動子線程迴圈遍曆檔案,讀取pcm資料轉碼mp3並寫入mp3檔案(目前網上資料大多是這樣)
1.lame初始化 & 開啟pcm、mp3檔案 擷取檔案指標
單通道無需設定lame_set_model,因為api已經說明 default: lame picks based on compression ration and input channels(根據brate和channels預設設定)
擴充能力:寫入檔案頭資訊 例如 id3tag_set_artist ===》作者, 頭資訊設定必須在 lame_init_param()之前
擴充能力:寫入封面圖(image)id3tag_set_albumart
開啟檔案擷取檔案指標(指向位元組位置)
2.遍曆pcm檔案,擷取位元組資料,轉碼,寫入mp3檔案
const int PCM_SIZE = 8192; // 相當於8192箱啤酒,一箱16瓶(啤酒=位元組,8192個16位元組的資料長度)
short int pcm_buffer[PCM_SIZE * self.realChannels]; // 填充 多少個pcm格式資料元素的數組
do{}while() 迴圈讀取pcm檔案,判斷位元組數是否大於設定的標準
跳過開頭 fseek(pcm, 4 * 1024, SEEK_CUR); 過濾噪音
條件成熟,開始讀取pcm檔案資料並存入pcm_buffer中(檔案指標會位移到讀取位元組的末尾位置)
將pcm_buffer中的資料轉碼成mp3格式資料並放入mp3_buffer中, 區分單&雙通道
需要注意write 有可能異常,正如api中所說
把mp3_buffer中的資料寫入mp3檔案中
while條件不符合的時候,跳出,仍要考慮不夠標準的剩餘的位元組資料,也要轉碼並寫入mp3檔案
最後關閉檔案
IOS lame庫 pcm轉mp3 分析(方案一)