iOS 音訊轉碼 使用lame轉為MP3格式
由於AVAudioRecorder不能錄製編碼為MP3,所以就需要我們將錄音後的音訊檔案格式進行轉換(注意:AV Foundation和Core Audio提供對MP3資料解碼的支援,但是不提供對其進行編碼。所以我們要藉助第三方庫進行MP3編碼)。如何轉換?lame無疑是一個很好的選擇,lame是一個開源音訊壓縮軟體,目前是公認有損質量MP3中壓縮效果最好的編碼器。接下來直奔主題,介紹一下如何使用lame將音訊轉為MP3格式。
一、使用lame的準備工作
首先去官網下載lame庫(下載地址),下載後需要將lame庫進行編譯(編譯指令碼下載地址)。編譯步驟如下:
1、
在桌面上新建一個資料夾,然後將下載後的lame庫檔案解壓命名為lame和編譯指令碼檔案一同放到當前檔案中,像這樣:
1370044-3a69132b1eaa6abd.png
2、
開啟終端,cd到lame-3.99.5目錄中,執行指令碼,開始編譯。編譯時間稍微有點長,編譯成功後文件內容如下所示:
aaa.png
新增加的這幾個資料夾分別包含了不同的cpu架構,這裡就不詳細介紹。如果要支援所有的cpu架構(包括真機和模擬器),只需要將fat-lame檔案中的內容拖到專案中即可(lame.h和libmp3lame.a)。至此,準備工作完畢。
二、lame的使用
//錄音檔案轉碼 - (void)audio_PCMtoMP3 { NSString *recorderSavePath = [self.savedRecordPath absoluteString]; NSString *audioTemporarySavePath = [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES) lastObject]; NSString *mp3FileName = [self.savedRecordPath lastPathComponent]; mp3FileName = [mp3FileName stringByAppendingString:@".mp3"]; NSString *mp3FilePath = [audioTemporarySavePath stringByAppendingPathComponent:mp3FileName]; @try { int read, write; FILE *pcm = fopen([recorderSavePath cStringUsingEncoding:1], "rb"); //source 被轉換的音訊檔案位置 fseek(pcm, 4*1024, SEEK_CUR); //skip file header 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, 11025.0); lame_set_VBR(lame, vbr_default); lame_init_params(lame); do { read = (int)fread(pcm_buffer, 2*sizeof(short int), PCM_SIZE, pcm); if (read == 0) write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE); else write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE); fwrite(mp3_buffer, write, 1, mp3); } while (read != 0); lame_close(lame); fclose(mp3); fclose(pcm); } @catch (NSException *exception) { NSLog(@"%@",[exception description]); } @finally { NSLog(@"MP3生成成功: %@",mp3FilePath); self.savedRecordPath = mp3FilePath.tzl_URL; } }
相關推薦
iOS 音訊轉碼 使用lame轉為MP3格式
由於AVAudioRecorder不能錄製編碼為MP3,所以就需要我們將錄音後的音訊檔案格式進行轉換(注意:AV Foundation和Core Audio提供對MP3資料解碼的支援,但是不提供對其進行編碼。所以我們要藉助第三方庫進行MP3編碼)。如何轉換?lame無疑是一個很好的選擇,
CentOS7.4 yum和原始碼安裝ffmpeg 將amr格式音訊轉碼為mp3
原始碼安裝: 安裝依賴: # yum install nasm yasm 安裝依賴: # wget https://nchc.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz # tar -
android平臺下音訊編碼之編譯LAME庫轉碼PCM為MP3
ffmpeg實踐學習 目錄 音訊概述 一般來說音訊的裸資料格式就是脈衝編碼調製(PCM)資料。描述一段PCM資料一般需要以下幾個概念:量化格式(sampleFormat)、取樣率(sampleRate)、聲道數(channel)。以CD的音質為例:量化格式為
【原創】音訊轉碼-Mp3轉AMR--轉載請註明出處
一、常見音訊轉碼方案 1.採用阿里雲OSS進行轉碼 採用阿里雲OSS僅支援amr -> mp3格式的轉碼,但是不支援mp3 -> amr 格式的轉碼,呼叫後會丟擲 amr 格式不支援的異常。OSS轉碼為非同步轉碼,呼叫時是通知OSS的轉碼服務,將
iOS拼接URL,類似安卓body體進行轉碼(轉為gbk)提交。
大家都知道,AFN去提交POST的時候是不用給他拼接URL的,但是♪(^∇^*),如果說你要對這個後面的body體進行轉碼的話,如果不拼接就無法實現了,還有一個就是如果安卓那邊url的確是拼接出來的,那麼我iOS不拼接的話,只有一個結果。。。那就是請求不到資料咯! 我用一個
如何將FLAC格式轉為MP3格式
align 比較 分享圖片 自己 宋體 局限 多個 註冊登錄 span FLAC是一種無損壓縮格式,也就是說音頻以FLAC編碼壓縮後不會丟失任何信息,並且將FLAC文件還原後與壓縮前的文件內容相同。由於FLAC的無損壓縮性質導致它所占儲存空間也很大,特別對於喜歡聽音樂的
C# 使用 ffmpeg 進行音訊轉碼
先放一下 ffmpeg 的官方文件以及下載地址: 官方文件:http://ffmpeg.org/ffmpeg.html 下載地址:http://ffmpeg.org/download.html 用 ffmpeg 進行轉碼很簡單,全部都用預設引數的話用下面這句就行: ff
使用gulp將檔案轉碼至utf-8格式
在前兩篇文章中,我除了看《MySQL必知必會》之外,還參考了《SQL基礎教程(第2版)》。但是把參考這本書裡的SQL語句導進新建的資料庫時遇到了點麻煩:我在執行SQL檔案後發現表中中文字元全部亂碼。在檢查檔案格式之後發現,隨書給出的SQL檔案的編碼是GB2312……那就先得把這麼些檔案轉成utf-8格式才能適
使用gulp將文件轉碼至utf-8格式
合同 sam tab fault 類型 教程 pack htm 目錄 在前兩篇文章中,我除了看《MySQL必知必會》之外,還參考了《SQL基礎教程(第2版)》。但是把參考這本書裏的SQL語句導進新建的數據庫時遇到了點麻煩:我在運行SQL文件後發現表中中文字符全部亂碼。在檢查
瀏覽器音訊相容和ffmpeg的音訊轉碼使用
1、百度搜索瀏覽器對於音訊檔案的相容,排在前面的文章大部分是複製貼上很久以前的文章,容易誤導搜尋資料的人, 因此重新驗證整理下。 以Firefox瀏覽器為例,Firefox對於mp3格式音訊的支援在釋出版本21時就已經支援了(2013年)。 下載Firefox各個版本,然後在audio標籤上引入mp3
java視訊格式轉碼,設定編碼格式
專案上傳後的視訊不能在video標籤裡面播放,視訊格式是MP4。重新編碼之後就可以了 package com.video.util; import org.bytedeco.javacv.FFmpegFrameGrabber; import org.bytedeco.javacv.FFmpe
騰訊視訊轉碼,把qlv格式轉換成mp4格式
最近需要在公眾號上傳視訊,但是大於20M的視訊需要到騰訊視訊上傳,在騰訊視訊上下載的視訊是qlv格式,要在騰訊視訊上傳必須是其他主流視訊格式,如mp4這樣的,真是坑。所以就需要我把視訊轉換格式,但是在格式工廠等都不能轉,而有個迅捷視訊轉換非VIP使用者只有一次轉換同
海思arm平臺AAC音訊轉碼cpu佔用高、效率低的問題解決
問題背景 目前市面上的大部分IPC攝像機音訊輸出基本都是G711、G726編碼格式,而在類似於《基於EasyNVR實現RTSP/Onvif監控攝像頭Web無外掛化直播監控》這種業務中,都是在類似於EasyNVR這樣的適配服務中進行音訊的轉碼,也有在類似於《Ea
ffmpeg音訊轉碼,採用swr_convert重取樣
/* *最簡單的音訊轉碼器(只處理音訊) *繆國凱 Mickel *[email protected] *本程式實現從一個視訊格式轉碼到另一個視訊格式,只處理音訊,視訊忽略,若有多個音訊流,只處理第一個,採用swr_convert重取樣 *2015-5-8 */ #include "stdaf
FFmpeg音訊轉碼總結
最近自己在做音訊轉碼的事情。剛開始是想通過ffmpeg的示例程式來學習,可是比較複雜,短時間內看的頭昏腦脹。索性在網上搜索關於轉碼的例子。還是在雷神的部落格裡找到了類似的示例程式,地址是:http://blog.csdn.net/leixiaohua1020/article
ios 漢字轉碼 (漢字與utf8、Unicode轉與漢字
Unicode轉化為漢字: + (NSString *)replaceUnicode:(NSString *)unicodeStr { NSString *tempStr1 = [unicodeStrstringByReplacingOccurrencesOfString:@"\\u
使用ffmpeg轉碼pcm至aac格式
準備工作 去官網下載原始碼自己編譯所需要的庫,或者直接從官網下載已經編寫好的庫,由於本例是Window平臺下的開發,而官網已經有了編譯好的庫,所以直接下載編譯所需要的庫檔案即可。下載地址:需要下載兩個壓縮包,Dev版本和Shared版本,其中Dev版本是標頭檔案和lib庫檔
IOS 實現使用lame庫 錄音轉MP3格式 邊錄邊轉功能
在iOS中使用AVAudioRecorder無法錄製MP3格式的音訊檔案,雖然你可能會看到過這樣一個列舉: CF_ENUM(AudioFormatID) { kAudioFormatLinearPCM = 'lpcm',
113.將音訊轉化為MP3格式(lame庫)
為什麼要轉化音訊格式 最近又在做即時通訊了, 關於語音錄製的檔案總是那麼幾個型別的, 但想要與 Android 實現音訊互通. 那麼就要轉化Mp3格式的音訊檔案或者Amr 格式檔案. 當然Amr是最好,因為同等時長下, amr檔案資料大小是最小的, 非常適合移
錄音(PCM格式)、播放、lame轉碼成MP3
/** * 音訊轉碼,由PCM轉碼為MP3 */ - (void)convertToMP3 { NSString * mp3FileName = @"sendRecord.mp3"; NSString * documentPath = [NSSearchPathForDirecto