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];  //停止播放
    }
  • 相关阅读:
    JAVA消息对话框
    stringbuffer capacity()的疑问
    JAVA确认对话框
    c/c++实现获取NOD32升级账号密码
    复制构造函数(拷贝构造函数)
    使用VC将sqlite3.def转化为sqlite3.lib
    Windows下安装OpenSSL
    java中io与nio的使用
    使用 XStream 把 Java 对象序列化为 XML
    使用 XStream 把 Java 对象序列化为 XML
  • 原文地址:https://www.cnblogs.com/10-19-92/p/4865863.html
Copyright © 2011-2022 走看看