AVAudioRecorder 仅录制中断后的音频

2024-01-08

在我使用 AVAudioRecorder 和 AVAudioPlayer 录制和播放音频的应用程序中,我遇到了来电情况下的场景。当录音正在进行时,如果电话来电,则仅录制电话通话后录制的音频。我希望通话后录制的录音是通话前录制的音频的延续。

我使用 AVAudioRecorder 委托方法跟踪录音机中发生的中断

  • (void)audioRecorderBeginInterruption:(AVAudioRecorder *)avRecorder 和
  • (无效)audioRecorderEndInterruption:(AVAudioRecorder *)avRecorder。

在我的 EndInterruption 方法中,我激活了 audioSession。

这是我使用的录制代码

- (void)startRecordingProcess
{
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    NSError *err = nil;
    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&err];
    if(err)
    {
        DEBUG_LOG(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
        return;
    }
    [audioSession setActive:YES error:&err];
    err = nil;
    if(err)
    {
        DEBUG_LOG(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
        return;
    }
    // Record settings for recording the audio
    recordSetting = [[NSDictionary alloc] initWithObjectsAndKeys:
                     [NSNumber numberWithInt:kAudioFormatMPEG4AAC],AVFormatIDKey,
                     [NSNumber numberWithInt:44100],AVSampleRateKey,
                     [NSNumber numberWithInt: 2],AVNumberOfChannelsKey,
                     [NSNumber numberWithInt:16],AVLinearPCMBitDepthKey,
                     [NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey,
                     [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,
                     nil];
    BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:recorderFilePath];
    if (fileExists) 
    {        
        BOOL appendingFileExists = 
            [[NSFileManager defaultManager] fileExistsAtPath:appendingFilePath];
        if (appendingFileExists)
        {
            [[NSFileManager defaultManager]removeItemAtPath:appendingFilePath error:nil];
        }
        if (appendingFilePath) 
        {
            [appendingFilePath release];
            appendingFilePath = nil;
        }
        appendingFilePath = [[NSString alloc]initWithFormat:@"%@/AppendedAudio.m4a", DOCUMENTS_FOLDER];
        fileUrl = [NSURL fileURLWithPath:appendingFilePath]; 
    }
    else 
    {
        isFirstTime = YES;
        if (recorderFilePath) 
        {
            DEBUG_LOG(@"Testing 2");
            [recorderFilePath release];
            recorderFilePath = nil;
        }
        DEBUG_LOG(@"Testing 3");
        recorderFilePath = [[NSString alloc]initWithFormat:@"%@/RecordedAudio.m4a", DOCUMENTS_FOLDER];
        fileUrl = [NSURL fileURLWithPath:recorderFilePath];
    }
    err = nil;
    recorder = [[recorder initWithURL:fileUrl settings:recordSetting error:&err]retain];
    if(!recorder)
    {
        DEBUG_LOG(@"recorder: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
        [[AlertFunctions sharedInstance] showMessageWithTitle:kAppName 
                                                      message:[err localizedDescription] 
                                                     delegate:nil
                                            cancelButtonTitle:@"Ok"];
        return;
    }
    //prepare to record
    [recorder setDelegate:self];
    [recorder prepareToRecord];
    recorder.meteringEnabled = YES;
    [recorder record];

}

在寻找此问题的解决方案时,我遇到了另一个链接iPhone录音中断后如何恢复? https://stackoverflow.com/questions/1706064/how-to-resume-recording-after-interruption-occured-in-iphone and http://www.iphonedevsdk.com/forum/iphone-sdk-development/31268-avaudiorecorderdelegate-interruption.html http://www.iphonedevsdk.com/forum/iphone-sdk-development/31268-avaudiorecorderdelegate-interruption.html这谈到了同样的问题。 我尝试了这些链接中给出的建议,但没有成功。 我希望让它与 AVAudioRecorder 本身一起工作。 我有什么办法可以找到解决这个问题的方法吗? 感谢所有宝贵的建议。


经过多次研究后,Apple 通知我这是当前 API 的问题。因此,我设法找到解决该问题的方法,方法是在中断后保存之前的音频文件并将其与恢复的音频文件合并。希望它可以帮助那些可能面临同样问题的人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AVAudioRecorder 仅录制中断后的音频 的相关文章

  • 预填充 UICollectionView 单元重用队列

    问题 我有一个应用程序 只有一个UICollectionView我第一次滚动它时很卡顿 我已将来源范围缩小到正在创建新单元格 2 的事实 使用initWithFrame 因为周围没有可以重复使用的细胞 初始滚动后 重用队列不为空 单元格可以
  • 如何处理 iPhone 屏幕尺寸/背景图像分辨率

    在 iPhoneX 之后 我真的很纠结于支持所有设备的图像尺寸和命名约定 有没有办法在 4 7 5 5 和 5 8 屏幕上使用 3x 图像 全屏图像视图应该使用的确切尺寸是多少 您可以使用图像 pdf格式 因此您只需要管理 1x 的单比例图
  • 特别分发:应用程序安装失败

    我已经为我尝试分发的应用程序创建了一个临时存档和一个 ipa 文件 我还创建了一个分发配置文件 其中包含我计划将应用程序分发到的设备的 UDID 当我将 ipa 和 mobileprovision 文件拖到 iTunes 中并尝试将应用程序
  • 如何以编程方式创建选项卡栏

    大家好 我有基于导航的应用程序 其中我也需要在视图之一中实现选项卡栏 在一个视图中我需要 5 个选项卡 有人可以建议我以编程方式创建选项卡栏吗 每个选项卡应导航到另一个 xib 建议始终受到赞赏 问候 以下是 Apple 提供的用于以编程方
  • 如何在 iPhone 中查找本周的最后一天?

    在我的应用程序中 我使用以下代码来检索当前日期和星期 NSDate today1 NSDate date NSDateFormatter dateFormat NSDateFormatter alloc init dateFormat se
  • 符号化 iPad 崩溃日志后回溯仍然不可读

    我有这些崩溃日志 在我将它们放入管理器中后 会自动进行符号化 但结果始终相同 iOS 调用得到符号化 而我的应用程序调用则没有 我尝试将 Dym 和应用程序文件复制到同一文件夹中 删除并再次复制回来 没有任何帮助 知道发生了什么事吗 所以我
  • iOS 5 UIView drawRect 覆盖在设备上不起作用

    我正在准备在 iOS 5 GM 上发布我的 iPhone 应用程序 并遇到了 UIView 的错误 当我在子类上重写 drawRect 方法时 模拟器会显示所需的结果 但当我尝试在实际设备上测试时 drawRect 重写根本没有任何效果 我
  • iOS后台获取时间限制崩溃

    我已经设置了背景获取 使用大纲NSScreencast 第 92 集 http nsscreencast com episodes 92 background fetch BOOL application UIApplication app
  • 在 iOS 7 中查看 Core Data 创建的 sqlite 文件时出现问题

    当我尝试访问由核心数据创建的数据库文件时遇到问题 DB 文件位于 Documents 文件夹中 我已将其复制到桌面并使用 Firefox 插件打开它 Hello sqlite文件不包含任何行我有使用核心数据插入值 我正在使用 iOS 7 模
  • iPhone:每日本地通知

    我正在尝试实现本地通知 这就是我所设置的 Current date NSDate date NSDate date Add one minute to the current time NSDate dateToFire date date
  • Xcode - 发布和分发配置中的 Malloc_Error

    仅当我在设备上选择发布或分发配置时 我才会收到此错误 在模拟器上它运行良好 请问 我错在哪里 cc1obj 4113 malloc mmap size 429379584 failed error code 12 error can t a
  • OpenGL-ES、iPhone 和间歇性错误:GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES (0x8CD6)

    我有一个在 UIView 中使用 OpenGL ES 和 EAGLContext 的应用程序 非常类似于 Apple 的 GLPaint 示例代码应用程序 我在 iPhone 4 上看到这个错误 但在 iPad 上却没有 这可能很重要 大多
  • iOS 上关键 ClientState 警告的默认访问速度缓慢

    在测试我的 iOS 应用程序时 我收到 对关键 ClientState 的默认访问速度慢 耗时 0 034635 秒 容差为 0 020000 警告 它似乎是间歇性发生的 我试图环顾四周看看它是关于什么的 但我并不完全确定 任何帮助表示赞赏
  • 调用当前的 Modal ViewController 两次?

    我遇到了 UIViewController presentModalViewController 被调用两次的问题 我有一个模态视图 我试图调出另一个模态视图 但第二次没有任何反应 我怀疑它被隐藏了 还有其他人这样做过吗 您不能在同一个父控
  • 如何使用 didMoveToView 作为 initWithSize ?

    我将 Xcode 更新到版本 6 从那时起 我就无法使用以前在 Xcode 5 中使用 Objective C 编写的代码了 有一些新文件 GameScene h 和 GameScene m 以及 GameScene sks 而不是 MyS
  • 按升序对 NSDictionary 进行排序

    我正在尝试排序NSDictionary按升序排列 我正在使用这段代码 NSDictionary valDict self mGetDataDict key rowKey for NSString valueKey in valDict al
  • 使用 Dirac 在 iPhone 中进行实时音高变化 [重复]

    这个问题在这里已经有答案了 可能的重复 iPhone 上的实时音调变换 https stackoverflow com questions 1100495 real time pitch shifting on the iphone 我已经
  • 如何将设备上未保存的图片上传到dropbox帐户?(IOS)

    Dropbox RestClient 仅保存文件 所以我想先将图像保存在本地文件夹中 然后上传它 结果它保存了文件 但它已损坏 NSString localPath NSBundle mainBundle pathForResource I
  • 移动物体而不实际接触物体

    我是 iPhone 开发的初学者 我一直在寻找这个问题的答案 但还没有找到任何东西 我想做的是允许用户移动对象而无需实际触摸该对象 他们可以触摸屏幕上的任何位置 并且当他们移动时 对象将从原来的位置向用户的方向移动移动但不会跳到他们的触摸位
  • 隐藏 UITableview 单元格

    我正在尝试从 UITableView 中隐藏单元格 就像删除操作一样 但我只想隐藏它以便稍后在相同位置显示它 我知道 UITableViewCell 有一个名为 隐藏 的属性 但是当我使用此属性隐藏单元格时 它会隐藏但没有动画 并且会留下空

随机推荐

  • 调试 iOS Safari 上添加到主屏幕的 Web 应用程序

    我正在尝试调试添加到主屏幕的网络应用程序 我已经在 safari 上启用了网络检查器 如果我在 iOS safari 中打开 我可以调试该应用程序 但是当我将应用程序添加到主屏幕并尝试调试时 它显示 无可检查的应用程序 任何帮助 将不胜感激
  • 动态列出项目中的所有表单

    我想在列表框中动态列出项目中存在的所有表单的名称 然后通过单击每个表单 在另一个列表框中列出该表单上存在的所有按钮 但我不知道是否可以实施以及如何实施 如果您使用的是 Delphi 2010 您可以使用 RTTI 列出所有已注册 在应用程序
  • 编写软件时 64 位相对于 32 位的优势 [重复]

    这个问题在这里已经有答案了 如果我有一个像 HelloWorld 这样用 C 编写的简单程序 然后我在 32 位和 64 位的机器上编译它 我会得到两个不同的二进制文件做同样的事情 但它们是不同的机器代码 只有 32 位二进制文 件能够在
  • EWS FindItems OrderBy - 按 EmailMessageSchema 排序。来自不正确的顺序

    我正在视图上使用 OrderBy 调用 EWS FindItems 方法 如果我使用各种 ItemSchema 值 例如 ItemSchema DisplayTo ItemSchema Importance ItemSchema Subje
  • 使用 ISABOUT 时可以使用变量吗?

    我正在尝试使用存储过程创建一个表 通过获取主题名称并使用与该主题名称关联的关键字和权重来确定如何对帖子进行排名 从而对帖子进行排名 我一直在尝试使用 CONTAINSTABLE 和 ISABOUT 但在将关键字和权重放入 ISABOUT 语
  • 仅在为模拟器构建时才重复符号

    当为设备 ipad 3 构建时 我的构建工作发现没有警告或错误 但是当为 iPad 或 iPhone 模拟器构建时 我收到如下链接器错误 duplicate symbol CONSTANT NAME in Users me libLibra
  • 将 KDoc 文档从一种方法复制到另一种方法

    对于两个给定的方法 Adds a DataItem to the Android Wear network The updated item is synchronized across all devices fun putItem sa
  • 如何在 UIView 上添加 CCSprite

    在我的 cocos2d 应用程序中 我有一个UIView我通过添加子视图来显示在屏幕上 CCDirector sharedDirector openGLView 但我想知道是否有办法显示CCSprite在此视图之上 因为我必须与这些 CCO
  • 如何在R中查找列的平均值[重复]

    这个问题在这里已经有答案了 这是我正在使用的 csv 文件 my xldataset lt read csv http www math smith edu sasr datasets help csv 这是我尝试查找 mcs1 列的平均值
  • 在 Varnish 正则表达式中提取捕获组内容

    我在 Varnish 配置语言中有以下正则表达式 abc a zA Z0 9 0 9 现在 我想获取值 2部分 即 0 9 Varnish 中的正则表达式 我怎样才能得到这个值 您可以使用regsub在这种情况下 set req url r
  • 我的视图模型值类型属性应该可以为空吗?

    我已经让我的视图模型属性可以为空已经有一段时间了 我的理由是 当进行验证时 我不希望将默认值插入到用户留空的字段中 但这是必需的 当然 我将必填字段标记为必填 但这让我认为这样做会失去对象模型的大量保真度 当然 我的域类只有在实际上可以为空
  • 如何设置 VS Code 项目以构建 LLVM

    我想使用 VS Code 来构建和调试 LLVM 源代码 有没有一个好的文档解释如何在 VS Code 中为 LLVM 设置项目 提前致谢 我发现以下博客很有用 https developers redhat com blog 2021 0
  • 在 ASP.NET Core 中到达控制器之前拦截不良请求

    如果收到的请求是 BadRequest 我有一个应用逻辑 为此我创建了一个过滤器 public class ValidateModelAttribute ActionFilterAttribute public override void
  • 在前端JS中将ajax请求从一个容器发送到另一个容器

    我为 API 和前端使用不同的 Docker 容器 frontend image
  • 如何使用coldfusion获取href值?

  • 在 Windows 上配置 MongoDB

    我正在尝试在 Windows 上设置 MongoDB 但在线文档似乎不太准确 在 配置 Windows 服务 部分下 step 1 http docs mongodb org manual tutorial install mongodb
  • 使用 jQuery 预加载图像

    我正在寻找一种快速 简单的方法来使用 JavaScript 预加载图像 如果这很重要的话我会使用 jQuery 我在这里看到了这个 http nettuts com http nettuts com tutorials javascript
  • 使用 iOS SDK 将视频发布到 Facebook 时出错

    我有一个应用程序 可以使用适用于 iOS 的 Facebook SDK 将本机 MOV 文件 视频发布到 Facebook 它一直运行没有问题 直到几周前它开始失败并出现以下错误 error code 352 message 352 Sor
  • 在亚马逊 lambda python 中运行 selenium webdriver

    我想在amazon lambda中运行BeautifulSoup和selenium webdriver 我的运行环境是python 3 6 可以跑吗 如果是这样怎么办 我的目的是使用 beautiful soup 4 和 selenium
  • AVAudioRecorder 仅录制中断后的音频

    在我使用 AVAudioRecorder 和 AVAudioPlayer 录制和播放音频的应用程序中 我遇到了来电情况下的场景 当录音正在进行时 如果电话来电 则仅录制电话通话后录制的音频 我希望通话后录制的录音是通话前录制的音频的延续 我