zoukankan      html  css  js  c++  java
  • IOS中录音后再播放声音太小问题解决

    1、AVAudioSessionCategory说明

    • 1.1 AVAudioSessionCategoryAmbient 或 kAudioSessionCategory_AmbientSound
      • 用于非以语音为主的应用,使用这个category的应用会随着静音键和屏幕关闭而静音。
      • 并且不会中止其它应用播放声音,可以和其它自带应用如iPod,safari等同时播放声音。
      • 注意:该Category无法在后台播放声音
    • 1.2 AVAudioSessionCategorySoloAmbient 或 kAudioSessionCategory_SoloAmbientSound
      • 类似于AVAudioSessionCategoryAmbient 不同之处在于它会中止其它应用播放声音。
      • 这个category为默认category。该Category无法在后台播放声音
    • 1.3 AVAudioSessionCategoryPlayback 或 kAudioSessionCategory_MediaPlayback
      • 用于以语音为主的应用,使用这个category的应用不会随着静音键和屏幕关闭而静音。
      • 可在后台播放声音
    • 1.4 AVAudioSessionCategoryRecord 或 kAudioSessionCategory_RecordAudio
      • 用于需要录音的应用,设置该category后,除了来电铃声,闹钟或日历提醒之外的其它系统声音都不会被播放。
      • 该Category只提供单纯录音功能。
    • 1.5 AVAudioSessionCategoryPlayAndRecord 或 kAudioSessionCategory_PlayAndRecord
      • 用于既需要播放声音又需要录音的应用,语音聊天应用(如微信)应该使用这个category。
      • 该Category提供录音和播放功能。如果你的应用需要用到iPhone上的听筒,该category是你唯一的选择,
      • 在该Category下声音的默认出口为听筒(在没有外接设备的情况下)。
    • 1.6 注意

      • 并不是一个应用只能使用一个category,程序应该根据实际需要来切换设置不同的category,
      • 举个例子,录音的时候,需要设置为AVAudioSessionCategoryRecord,
      • 当录音结束时,应根据程序需要更改category为AVAudioSessionCategoryAmbient,
      • AVAudioSessionCategorySoloAmbient或AVAudioSessionCategoryPlayback中的一种。

    2、录音后再播放声音太小问题解决

    • 2.1 方法一:录音结束恢复播放模式

      /********************** 开始录音 **********************************/
      - (void)onRecordSoundStart:(UIButton *)sender {
          if (![self canRecord]) {
              [[[UIAlertView alloc] initWithTitle:nil message:[NSString stringWithFormat:@"应用需要访问您的麦克风。
      请启用麦克风-设置/隐私/麦克风"]
                                         delegate:nil
                                cancelButtonTitle:@"好"
                                otherButtonTitles:nil] show];
              return;
          }
          [self initRecordSession];
          NSDictionary *settings = [[NSDictionary alloc] initWithObjectsAndKeys:
                                                          [NSNumber numberWithFloat:44100.0], AVSampleRateKey ,    //采样率 8000/44100/96000
                                                          [NSNumber numberWithInt:kAudioFormatMPEG4AAC], AVFormatIDKey,  //录音格式
                                                          [NSNumber numberWithInt:16], AVLinearPCMBitDepthKey,   //线性采样位数  8、16、24、32
                                                          [NSNumber numberWithInt:2], AVNumberOfChannelsKey,      //声道 1,2
                                                          [NSNumber numberWithInt:AVAudioQualityHigh], AVEncoderAudioQualityKey, //录音质量
                                                          nil];
      
         
          NSURL *strURL = [NSURL fileURLWithPath:[self GetRecordSoundFileName:sender.tag]];
          _recorder = [[AVAudioRecorder alloc] initWithURL:strURL settings:settings error:nil];
          _recorder.meteringEnabled = YES;
          _recorder.delegate = self;
          [_recorder prepareToRecord];
          [_recorder record];
          _timerRec = [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(detectionVoice) userInfo:nil repeats:YES];
      }
      
      /********************** 结束录音 **********************************/
      - (void)onRecordSoundStop:(UIButton *)sender {
      
          AVAudioSession *session = [AVAudioSession sharedInstance];
          [session setCategory:AVAudioSessionCategoryPlayback error:nil];  //此处需要恢复设置回放标志,否则会导致其它播放声音也会变小
          [session setActive:YES error:nil];
          [_timerRec invalidate];
          if (_recorder.currentTime > 1) {
              [_recorder stop];
              PlayNodeData *model = _dataOfVideoArrary[sender.tag];
              model.hasSound  = YES;
              [_btnPlay setImage:[UIImage imageNamed:@"simulate_image_play1"] forState:UIControlStateNormal];
          }
      }
      
      /********************** 录音器是否可用检查 **********************************/
      - (BOOL)canRecord {
          __block BOOL bCanRecord = YES;
          if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending) {
              AVAudioSession *audioSession = [AVAudioSession sharedInstance];
              if ([audioSession respondsToSelector:@selector(requestRecordPermission:)]) {
                  [audioSession performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
                      if (granted) {
                          bCanRecord = YES;
                      } 
                      else {
                          bCanRecord = NO;
                      }
                  }];
              }
          }
      
          return bCanRecord;
      }
      
      /********************** 初始化录音器 **********************************/
      - (void)initRecordSession {
          AVAudioSession *session = [AVAudioSession sharedInstance];
          [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
          [session setActive:YES error:nil];
      }
      
      /********************** 录音中音量更新 **********************************/
      - (void)detectionVoice {
          return;
          [_recorder updateMeters];//刷新音量数据
          //获取音量的平均值  [recorder averagePowerForChannel:0];
          //音量的最大值  [recorder peakPowerForChannel:0];
          double lowPassResults = pow(10, (0.05 * [_recorder peakPowerForChannel:0]));
          NSLog(@"%lf",lowPassResults);
          //最大50  0
          //图片 小-》大
          if (0 < lowPassResults <= 0.06) {
              ;
          }
          else if (0.06 < lowPassResults <= 0.13) {
              ;
          }
          else if (0.13 < lowPassResults <= 0.20) {
              ;
          }
          else if (0.20 < lowPassResults <= 0.27) {
              ;
          }
      }
      
    • 2.2 方法二:设置听筒模式

      [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&error];
      
  • 相关阅读:
    毕业设计-角色用户管理
    质因数分解
    高次同余方程
    线性同余方程
    乘法逆元
    约数,整除
    扩展欧几里得算法
    同余
    P2303 [SDOI2012] Longge 的问题
    最大公约数(gcd)与最小公倍数(lcm)
  • 原文地址:https://www.cnblogs.com/CH520/p/9440391.html
Copyright © 2011-2022 走看看