zoukankan      html  css  js  c++  java
  • 录音

    使用AVAudioRecorder录制音频数据

    1. 包含头文件#import <AVFoundation/AVFoundation.h>

    2. 创建属性:录音对象、播放对象、存放录音文件的URL

    @property (nonatomic, strong) AVAudioRecorder *recorder;
    @property (nonatomic, strong) AVAudioPlayer *player;
    @property (nonatomic, strong) NSURL *recordURL; 

    3. 设置支持AVAudioSession支持录音和回放功能

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

    4. 录音前准备和设置工作

        NSMutableDictionary *setting = [NSMutableDictionary dictionary];
        
        // 编码格式
        setting[AVFormatIDKey] = @(kAudioFormatAppleIMA4);
        // 采样率
        setting[AVSampleRateKey] = @(44100);
        // 声道数
        setting[AVNumberOfChannelsKey] = @2;
        // 量化位数
        setting[AVLinearPCMBitDepthKey] = @16;
        // 编码质量
        setting[AVEncoderAudioQualityKey] = @(AVAudioQualityHigh);
        
        NSError *error;
        _recorder = [[AVAudioRecorder alloc] initWithURL:self.recordURL settings:setting error:&error];
        
        if (error != nil) {
            NSLog(@"error >>> %@", error);
        }
        // 准备录制
        [_recorder prepareToRecord];

    5. 懒加载

    - (NSURL *)recordURL
    {
        if (_recorder == nil) {
            NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
            //当使用kAudioFormatAppleIMA4编码格式时,生成的文件格式为caf
            NSString *path = [docPath stringByAppendingPathComponent:@"test.caf"];
            
            _recordURL = [NSURL URLWithString:path];
        }
        return _recordURL;
    }
    
    - (AVAudioPlayer *)player
    {
        if (_player == nil) {
            _player = [[AVAudioPlayer alloc] initWithContentsOfURL:self.recordURL error:nil];
            _player.numberOfLoops = 1;
            
            [_player prepareToPlay];
        }
        return _player;
    }

    6. 录音/播放控制

    - (IBAction)startRecord:(UIButton *)sender {
        [_recorder record];  //开始录音
    }
    - (IBAction)startPlay:(UIButton *)sender {
        [self.player play];  //开始播放
    }
    - (IBAction)endRecord:(UIButton *)sender {
        
        [_recorder stop];    //结束录音
    }
    - (IBAction)endPlay:(UIButton *)sender {
        [self.player stop];  //停止播放
    }
  • 相关阅读:
    旅行喵 React Native 技术实践
    微信、QQ这类IM App怎么做——谈谈Websocket
    IOS热更新-JSPatch实现原理+Patch现场恢复
    jquery 插件开发及extend
    JS Nice – JavaScript 代码美化和格式化工具
    ExtJS与jQuery的一点细节上的对比
    JQuery实现图片的预加载与延时加载
    十个实用但IE不支持的CSS属性
    如何通过预加载器提升网页加载速度
    遭遇Asp.Net长文件名下载的问题和解决办法
  • 原文地址:https://www.cnblogs.com/10-19-92/p/4865863.html
Copyright © 2011-2022 走看看