gpt4 book ai didi

ios - AVAudioRecorder currentTime 给出错误的值

转载 作者:IT王子 更新时间:2023-10-29 05:37:40 26 4
gpt4 key购买 nike

我有如下设置,在装有 iOS 10.3 的 iPhone 5s 上进行测试,包括调试和未调试。

  • AVAudioRecorder 触发 record(forDuration: 5.0)
  • CADisplayLink 监视记录器的级别(记录器是 meteringEnabled),同步动画,并跟踪 recorder.currentTime (但问题可以通过在显示链接中最少地跟踪时间来重现)
  • recorder.currentTime 的报告始终达到 > 5 的值(通常为 5.2 到 5.5)。结果与recorder.deviceTimeCFAbsoluteTimeGetCurrent
  • 的值基本一致
  • 我初始化一个 AVAudioPlayer 并验证声音 Assets 的持续时间是否恰好为 5.0 秒。

根据我的理解,记录器的 currentTime 以秒为单位测量,并在 recorder.isRecording 恢复为 false 时重置为 0.0,这在记录器停止时立即发生(这与我在audioRecorderDidFinishRecording)...所以用 CADisplayLink 观察应该产生严格小于 5.0 的 currentTime 值?

问题是:这里可能出了什么问题?恰好 5 秒后,录音机正常停止,但内部认为它录制了超过 5 秒?我正在听我所有的录音,它们听起来不错。

我不确定它是否相关,但我的AVAudioSessionAVAudioSessionCategoryPlayAndRecord 类型,我的音频设置如下(所有这些除了采样率都是必要的供以后分析):

audioSettings = [
AVFormatIDKey: Int(kAudioFormatLinearPCM),
AVSampleRateKey: 44100,
AVNumberOfChannelsKey: 2,
AVLinearPCMIsBigEndianKey: 0,
AVLinearPCMIsFloatKey: 0,
AVLinearPCMBitDepthKey: 16,
AVLinearPCMIsNonInterleaved: 0
]

我已经尝试摆弄所有这些,但没有看到任何变化行为。

CADisplayLink 是通过主线程添加的

recorderDisplayLink?.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)

我在 stack exchange 上唯一能找到的类似问题是 this ,但问题未明确且答案无用(至少对我而言)。
起初我认为问题可能出在主队列重载上,因此记录器的时间感不知何故变得臃肿(我认为 仍然会构成不良行为),但在禁用动画后(并尝试使用 Timer 而不是 CADisplayLink),问题仍然存在!!!也许它仍然是一个线程问题,但我不明白为什么会这样。如果我确实需要多线程,我可以在理解和实现方面使用一些帮助:)任何想法表示赞赏。

最佳答案

在我使用 AVAudioRecorder 的所有时间里,我最终不得不更换它。 AVAudioRecorder 是一个通用的录音类,所以一旦您的要求变得有点特殊,它就会让您失望。

不过,它确实会做计量,这也是它吸引很多人的地方。所以也许情况可以挽救。

可能性:

一个。如果 currentTime 不可信,则不要观察它!您已经有了 5 秒的文件,所以也许可以找到其他方式在您的应用程序中标记时间的流逝。

属性 currentTime 的头文件说:

  only valid while recording

您是否仅在录制时对 currentTime 进行采样?如果是这样,那可能是问题所在。在这种情况下,您可以使用 deviceCurrentTime 属性,它始终有效,但您必须减去初始的 deviceCurrentTime

如果情况无法挽救,您可以很快将 AVAudioRecorder 替换为 AVAudioEngineAVAudioFile,但这是另一个问题一天。

关于ios - AVAudioRecorder currentTime 给出错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43351904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com