iOS 開發(fā)lame進(jìn)行音頻格式轉(zhuǎn)換——wav格式轉(zhuǎn)MP3

需求

項目里有錄音機(jī)相關(guān)的代碼粒没,最近產(chǎn)品發(fā)現(xiàn)我們的錄音文件生成默認(rèn)是wav格式的揩抡,想加一個wav轉(zhuǎn)mp3的功能曲管,百度了一下扣猫,可以用lame的第三方框架實現(xiàn)。

一開始選擇的pod導(dǎo)入lame庫翘地,后來發(fā)現(xiàn)不支持pod庫不支持armv7架構(gòu)申尤,那么只能自己編譯,編譯過程在iOS 編譯 lame 庫衙耕,步驟及遇到的問題 總結(jié)講的很詳細(xì)昧穿,多謝前輩大神總結(jié)分享,這里不在贅述橙喘。編譯之后會有幾個架構(gòu)分著的.a文件和.h文件时鸵,也有綜合起來的.a文件和.h文件,看自己的需要放到工程里即可厅瞎。

lame編譯之后的文件

使用

把libmp3lame.a文件和lame.h放到工程里

#import <lame/lame.h> //把lame庫導(dǎo)入到文件內(nèi)
- (BOOL) convertMp3from:(NSString *)wavpath topath:(NSString *)mp3path
{
    NSString *filePath =wavpath ; //wav格式的文件路徑
    
    NSString *mp3FilePath = mp3path; // 生成mp3的路徑
    
    BOOL isSuccess = NO;
    if (filePath == nil  || mp3FilePath == nil){
        return isSuccess;
    }
    
    NSFileManager* fileManager=[NSFileManager defaultManager];
    if([fileManager removeItemAtPath:mp3path error:nil])
    {
        NSLog(@"刪除");
    }
    
    @try {
        int read, write;
        
        FILE *pcm = fopen([filePath cStringUsingEncoding:1], "rb");  //source 被轉(zhuǎn)換的音頻文件位置
        if (pcm) {
            fseek(pcm, 4*1024, SEEK_CUR);
            FILE *mp3 = fopen([mp3FilePath cStringUsingEncoding:1], "wb");  //output 輸出生成的Mp3文件位置
            
            const int PCM_SIZE = 8192;
            const int MP3_SIZE = 8192;
            short int pcm_buffer[PCM_SIZE*2];
            unsigned char mp3_buffer[MP3_SIZE];
            
            lame_t lame = lame_init();
            lame_set_in_samplerate(lame, 16000.0);
            lame_set_num_channels(lame, 1);//通道 默認(rèn)是2
            lame_set_quality(lame, 1);//質(zhì)量
            lame_set_VBR(lame, vbr_default);
            lame_set_brate(lame, 16);
            lame_set_mode(lame, 3);
            lame_init_params(lame);
//            lame_set_VBR_mean_bitrate_kbps(lame, 256);
            do {
                read = (int)fread(pcm_buffer, sizeof(short int), PCM_SIZE, pcm);
                if (read == 0)
                    write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE);
                else {
                    write = lame_encode_buffer(lame, pcm_buffer, NULL, read, mp3_buffer, MP3_SIZE);//聲道=1饰潜,這里和上邊 lame_set_num_channels(lame, 1)對應(yīng),如果是雙聲道和簸,用下邊注掉的那行代碼

//                    write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE); 聲道=2

                }
                
                fwrite(mp3_buffer, write, 1, mp3);
                
            } while (read != 0);
            
            lame_close(lame);
            fclose(mp3);
            fclose(pcm);
            isSuccess = YES;
        }
        //skip file header
    }
    @catch (NSException *exception) {
        NSLog(@"error");
    }
    @finally {
        if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
            [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
        }
        return isSuccess;
    }
    
}

需要一定注意的事彭雾,音頻的聲道,lame_set_num_channels(lame, 1) 要與下邊的write = lame_encode_buffer...相對應(yīng)锁保。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末薯酝,一起剝皮案震驚了整個濱河市半沽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吴菠,老刑警劉巖者填,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異做葵,居然都是意外死亡占哟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門酿矢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來重挑,“玉大人,你說我怎么就攤上這事棠涮。” “怎么了刺覆?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵严肪,是天一觀的道長。 經(jīng)常有香客問我谦屑,道長驳糯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任氢橙,我火速辦了婚禮酝枢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘悍手。我一直安慰自己帘睦,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布坦康。 她就那樣靜靜地躺著竣付,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滞欠。 梳的紋絲不亂的頭發(fā)上古胆,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機(jī)與錄音筛璧,去河邊找鬼逸绎。 笑死,一個胖子當(dāng)著我的面吹牛夭谤,可吹牛的內(nèi)容都是我干的棺牧。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼朗儒,長吁一口氣:“原來是場噩夢啊……” “哼陨帆!你這毒婦竟也來了曲秉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤疲牵,失蹤者是張志新(化名)和其女友劉穎承二,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纲爸,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡亥鸠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了识啦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片负蚊。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颓哮,靈堂內(nèi)的尸體忽然破棺而出家妆,到底是詐尸還是另有隱情,我是刑警寧澤冕茅,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布伤极,位于F島的核電站,受9級特大地震影響姨伤,放射性物質(zhì)發(fā)生泄漏哨坪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一乍楚、第九天 我趴在偏房一處隱蔽的房頂上張望当编。 院中可真熱鬧,春花似錦徒溪、人聲如沸忿偷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牵舱。三九已至,卻和暖如春缺虐,著一層夾襖步出監(jiān)牢的瞬間芜壁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工高氮, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留慧妄,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓剪芍,卻偏偏與公主長得像塞淹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子罪裹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容