lame,把ios录音转换为mp3格式
在ios设备中进行录音,录音文件的格式为caf。但这种格式在很多设备中没法播放。为了适应终端的播放功能,特将caf转换为mp3格式文件来使用。
在录制caf文件时,需要使用双通道,否则在转换为MP3格式时,声音不对。caf录制端的设置为:
NSMutableDictionary * recordSetting = [NSMutableDictionary dictionary];
[recordSetting setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];//
[recordSetting setValue:[NSNumber numberWithFloat:8000.0] forKey:AVSampleRateKey];//采样率
[recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];//声音通道,这里必须为双通道
[recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityLow] forKey:AVEncoderAudioQualityKey];//音频质量
在转换mp3端的代码为:
NSString *cafFilePath = cafFilePathName; //caf文件路径
NSString *mp3FilePath = mp3FilePathName;//存储mp3文件的路径
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 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_num_channels(lame,1);//设置1为单通道,默认为2双通道
lame_set_in_samplerate(lame, 8000.0);//11025.0
//lame_set_VBR(lame, vbr_default);
lame_set_brate(lame,8);
lame_set_mode(lame,3);
lame_set_quality(lame,2); /* 2=high 5 = medium 7=low 音质*/
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);
return YES;
}
return NO;
}
@catch (NSException *exception) {
NSLog(@"%@",[exception description]);
return NO;
}
@finally {
NSLog(@"执行完成");
}
lame,把ios录音转换为mp3格式的更多相关文章
- Electron-vue中通过WebAudioApi实现录音功能,并转换为mp3格式,实时监测音频设备变化
实现以下功能: 1.检测当前音频环境,是否支持录音(WebAudio Api): 2.获取输入.输出设备列表,获取电脑默认的音频设备: 3.试音功能,通过分析录音样本数据,判断是否录到声音: 4.实时 ...
- Sony索尼数码录音笔MSV格式转换为MP3格式【转】
本文转载自:http://blog.sina.com.cn/s/blog_4b2c860f0100d78w.html Sony索尼数码录音笔一般存储为WAV格式,有些没有特意修改存储格式的就保存为MS ...
- PHP 将amr音频文件转换为mp3格式
说下整体思路 1.服务器安装ffmpeg 2.使用ffmpeg -i 指令来转换amr为mp3格式(这个到时候写在PHP代码中,使用exec函数执行即可) 3.在网页端使用HTML5的audio标签来 ...
- ios CAF音频转换为MP3
Url:http://blog.csdn.net/ysy441088327/article/details/7392842#reply 为了达到 iPhone 与 Android 实现音频互通. 那么 ...
- .net amr格式文件转换成mp3格式文件的方法
前言:winform端对于音频文件的格式多有限制,大多数不支持amr格式的文件的播放.但是,手机端传过来的音频文件大多数是amr格式的文件,所以,要想在winform客户端支持音频文件的播放,可以通过 ...
- 网易云音乐ncm格式分析以及ncm与mp3格式转换
目录 NCM格式分析 音频知识简介 两种可能 GitHub项目 格式分析 总体结构 密钥问题 代码分析 main函数 导入模块 dump函数 参考资料 代码完整版 转换工具 ncmdump ncmdu ...
- iOS: lame框架将PCM录音转成MP3格式
lame框架将PCM录音转成MP3格式 1.lame下载地址:https://github.com/rbrito/lame,它是一个不可执行的文件,需要借助build-lame.sh脚本将其编译成.a ...
- IOS 实现录音PCM转MP3格式(边录音边转码)
最近做的一个项目,项目中有个录音功能,采用的录音方法是IOS下的AVAudioRecorder.录音效果不错,但是录制的原生.pcm文件太大,每分钟大约10M左右. 找了下相关的音频压缩方法,用spe ...
- 【iOS 录音转码MP3及转码BASE64上传】
iOS 录音转码MP3及转码BASE64上传 一,开始录音 NSLog(@"开始录音"); [self startRecord]; - (void)startRecord { // ...
随机推荐
- Linux主流架构运维工作简单剖析
转载:http://wgkgood.blog.51cto.com/1192594/1586259 随着IT运维的不断发展,尤其的Linux的飞速发展,越来越多的企业开始使用Linux操作系统平台,例如 ...
- ibatis中#和$如何当作字符使用?
1.情景展示 在plsql中,可以正常执行 但是在ibatis的sqlMap文件中,报错信息如下: 2.原因分析 ibatis中 #.$ 是功能符号,用来取值的,当sql中出现这类字符时便会造成冲 ...
- excel文字格式设置
这里主要注意excel默认格式的设置方法,如何修改默认字体? 雅黑和4号字体? 文件----选项---常规----新建工作簿
- Windows下VS2017编译OpenCV 3.4.0-rc
简述 很久没有用过OpenCV了,这次需要做一点图像处理相关的工作,又需要用起来,这里记录一下编译的过程.之前介绍过使用vs2015编译opencv2.4的帖子在这里. 编译好的文件在这里https: ...
- Office2013中文激活版
国内的WPS专业版也是很不错的,习惯的Office.office2013很不错的办公利器 00.PPT 01.Word 02.Excel Download: 链接: https://pan.baidu ...
- VS2010 lib和dll导出路径设置
创建库文件工程时往往需要设置.lib文件和.dll文件的路径. 假设一个solution对应了多个工程,然而他们共用一些库,就可以在solution文件夹下分别添加两个文件夹lib和bin(其实放在一 ...
- android中执行(定时任务)的方法及6位随机码的产生
在网上看了很多类似的文章,比较乱,自己总结了一下,在开发中,常见的执行定时任务的方法有以下几种, 很简单的描述,有什么不懂可以留言,下面来介绍一下这几种常见的方法: 1.直接在线程中睡觉的方法,这个比 ...
- 使用gprof对应用程序做性能评测
1,包含头文件gperftools/profiler.h 2,代码结构如下: int main() { // codes ProfilerStart("./profile"); / ...
- 设置span在div中垂直居中
转自:https://blog.csdn.net/weirenkuan/article/details/51177695 使用display:table-cell,span中内容无论多少,都可以垂直居 ...
- HDUOJ-----Computer Transformation
Computer Transformation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...