PCM转MP3工具的封装

说明

1. 对 PCM 转 MP3 进行了简单的封装.

2. 使用 https://github.com/wuqiong/mp3lame-for-iOS 生成支持64位的 lame 库.

源码

https://github.com/YouXianMing/iOS-General-Tools 中的 PCM-to-MP3

//
//  PcmToMp3Manager.h
//  RecordMusic
//
//  Created by YouXianMing on 16/7/28.
//  Copyright © 2016年 YouXianMing. All rights reserved.
//
//  Lame-for-iOS https://github.com/wuqiong/mp3lame-for-iOS
//

#import <Foundation/Foundation.h>
@class PcmToMp3Manager;@protocol PcmToMp3ManagerDelegate <NSObject>@optional/***  Did convert the pcm to mp3.**  @param manager   The PcmToMp3Manager object.*  @param sucess    Sucess or not.*  @param errorInfo Error info.*/
- (void)didConvertPcmToMp3:(PcmToMp3Manager *)manager sucess:(BOOL)sucess errorInfo:(NSString *)errorInfo;@end/***  In "Build Phases", You can add '-Wno-shorten-64-to-32' to the file 'PcmToMp3Manager.m' to ignore the warning.*/
@interface PcmToMp3Manager : NSObject/***  The PcmToMp3Manager's delegate.*/
@property (nonatomic, weak) id <PcmToMp3ManagerDelegate> delegate;/***  The pcm file's path.*/
@property (nonatomic, strong) NSString *pcmFilePath;/***  The mp3 file's path you specified.*/
@property (nonatomic, strong) NSString *mp3FilePath;/***  Before you start convert, you should specified the pcm file's path.*/
- (void)startConvert;@end

//
//  PcmToMp3Manager.m
//  RecordMusic
//
//  Created by YouXianMing on 16/7/28.
//  Copyright © 2016年 YouXianMing. All rights reserved.
//

#import "PcmToMp3Manager.h"
#import <lame/lame.h>@implementation PcmToMp3Manager- (void)startConvert {NSParameterAssert(self.pcmFilePath);BOOL isDirectory = NO;BOOL isExist     = [[NSFileManager defaultManager] fileExistsAtPath:self.pcmFilePath isDirectory:&isDirectory];if (isExist && isDirectory == NO) {dispatch_async(dispatch_get_global_queue(0, 0), ^{@try {int read, write;FILE *pcm = fopen([self.pcmFilePath cStringUsingEncoding:1], "rb");  //sourcefseek(pcm, 4*1024, SEEK_CUR);                                        //skip file headerFILE *mp3 = fopen([self.mp3FilePath cStringUsingEncoding:1], "wb");  //outputconst 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, 44100);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) {if (self.delegate && [self.delegate respondsToSelector:@selector(didConvertPcmToMp3:sucess:errorInfo:)]) {dispatch_async(dispatch_get_main_queue(), ^{[self.delegate didConvertPcmToMp3:self sucess:NO errorInfo:exception.description];});}} @finally {if (self.delegate && [self.delegate respondsToSelector:@selector(didConvertPcmToMp3:sucess:errorInfo:)]) {dispatch_async(dispatch_get_main_queue(), ^{[self.delegate didConvertPcmToMp3:self sucess:YES errorInfo:nil];});}}});} else {if (self.delegate && [self.delegate respondsToSelector:@selector(didConvertPcmToMp3:sucess:errorInfo:)]) {dispatch_async(dispatch_get_main_queue(), ^{[self.delegate didConvertPcmToMp3:self sucess:NO errorInfo:[NSString stringWithFormat:@"'%@' not exist.", self.pcmFilePath]];});}}
}@end

细节

为了去除 PcmToMp3Manager 的 warning, 在文件 PcmToMp3Manager.m 添加 -Wno-shorten-64-to-32 即可

转载于:https://www.cnblogs.com/YouXianMing/p/5714914.html

