• iOS 录音转MP3格式


    参考:https://github.com/molon/MLAudioRecorder 非常感谢

    可以借助demo进行学习,demo地址:  https://github.com/qiweiqiang10/iOS-MP3.git

    .h 文件

    #import <UIKit/UIKit.h>

     

    @interface ViewController : UIViewController

     

    - (IBAction)didClickRecordButon:(id)sender;

    - (IBAction)didClickPlaybutton:(id)sender;

     

     

    @end

     

    .m文件

    #import "ViewController.h"

    #import <AVFoundation/AVFoundation.h>

     

    #import "MLAudioRecorder.h"

    #import "CafRecordWriter.h"

    #import "AmrRecordWriter.h"

    #import "Mp3RecordWriter.h"

    #import "MLAudioMeterObserver.h"

     

     

    @interface ViewController ()<AVAudioPlayerDelegate,AVAudioRecorderDelegate>

     

     

    @property (nonatomic, strong) MLAudioRecorder *recorder;

    @property (nonatomic, strong) CafRecordWriter *cafWriter;

    @property (nonatomic, strong) AmrRecordWriter *amrWriter;

    @property (nonatomic, strong) Mp3RecordWriter *mp3Writer;

     

    @property (nonatomic, strong) MLAudioMeterObserver *meterObserver;

     

    @property (retain, nonatomic) AVAudioPlayer *audioPlayer;

     

    @end

     

    @implementation ViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

     

        NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

     

        CafRecordWriter *writer = [[CafRecordWriter alloc]init];

        writer.filePath = [path stringByAppendingPathComponent:@"record.caf"];

        self.cafWriter = writer;

     

        AmrRecordWriter *amrWriter = [[AmrRecordWriter alloc]init];

        amrWriter.filePath = [path stringByAppendingPathComponent:@"record.amr"];

        amrWriter.maxSecondCount = 60;

        amrWriter.maxFileSize = 1024*256;

        self.amrWriter = amrWriter;

     

        Mp3RecordWriter *mp3Writer = [[Mp3RecordWriter alloc]init];

        mp3Writer.filePath = [path stringByAppendingPathComponent:@"record.mp3"];

    //    mp3Writer.maxSecondCount = 60;

    //    mp3Writer.maxFileSize = 1024*256;

        mp3Writer.maxSecondCount = 300;

        mp3Writer.maxFileSize = 1024*256 * 100;

        self.mp3Writer = mp3Writer;

     

        MLAudioMeterObserver *meterObserver = [[MLAudioMeterObserver alloc]init];

        meterObserver.actionBlock = ^(NSArray *levelMeterStates,MLAudioMeterObserver *meterObserver){

            DLOG(@"volume:%f",[MLAudioMeterObserver volumeForLevelMeterStates:levelMeterStates]);

        };

        meterObserver.errorBlock = ^(NSError *error,MLAudioMeterObserver *meterObserver){

            [[[UIAlertView alloc]initWithTitle:@"错误" message:error.userInfo[NSLocalizedDescriptionKey] delegate:nil cancelButtonTitle:nil otherButtonTitles:@"知道了", nil]show];

        };

        self.meterObserver = meterObserver;

     

        MLAudioRecorder *recorder = [[MLAudioRecorder alloc]init];

        __weak __typeof(self)weakSelf = self;

        recorder.receiveStoppedBlock = ^{

    //        [weakSelf.recordButton setTitle:@"Record" forState:UIControlStateNormal];

            weakSelf.meterObserver.audioQueue = nil;

        };

        recorder.receiveErrorBlock = ^(NSError *error){

    //        [weakSelf.recordButton setTitle:@"Record" forState:UIControlStateNormal];

            weakSelf.meterObserver.audioQueue = nil;

     

            [[[UIAlertView alloc]initWithTitle:@"错误" message:error.userInfo[NSLocalizedDescriptionKey] delegate:nil cancelButtonTitle:nil otherButtonTitles:@"知道了", nil]show];

        };

     

     

        //caf

    //            recorder.fileWriterDelegate = writer;

        //        self.filePath = writer.filePath;

        //mp3

            recorder.fileWriterDelegate = mp3Writer;

    //        self.filePath = mp3Writer.filePath;

     

        //amr

    //    recorder.bufferDurationSeconds = 0.25;

    //    recorder.fileWriterDelegate = self.amrWriter;

     

        self.recorder = recorder;

    }

     

     

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

     

     

    - (IBAction)didClickRecordButon:(id)sender {

     

        [[AVAudioSession sharedInstance]requestRecordPermission:^(BOOL granted) {

            if (granted) {

                NSLog(@"开始录制");

                [self.recorder startRecording];

                self.meterObserver.audioQueue = self.recorder->_audioQueue;

            }

        }];

     

     

     

    }

     

    - (IBAction)didClickPlaybutton:(id)sender {

        [self.recorder stopRecording];

        NSLog(@"%@-------%@",_amrWriter.filePath,_mp3Writer.filePath);

     

    }

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

    {

        [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:nil];

        [[AVAudioSession sharedInstance] setActive:YES error:nil];

        if (_audioPlayer.isPlaying) {

            [_audioPlayer stop];

        }

        long long fileLength = [self fileSizeAtPath:_mp3Writer.filePath];

        NSLog(@"%lld",fileLength);

        _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:self.mp3Writer.filePath] error:nil];

        _audioPlayer.delegate = self;

        [_audioPlayer play];

     

     

    }

     

    - (long long) fileSizeAtPath:(NSString*) filePath{

        NSFileManager* manager = [NSFileManager defaultManager];

        if ([manager fileExistsAtPath:filePath]){

            return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];

        }

        return 0;

    }

     
  • 相关阅读:
    设计模式二(建造者、原型、桥接)
    MSSQL根据表名动态分页的存储过程以及C#.net调用使用
    查询身份证号码信息(C#.NET)
    初试三层+抽象工厂代码生成器
    NET多线程与异步编程
    【SQL.SERVER.DMVS.实战】学习笔记
    【SQL.SERVER.DMVS.实战】学习笔记(二)
    SQL Server 2005数据文件数据的存储
    ASP.NET第九天加强课程
    ASP.NET第四天加强课程
  • 原文地址:https://www.cnblogs.com/qizhuo/p/9228823.html
Copyright © 2020-2023  润新知