iOS 通过(lame)将录制音频转换成Mp3

转载请注明出处,保留原帖地址及作者署名.

Url:http://blog.csdn.net/ysy441088327/article/details/7392842#reply

Author:余书懿

为了达到 iPhone 与 Android 实现音频互通. 那么Mp3格式的音频文件再好不过了.

至于能够转换成Amr 是最好,10秒 的 一个Amr文件 只有5K左右的大小. 非常适合移动设备的数据传输

这里主要用到lame,一款非常棒的Mp3音频编码器.   

那么在转换之前呢? 就需要先录制好音频文件,使用 AVAudioRecorder 进行音频录制之前,进行如下参数设置:

NSString *recordTemporaryPathString = [NSString stringWithFormat:@"%@/temporary",self.audioTemporarySavePath];
//LinearPCM 是iOS的一种无损编码格式,但是体积较为庞大
//录音设置
NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] init];
//录音格式 无法使用
[recordSettings setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey: AVFormatIDKey];
//采样率
[recordSettings setValue :[NSNumber numberWithFloat:11025.0] forKey: AVSampleRateKey];//44100.0
//通道数
[recordSettings setValue :[NSNumber numberWithInt:2] forKey: AVNumberOfChannelsKey];
//线性采样位数
//[recordSettings setValue :[NSNumber numberWithInt:16] forKey: AVLinearPCMBitDepthKey];
//音频质量,采样质量
[recordSettings setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];

通过上面的参数所录制的音频文件体积非常大,不过不要担心,这只是第一步,只要成功转换成Mp3以后,可以保证文件体积每秒在4K左右.^^

另外一点,除非你时间多,那么没必要去尝试设置其他种类的参数再用来转换,因为作者我就试了不少,反正只有上面的参数才能保证,音质的完整和流畅.

下面介绍 lame 静态库 使用流程 主要有两个核心文件,使用很简单:

1:lame库加入工程中.  注:静态库中,可直接加入其他的静态库. 

2:引入头文件 lame.h

#include "lame.h"

3:核心转换代码