PCM转MP3工具的封装相关推荐

  1. IOS开发基础之音频工具类封装AVAudioPlayer

    IOS开发基础之音频工具类封装AVAudioPlayer 源码在我的主页下面 ,项目名称是AVAudioPlayer 关键性代码 工具类的封装 // // LJAudioTool.h // AVAud ...

  2. 微信公众帐号开发教程第6篇-消息及消息处理工具的封装

    本篇内容主要讲解如何将微信公众平台定义的消息及消息相关的操作封装成工具类,方面后期的使用  官方文档 接下来要做的就是将消息请求.回复中定义的消息进行封装,建立与之对应的Java类(Java是一门面向 ...

  3. Redis工具类封装讲解和实战

    Redis工具类封装讲解和实战     简介:高效开发方式 Redis工具类封装讲解和实战         1.常用客户端 https://redisdesktop.com/download      ...

  4. ipv4转ipv6 在线工具_TOOLFK在线工具-在线文字转语音/语音合成mp3工具

    本文要推荐的[TOOLFK]在线文字转语音/语音合成mp3工具 ,提供文字转语音功能. 網站名稱:ToolFk 網站鏈結:https://www.toolfk.com/ 工具链接:https://ww ...

  5. 【JavaScript学习】JavaScript 常用工具类封装

    文章目录 1.JavaScript 常用工具类封装 (1)获得浏览器地址所有参数 (2)将json转为get参数 (3)格式校验工具类 (4)数组操作工具类 (5)表单取值工具类 (6)时间转换工具类 ...

  6. [028] 微信公众帐号开发教程第4篇-消息及消息处理工具的封装

    工欲善其事必先利其器!本篇内容主要讲解如何将微信公众平台定义的消息及消息相关的操作封装成工具类,方面后期的使用.这里需要明确的是消息其实是由用户发给你的公众帐号的,消息先被微信平台接收到,然后微信平台 ...

  7. Android 图片处理工具类封装2

    http://www.2cto.com/kf/201312/263638.html Android 图片处理工具类封装 2013-12-10     0个评论   来源:Wiker Yong 的专栏  ...

  8. 转换MP3工具(Streambox RipperRM)

    转换MP3工具(Streambox RipperRM)                           Author: gnicky   URL:  http://blog.csdn.net/lo ...

  9. ffmpeg 命令行 pcm 编码 MP3

    MP3截取 ffmpeg -y -i test.mp3 -ss 00:00:00 -t 00:00:03 -acodec copy output_mp3.mp3 参数 说明 -y 允许覆盖 -i te ...

最新文章

  1. 卷积神经网络(CNN)新手指南
  2. 适用于Android的OpenSL ES指南-OpenSL ES的Android扩展
  3. ios越狱系统UIGestureRecognizer事件截获问题
  4. 处理ASP.NET Core中的HTML5客户端路由回退
  5. 流程制造项目中关于销售订单数量与实际产生数量不同时的解决方案
  6. 可还行?这款手机首获德国红点设计大奖
  7. Java经典设计模式-创建型模式-单例模式(Singleton)
  8. java冒泡排序计算学生学号_java冒泡法排序
  9. 使用HEVC官方编码器HM
  10. 佳能Canon imageCLASS MF240 一体机驱动
  11. [原创][爬虫学习·一]爬取天天基金网的基金收益排行信息
  12. php记录sql语句,sql语句记录
  13. java flip_GitHub - bowen903/ViewFlipAnimator: 一种超简单纯Java实现的卡片翻转效果
  14. 苹果计算机恢复计算器,苹果自带计算器删除怎么恢復
  15. python~运算符_python运算符
  16. 短时间如何过Java校招
  17. Tableau-可视化操作(五)
  18. 华尔街智商测试 交易员江平的答卷
  19. Excel如何将单元格多数据拆分并
  20. FICO_通过参考创建方式批量复制跨科目表的总账科目

热门文章

  1. 安卓性能测试之 adb shell 常用命令
  2. ngx_lua应用最佳实践
  3. C# 读取ini文件 百度问问学习文档
  4. (转)Git详解之一:Git起步
  5. Python代码中的if __name__ == ‘__main__‘的作用是什么?
  6. 写博客一定程度上是在刷存在感~
  7. Perl默认的内部变量
  8. OVS原理(四十二)
  9. linux usb3.0改2.0,TX1入门教程硬件篇-切换USB2.0与USB3.0
  10. 如何配置Spring Boot Tomcat