首页 > 其他分享 >录音被打断的一些处理

录音被打断的一些处理

时间:2024-12-22 11:58:08浏览次数:7  
标签:info 处理 self 录音 会话 打断 error 音频

会话设置


- (void)setupAudioSession {
    self.audioSession = [AVAudioSession sharedInstance];
    NSError *error = nil;
    
    // 设置音频会话类别
    [self.audioSession setCategory:AVAudioSessionCategoryPlayAndRecord
                     withOptions:AVAudioSessionCategoryOptionAllowBluetooth | AVAudioSessionCategoryOptionDefaultToSpeaker
                           error:&error];
    if (error) {
        [self handleError:error];
        return;
    }
    
    // 设置音频会话模式
    [self.audioSession setMode:AVAudioSessionModeDefault error:&error];
    if (error) {
        [self handleError:error];
        return;
    }
    
    // 激活音频会话
    [self.audioSession setActive:YES error:&error];
    if (error) {
        [self handleError:error];
        return;
    }
}

监听通知处理

- (void)registerForNotifications {
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(handleInterruption:)
                                                 name:AVAudioSessionInterruptionNotification
                                               object:nil];
    
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(handleRouteChange:)
                                                 name:AVAudioSessionRouteChangeNotification
                                               object:nil];
}

- (void)handleInterruption:(NSNotification *)notification {
    NSDictionary *info = notification.userInfo;
    AVAudioSessionInterruptionType type = [info[AVAudioSessionInterruptionTypeKey] unsignedIntegerValue];
    
    switch (type) {
        case AVAudioSessionInterruptionTypeBegan: {
            // 记录当前录音为打断状态 暂停当前录音

            break;
        }
        case AVAudioSessionInterruptionTypeEnded: {
            AVAudioSessionInterruptionOptions options = [info[AVAudioSessionInterruptionOptionKey] unsignedIntegerValue];
            if (options & AVAudioSessionInterruptionOptionShouldResume) {
                // 如果之前在录音,此处尝试恢复录音
                
            }
            break;
        }
    }
}

- (void)handleRouteChange:(NSNotification *)notification {
    NSDictionary *info = notification.userInfo;
    AVAudioSessionRouteChangeReason reason = [info[AVAudioSessionRouteChangeReasonKey] unsignedIntegerValue];
    
    switch (reason) {
        case AVAudioSessionRouteChangeReasonNewDeviceAvailable:
        case AVAudioSessionRouteChangeReasonOldDeviceUnavailable: {
            // 音频路由发生变化(如插入/拔出耳机),重新配置音频会话
            [self setupAudioSession];
            break;
        }
        default:
            break;
    }
}

#pragma mark - Error Handling

- (void)handleError:(NSError *)error {
   //加一些处理 弹窗或者提示
}

结束录音时应该释放当前音频会话, 给别的应用去使用,一般来说都应该如此,不然很可能出现被打断恢复不了的情况,就算你监听了打断恢复的通知,没人发通知给你也是白瞎 ,
这句代码相当于发通知

  [[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];

标签:info,处理,self,录音,会话,打断,error,音频
From: https://www.cnblogs.com/wgb1234/p/18621966

相关文章

  • 大数据技术与应用——大数据处理技术(一)(山东省大数据职称考试)
      大数据分析应用-初级第一部分基础知识    一、大数据法律法规、政策文件、相关标准    二、计算机基础知识    三、信息化基础知识    四、密码学    五、大数据安全    六、数据库系统    七、数据仓库.第二......
  • (即插即用模块-特征处理部分) 十二、(2023) SDM 语义差异引导模块
    文章目录1、SemanticDifferenceGuidanceModule2、代码实现paper:PnPNet:Pull-and-PushNetworksforVolumetricSegmentationwithBoundaryConfusionCode:https://github.com/AlexYouXin/PnPNet1、SemanticDifferenceGuidanceModule为了解决以下几个问......
  • 实验6 模板类、文件I/O和异常处理
    task4Vector.hpp1#pragmaonce23#include<iostream>4#include<stdexcept>56usingstd::cout;7template<typenameT>89classVector{10public:11Vector(intn):size(n){12if(size<0){13......
  • 实验6 模板类、文件I/O和异常处理
    task4:Vector.hpp:点击查看代码#pragmaonce#include<iostream>#include<stdexcept>usingnamespacestd;template<typenameT>classVector{private:intsize;T*ptr;public:Vector(ints):size(s){......
  • 实验6 模板类、文件I/O和异常处理
    任务4:Vector.hpp1#include<bits/stdc++.h>2usingnamespacestd;3template<typenameT>4classVector{5public:6Vector(intsize,intvalue=0):size{size}{7if(size<0)throwlength_error("negativesi......
  • LabVIEW声音信号处理系统
    开发了一种基于LabVIEW的声音信号处理系统,通过集成的信号采集与分析一体化解决方案,提升电子信息领域教学与研究的质量。系统利用LabVIEW图形化编程环境和硬件如USB数据采集卡及声音传感器,实现了从声音信号的采集到频谱分析的全过程。项目背景在电子信息科技教育中,将理论与实......
  • 数据库系统------查询处理
    什么是查询处理下图是查询处理的基本步骤首先我们输入一串sql语句,这就是query查询,然后会交给parser解析器进行内部的处理,比如将sql语句转换成关系代数等,同一个操作可以有不同的关系代数表达式,我们最好是选择执行代价最小的那一种,这就是optimizer优化器的作用了,它......
  • 实验6 模板类、文件I/O和异常处理
    实验任务1-3:验证性实验。无需写入实验博客文档。 已亲自动手实践。实验任务4:1#pragmaonce2#include<iostream>3#include<stdexcept>4usingnamespacestd;5template<typenameT>6classVector{7private:8intsize;9T*dat......
  • 嵌入式系统 第二讲 ARM处理器和指令集
    自己整理的笔记自用,抄录老师给的课件,只是看没有印象,所以我就敲出来了,不算原创也不算翻译,考试复习用的,有需要的伙伴可以看看,个人觉得还是有逻辑的。•2.1ARM处理器简介2.1.1ARM公司和ARM产品简介ARM公司本身不生产芯片,而是通过转让设计方案(IP核)由合作伙伴(Samsung、Int......
  • CHM文件搜索显示为乱码或结果不全问题处理方法
      1生成CHM文件后搜索显示为乱码或搜索结果不全的原因及解决办法1.1问题背景  使用一些CHM帮助制作工具生成的帮助文件,在html编辑阶段都显示正常,但是生成chm后,可能会出现以下问题:页面显示为乱码搜索时,搜索结果为乱码搜索不到结果,但明明打开手册时可以看到相关文......