iOS录音开发

作者: 程序媛vivid | 来源:发表于2019-03-26 14:37 被阅读4次
    一,概述
    1. AVAudioRecorder录音
    • url:保存录音文件的沙盒路径
    • setting:录音格式设置

    AVSampleRateKey: String 采样率 8000, 44100等
    AVNumberOfChannelsKey: String 声道数 1为单声道, 2为双声道(立体声)
    AVLinearPCMBitDepthKey: String 位宽 数据一般为: 8, 16, 24, 32
    AVEncoderAudioQualityKey: String 录音质量,在AVAudioQuality枚举中,值有min low medium high max四个
    AVLinearPCMIsBigEndianKey: String 大小端编码:1为大端, 0为小端.
    AVFormatIDKey: String 录音数据格式 可以参考CoreAudio 里面相关的值

    1. AVAudioSession音频会话
    • Audio是iOS、tvOS和watchOS中的托管服务。系统通过使用音频会话管理应用程序、应用程序间和设备级别的音频行为。 AVAudioSession
    • category:Category iOS下目前有七种,每种Category都对应是否支持下面四种能力

    Interrupts non-mixable apps audio:是否打断不支持混音播放的APP
    Silenced by the Silent switch:是否会响应手机静音键开关
    Supports audio input:是否支持音频录制
    Supports audio output:是否支持音频播放

    category

    参考资料 官方文档

    二,基本实践应用

    1.引入AVFoundation框架;

    #import <AVFoundation/AVFoundation.h>
    @property (nonatomic, strong) AVAudioRecorder *audioRecorder;//音频录音机
    @property (nonatomic,copy) NSString *cafPathStr;//录音存放目录
    

    2.录音对象AVAudioRecorder及初始化

    /**
     *  获得录音机对象
     *
     *  @return 录音机对象
     */
    -(AVAudioRecorder *)audioRecorder{
        if (!_audioRecorder) {
            //创建录音文件保存路径
            NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
            self.cafPathStr = [path stringByAppendingPathComponent:@“myRecord.caf”];
            NSURL *url = [NSURL URLWithString: self.cafPathStr];
            //创建录音格式设置,详见下文
            NSDictionary *setting = [self getAudioSetting];
            //创建录音机
            NSError *error=nil;
            _audioRecorder=[[AVAudioRecorder alloc]initWithURL:url settings:setting error:&error];
            //设置委托代理
            _audioRecorder.delegate=self;
            //如果要监控声波则必须设置为YES
            _audioRecorder.meteringEnabled=YES;
            if (error) {
                NSLog(@"创建录音机对象时发生错误,错误信息:%@",error.localizedDescription);
                return nil;
            }
        }
        return _audioRecorder;
    }
    

    3.录音格式设置

    /**
     *  取得录音文件设置
     *  @return 录音设置
     */
    -(NSDictionary *)getAudioSetting{
        //LinearPCM 是iOS的一种无损编码格式,但是体积较为庞大
        //录音设置
        NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] init];
        //录音格式 无法使用
        [recordSettings setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey: AVFormatIDKey];
        //采样率
        [recordSettings setValue :[NSNumber numberWithFloat:11025.0] forKey: AVSampleRateKey];//44100.0
        //通道数
        [recordSettings setValue :[NSNumber numberWithInt:2] forKey: AVNumberOfChannelsKey];
        //线性采样位数
        //[recordSettings setValue :[NSNumber numberWithInt:16] forKey: AVLinearPCMBitDepthKey];
        //音频质量,采样质量
        [recordSettings setValue:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];
        return recordSettings;
    }
    

    4.录音开始

    #pragma mark -- 录音开始
    - (void)startRecordNotice{
        if ([self.audioRecorder isRecording]) {
            [self.audioRecorder stop];
        }
        // 删掉录音文件
        [self.audioRecorder deleteRecording];
        //创建音频会话对象
        AVAudioSession *audioSession=[AVAudioSession sharedInstance];
       //设置category
        [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
        if (![self.audioRecorder isRecording]){
            // 首次使用应用时如果调用record方法会询问用户是否允许使用麦克风
            [self.audioRecorder record];
        }
    }
    

    5.录音暂停和停止

    //暂停录音
    - (void)stopRecordNotice{
        [self.audioRecorder pause];
    }
    
    //结束录音
    - (void)stopRecordNotice{
        [self.audioRecorder stop];
    }
    

    相关文章

      网友评论

        本文标题:iOS录音开发

        本文链接:https://www.haomeiwen.com/subject/elervqtx.html