- (void)audio_PCMtoMP3
{

    NSString *mp3FileName = [self.audioFileSavePath lastPathComponent];
    mp3FileName = [mp3FileName stringByAppendingString:@".mp3"];
    NSString *mp3FilePath = [self.audioTemporarySavePath stringByAppendingPathComponent:mp3FileName];

    @try {
        int read, write;

        FILE *pcm = fopen([self.audioFileSavePath 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 = 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 {
        self.audioFileSavePath = mp3FilePath;
        NSLog(@"MP3生成成功: %@",self.audioFileSavePath);
    }

}

注:如果没有意外,转换成功后将直接进到  @finally 代码块中.

真机模拟器中均可完美实现转换,值得注意的是:模拟器在录制音频的时候,偶尔会产生杂音,那么转换后的mp3 也会附带杂音,不知道为什么,目前在真机还没有遇到过.

转换消耗的时长是根据你录制音频文件的大小来决定的,因此建议启用一个新的线程来处理这个任务,代码如下:

[NSThread detachNewThreadSelector:@selector(audio_PCMtoMP3) toTarget:self withObject:nil];

文件后缀也可以决定所生成的录制音频的格式  例如:.wav  .caf

至少大致结束,上传一下lame静态库,有需要的朋友下载吧. 猛击此处 密码:Is9I9W

这篇博文,是我重新修改的,删去了一些错误的笔记,以及对代码进行了重新测试和尝试.基本上是没问题.

时间: 2024-08-24 04:05:37

iOS 通过(lame)将录制音频转换成Mp3的相关文章

amr转 mp3-c# 怎么把 .amr格式的音频文件转换成.mp3格式的

问题描述 c# 怎么把 .amr格式的音频文件转换成.mp3格式的 amr格式的音频无法再网页上播放,所以通过后台转换后在播放. 解决方案 有研究过ffmpeg么? ffmpeg有提供源码.

Windows 10系统如何将m4a音乐格式转换成mp3格式?

Win10系统如何将m4a音乐格式转换成mp3格式?在Win10系统中,系统自带有语音录音机,它录制的语音是m4a格式的,如果有朋友需要mp3格式的,该怎么办呢?很简单,我们只要将m4a音乐格式转换成mp3格式就行了.问题是,Win10系统要如何将m4a音乐格式转换成mp3格式呢?下面我们一起来看看. 具体步骤: 1.这里小编电脑上有一段自己录制的m4a格式的音频文件,现在转换下格式. 2.打开电脑上的百度音乐播放器,然后点击右上角的小工具按钮,打开格式转换. 3.歌曲格式转换界面,我们首先添加

asp.net.想要实现一个文字字符串转换成MP3和wav格式的语音

问题描述 asp.net.想要实现一个文字字符串转换成MP3和wav格式的语音 2C 文字字符串转换成MP3和wav格式的语音文件并且存入数据库,请问如何实现.需要转换成音频文件后可以读出文字内容 解决方案 你需要一个与字符对应的音频库,就像电子琴.比如1对应声音多,2对应声音来,3对应声音咪--,还有长音,短音,4分,8分等等,当你输入一个字符串时,找到跟他对应的声音,就能实现准确的转换了.

如何把cd转换成mp3

  如何把cd转换成mp3 1.把CD放入光驱之后,点击酷狗播放器右边"我的应用"下的"格式转换";如(图1) 2.点击"添加文件",添加CD路径中的.cda文件或者直接使用"CD抓轨"功能;如(图2) 3.在"转换格式"中选择对应的音频格式,然后在"转换设置"中调整"目标文件夹"位置即可;如(图3) 4.点击右下角的"开始转换",就会自动把CD转

狸窝视频转换器flv怎么转换成mp3

  打开转换器,先添加视频文件,单击左上角的"添加视频"按键,然后在打开的文件夹中打开需要转换的flv视频导入即可.文件可以是多个,可批量转换的.这是最近我比较喜欢看的韩剧MV,转换成mp3就能放手机上听了,上次我也试过转成amr做手机铃声呢. 选择输出格式,即预置方案.单击预置方案右边的不倒三角,打开上拉菜单,如图所示,支持的播放设备和输出格式还是很多的哦.不废话了.这里选择常用音频一项中的MP3-MPEG Layer-3 Audio(*.mp3) ,格式下方也有中文说明的. 单击主

android的用科大讯飞时候,wav转换成mp3问题

问题描述 android的用科大讯飞时候,wav转换成mp3问题 android中用到的谁有wav转MP3的demo,我用lame转换的时候声音嘈杂,可能码率或者什么设置不当,不知道有解决办法不??给几个参数也行,源码最好,谢了

狸窝视频转换器flv转换成mp3的方法

打开转换器,先添加视频文件,单击左上角的"添加视频"按键,然后在打开的文件夹中打开需要转换的flv视频导入即可.文件可以是多个,可批量转换的.这是最近我比较喜欢看的韩剧MV,转换成mp3就能放手机上听了,上次我也试过转成amr做手机铃声呢. 选择输出格式,即预置方案.单击预置方案右边的不倒三角,打开上拉菜单,如图所示,支持的播放设备和输出格式还是很多的哦.不废话了.这里选择常用音频一项中的MP3-MPEG Layer-3 Audio(*.mp3) ,格式下方也有中文说明的. 单击主界面

酷狗把CD转换成MP3格式教程

给各位酷狗软件的使用者们来详细的解析分享一下酷狗把CD转换成MP3格式的教程. 解析分享: 1.把CD放入光驱之后,点击酷狗播放器右边[我的应用]下的[格式转换];如(图1)   2.点击[添加文件],添加CD路径中的.cda文件或者直接使用[CD抓轨]功能;   3.在[转换格式]中选择对应的音频格式,然后在[转换设置]中调整[目标文件夹]位置即可;   4.点击右下角的[开始转换],就会自动把CD转换成MP3文件了.   好了,以上的信息就是小编给各位酷狗的这一款软件的使用者们带来的详细的酷

IOS 把格式化的JSON字符串转换成字典

/*! * @brief 把格式化的JSON格式的字符串转换成字典 * @param jsonString JSON格式的字符串 * @return 返回字典 */ + (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString { if (jsonString == nil) { return nil; } NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8Strin