iOS音频
2015-05-30 13:42
465 查看
iPhone通过(lame for iPhone armV7)将音频Caf格式转换成Mp3
这几天的大部分时间也在研究这个,为了达到与Android实现音频互通。主要目的也还是减小Caf的音频体积,转换为Mp3以后体积缩小接近10倍。
至于能够转换成Amr 是最好,唉,技术有限,先用Mp3顶着了。
这里主要用到lame,一款非常棒的Mp3音频编码器。
当然,还要感谢提供XCode下编译通过的lame源。
以下开始介绍下详细使用方法。
提供lame源下载地址,也算是感谢下这位哥了:
http://d.download.csdn.net/download/mqiezi/3796937
附件会上传我的Demo,噢,真机才能调试.这确实没办法。
lame的核心文件就两个,使用很简单。
1、lame库加入组件库中.
2、引入头文件 lame.h
#include"lame.h"
接下来和核心的转换代码:
int read, write;
FILE *pcm =fopen([autioPathcStringUsingEncoding:1],"rb");//被转换的文件
FILE *mp3 =fopen([mp3AudioPathcStringUsingEncoding:1],"wb");//转换后文件的存放位置
constint PCM_SIZE =8192;
constint MP3_SIZE =8192;
shortint pcm_buffer[PCM_SIZE*2];
unsignedchar mp3_buffer[MP3_SIZE];
lame_t lame =lame_init();
lame_set_in_samplerate(lame, 44100);
lame_set_VBR(lame, vbr_default);
lame_init_params(lame);
do {
read = fread(pcm_buffer, 2*sizeof(shortint), 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);
write(mp3_buffer, write, 1, mp3);
} while (read != 0);
lame_close(lame);
fclose(mp3);
fclose(pcm);
另外要注意的是:录制的Caf音频文件的参数必须如下,不然转换后的音频文件播放起来跟汤姆猫一样。哈哈,那你就悲剧了。
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
NSNumbernumberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey,
[NSNumbernumberWithInt:16], AVEncoderBitRateKey,
[NSNumbernumberWithInt:2], AVNumberOfChannelsKey,
[NSNumbernumberWithFloat:44100.0], AVSampleRateKey,nil];
audioRecorder = [[AVAudioRecorderalloc] initWithURL:pathURLsettings:recordSettingserror:&error];
这个真机才能调试噢!. command+B 。依旧编译通过!
以下是本次的Demo,欢迎下载尝试。http://download.csdn.net/detail/ysy441088327/4174609
下面是解决 0.1s爆音问题(摘自cocoachina):
貌似这个LAME 转换需要PCM的数据,而CAF是带有头信息的,所以转码后前0.1秒有爆音.
习惯性用法
fseek(pcm, 4*1024, SEEK_CUR);
read = fread(pcm_buffer, 2*sizeof(short int), PCM_SIZE, pcm);
我也就不去研究头有多少了,直接就跳过算了,至少没爆音
这几天的大部分时间也在研究这个,为了达到与Android实现音频互通。主要目的也还是减小Caf的音频体积,转换为Mp3以后体积缩小接近10倍。
至于能够转换成Amr 是最好,唉,技术有限,先用Mp3顶着了。
这里主要用到lame,一款非常棒的Mp3音频编码器。
当然,还要感谢提供XCode下编译通过的lame源。
以下开始介绍下详细使用方法。
提供lame源下载地址,也算是感谢下这位哥了:
http://d.download.csdn.net/download/mqiezi/3796937
附件会上传我的Demo,噢,真机才能调试.这确实没办法。
lame的核心文件就两个,使用很简单。
1、lame库加入组件库中.
2、引入头文件 lame.h
#include"lame.h"
接下来和核心的转换代码:
int read, write;
FILE *pcm =fopen([autioPathcStringUsingEncoding:1],"rb");//被转换的文件
FILE *mp3 =fopen([mp3AudioPathcStringUsingEncoding:1],"wb");//转换后文件的存放位置
constint PCM_SIZE =8192;
constint MP3_SIZE =8192;
shortint pcm_buffer[PCM_SIZE*2];
unsignedchar mp3_buffer[MP3_SIZE];
lame_t lame =lame_init();
lame_set_in_samplerate(lame, 44100);
lame_set_VBR(lame, vbr_default);
lame_init_params(lame);
do {
read = fread(pcm_buffer, 2*sizeof(shortint), 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);
write(mp3_buffer, write, 1, mp3);
} while (read != 0);
lame_close(lame);
fclose(mp3);
fclose(pcm);
另外要注意的是:录制的Caf音频文件的参数必须如下,不然转换后的音频文件播放起来跟汤姆猫一样。哈哈,那你就悲剧了。
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
NSNumbernumberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey,
[NSNumbernumberWithInt:16], AVEncoderBitRateKey,
[NSNumbernumberWithInt:2], AVNumberOfChannelsKey,
[NSNumbernumberWithFloat:44100.0], AVSampleRateKey,nil];
audioRecorder = [[AVAudioRecorderalloc] initWithURL:pathURLsettings:recordSettingserror:&error];
这个真机才能调试噢!. command+B 。依旧编译通过!
以下是本次的Demo,欢迎下载尝试。http://download.csdn.net/detail/ysy441088327/4174609
下面是解决 0.1s爆音问题(摘自cocoachina):
貌似这个LAME 转换需要PCM的数据,而CAF是带有头信息的,所以转码后前0.1秒有爆音.
习惯性用法
fseek(pcm, 4*1024, SEEK_CUR);
read = fread(pcm_buffer, 2*sizeof(short int), PCM_SIZE, pcm);
我也就不去研究头有多少了,直接就跳过算了,至少没爆音
相关文章推荐
- iOS开发人员单元测试要求
- iOS编码问题
- iOS项目中设置ARC 和 非ARC 以及autoRelease
- iOS开发技巧(系列十五:autolayout自动布局)
- OC简介
- centreon+nagios安装测试(一…
- iOS ARC项目中引用MRC文件和MRC中引用ARC文件
- IOS逆向工程
- ios 调用webservice整理
- iOS——undefined symbols for architecture x86_64
- 2013斯坦福大学iOS应用开发学习笔记 11 Table View and iPad
- iOS之推送通知-本地-服务器3.服务器端实现: 如果要编写内容提供者的推送服务程序,需要进行SSL认证编程,以及构建APNS数据包,数据包分为3个主要部分:Command(命令)、deviceTo
- 修改iOS应用名称
- iOS ZBarSDK 用ZBarReaderView自定义二维码扫描界面
- IOS开发之页面间传值的几种小方法
- iOS中nil/Nil/NULL的区别以及[NSNull null]
- 使用xcrun打包iOS应用
- iOS图片拉伸技巧
- IOS CoreText --- 代码封装
- iOS音效和音乐播放