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

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

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

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

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

- (void)initialRecord{//录音权限设置,IOS7必须设置,得到AVAudioSession单例对象AVAudioSession *audioSession = [AVAudioSession sharedInstance];//设置类别,此处只支持支持录音[audioSession setCategory:AVAudioSessionCategoryRecord error:nil];//启动音频会话管理,此时会阻断后台音乐的播放[audioSession setActive:YES error:nil];//录音参数设置设置NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc]init];//设置录音格式  AVFormatIDKey==kAudioFormatLinearPCM//    [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];//caf的录制格式[recordSetting setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];//设置录音采样率(Hz) 如:AVSampleRateKey==8000/44100/96000(影响音频的质量)//acc的采样频率//    [recordSetting setValue:[NSNumber numberWithFloat:44100] forKey:AVSampleRateKey];[recordSetting setValue:[NSNumber numberWithFloat:11025.0] forKey:AVSampleRateKey];//录音通道数  1 或 2 在录制caf文件时,需要使用双通道,否则在转换为MP3格式时,声音不对[recordSetting setValue:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey];//线性采样位数  8、16、24、32[recordSetting setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];//录音的质量//    [recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityHigh] forKey:AVEncoderAudioQualityKey];[recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];//录音文件保存的URLCFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault);NSString *cfuuidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid));NSString * filename = [NSString stringWithFormat:@"%@.caf",cfuuidString];NSString *audioRecordFilePath = AUDIORECORDFILEPATH(filename);lastaudioRecordFilePath = audioRecordFilePath;//判断目录是否存在不存在则创建NSString *audioRecordDirectories = [audioRecordFilePath stringByDeletingLastPathComponent];NSFileManager *fileManager=[NSFileManager defaultManager];if (![fileManager fileExistsAtPath:audioRecordDirectories]) {[fileManager createDirectoryAtPath:audioRecordDirectories withIntermediateDirectories:YES attributes:nil error:nil];}NSURL *url = [NSURL fileURLWithPath:audioRecordFilePath];NSError *error=nil;//初始化AVAudioRecorder_recorder = [[AVAudioRecorder alloc]initWithURL:url settings:recordSetting error:&error];if (error != nil) {//NSLog(@"初始化录音Error: %@",error);}else{if ([_recorder prepareToRecord]) {//录音最长时间[_recorder recordForDuration:self.recorderDuration-1];_recorder.delegate=self;[_recorder record];//开启音量检测_recorder.meteringEnabled = YES;//开启定时器,音量监测_timer=[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(volumeMeters:) userInfo:nil repeats:YES];}}}

  

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

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

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

需要加入 lame.h

#include "lame.h"

//转编码为 mp3
- (void)audio_PCMtoMP3:(NSString *)cafFilePath andMP3FilePath:(NSString *)mp3FilePath
{NSFileManager* fileManager=[NSFileManager defaultManager];if([fileManager removeItemAtPath:mp3FilePath error:nil]) {NSLog(@"删除");}@try {int read, write;FILE *pcm = fopen([cafFilePath cStringUsingEncoding:1], "rb");  //source 被转换的音频文件位置if(pcm == NULL) {NSLog(@"file not found");} else {fseek(pcm, 4*1024, SEEK_CUR);                                   //skip file headerFILE *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);elsewrite = 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生成成功");}
}

  lamp下载区   密码: 3gy2

转载于:https://www.cnblogs.com/nonato/p/4381523.html

ios CAF音频转换为MP3相关推荐

  1. 在线qmc0转换mp3工具_如何将M4A格式的音频转换为MP3格式?只需一步搞定

    随着网络技术的发达,会有很多人喜欢在网上下载东西,特别是很喜欢在网上下载音乐,但是下载音乐之后发现是M4A格式?这样用起来很不方便,都喜欢MP3格式的,那么如何将M4A格式的音频转换为MP3格式?今天 ...

  2. 如何将M4A格式的音频转换为MP3格式?只需一步搞定

    随着网络技术的发达,会有很多人喜欢在网上下载东西,特别是很喜欢在网上下载音乐,但是下载音乐之后发现是M4A格式?这样用起来很不方便,都喜欢MP3格式的,那么如何将M4A格式的音频转换为MP3格式?今天 ...

  3. wma转mp3怎么弄_如何使用音频格式转换器将wma音频转换为MP3格式

    WMA格式:正在逐步流行的一种音频压缩格式(可以是有损,也可以是无损,取决于你选择的编码器),与同等比特率的mp3文件相比更小,质量也更好. MP3格式:目前最流行的有损音频压缩格式,几乎被所有的播放 ...

  4. 下载的音乐如何转成MP3?分享两种将音频转换为MP3格式的方法

    如果您下载了一些音频文件,但是它们不是MP3格式,那么您可能需要将它们转换为MP3格式,以便在各种设备上播放.以下是两种将音频转换为MP3格式的方法. 方法一:使用免费的在线转换工具 有许多免费的在线 ...

  5. 如何把WAV格式音频转换为MP3格式

    WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被W ...

  6. 如何将 FLAC 转换为 MP3

    如果您需要将 FLAC 转换为 MP3,FLAC 到 MP3 转换软件 – 金狮视频助手能帮你.只需安装该应用软件并按照本教程进行操作,您就可以毫不费力地转换您的 FLAC 文件. 第 1 部分:您需 ...

  7. xm文件转换为mp3_怎么才能将M4A转换为MP3?秘籍公开

    昨天晚上,小编与朋友聊天.小编夸下海口说大部分的音频文件我都知道,你给我随意一个音频文件我都能转换为MP3.然后,朋友默默给我发了一个M4A格式的音频文件. 虽然小编不知道她从哪里找到的M4A格式音频 ...

  8. 使用node-ffmpeg将m4a转换为mp3

    首先需要先安装我们需要的npm包ffmpeg. npm install ffmpeg 在ffmpeg的方法中,提供了一个方法 fnExtractSoundToMP3 ,使用这个方法可以视频或是音频转换 ...

  9. 电脑音频转换mp3格式怎么弄,教你音频怎么转换mp3格式

    mp3格式是目前几乎全兼容的格式了,在我们参加一些会议或讲座时,需要录制一些重要的信息,结束后再进行复盘或分享.然而,不同的录制工具录制的音频格式也不同,这时使用软件将音频统一成mp3格式的话,就会方 ...

最新文章

  1. VC 文件操作(文件查找,打开/保存,读/写,复制/删除/重命名)
  2. 程序员藏经阁 Linux兵书
  3. 荣耀手环5没有篮球鸿蒙,荣耀手环5和篮球版区别
  4. boost::mp11::construct_from_tuple相关用法的测试程序
  5. QQ 互联审核不通过问题的解决方法
  6. eclipse中项目内存溢出问题
  7. 在URL中使用另一个url作为参数时会被``截断的问题
  8. python面向对象特殊属性_Python面向对象-特殊成员
  9. 中国贸易外经统计年鉴(2021年)
  10. ffmpeg将amr文件转成mp3文件
  11. 我整理了50道经典Java算法题,直接进了字节跳动!!
  12. nbuoj.1333.明信片与照片
  13. 笔记本电脑常识:噪音
  14. 计算机磁盘清理软件,清理磁盘空间的7种技巧,电脑装机、安装系统必备
  15. 【IUI 2020】人在回路机器学习——Human-in-the-Loop AI in Government: A Case Study
  16. call(zoom)_如何解决您的Zoom Call问题
  17. 【数据库课程】研讨02
  18. supper 关键字
  19. 【Android】 禁止首屏时钟AppWidget拖动到其他屏
  20. ABAP调用启信宝HTTP restful API实例

热门文章

  1. gta5 android ps4,gta5导演模式怎么玩好玩_gta5怎么进入导演模式怎么玩ps4导演模式怎么打开_攻略...
  2. 【HTTP Live Streaming】(一)苹果公司 - 流媒体传输技术 - 概览
  3. RAID 独立冗余磁盘阵列详解(RAID 0、RAID 1、RAID 5、RAID 10)
  4. 强网杯2018_core
  5. PyQt5快速开发与实战 5.2 容器:装载更多的控件
  6. 如何综合掌握 DB2 和 Informix
  7. 倘若有天你不想再敲代码了,你想做什么?
  8. android WindowManager 应用内部悬浮窗口总结
  9. Curling 2.0 - POJ 3009
  10. Java程序员应该具备的辅助开发神器