- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有如下设置,在装有 iOS 10.3 的 iPhone 5s 上进行测试,包括调试和未调试。
AVAudioRecorder
触发 record(forDuration: 5.0)
CADisplayLink
监视记录器的级别(记录器是 meteringEnabled
),同步动画,并跟踪 recorder.currentTime
(但问题可以通过在显示链接中最少地跟踪时间来重现)recorder.currentTime
的报告始终达到 > 5 的值(通常为 5.2 到 5.5)。结果与recorder.deviceTime
和CFAbsoluteTimeGetCurrent
AVAudioPlayer
并验证声音 Assets 的持续时间是否恰好为 5.0 秒。 根据我的理解,记录器的 currentTime
以秒为单位测量,并在 recorder.isRecording 恢复为 false 时重置为 0.0,这在记录器停止时立即发生(这与我在audioRecorderDidFinishRecording
)...所以用 CADisplayLink
观察应该产生严格小于 5.0 的 currentTime 值?
问题是:这里可能出了什么问题?恰好 5 秒后,录音机正常停止,但内部认为它录制了超过 5 秒?我正在听我所有的录音,它们听起来不错。
我不确定它是否相关,但我的AVAudioSession
是AVAudioSessionCategoryPlayAndRecord
类型,我的音频设置如下(所有这些除了采样率都是必要的供以后分析):
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
替换为 AVAudioEngine
和 AVAudioFile
,但这是另一个问题一天。
关于ios - AVAudioRecorder currentTime 给出错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43351904/
以下是我的录制按钮方法的内容。它创建了所需的文件,但无论我记录多长时间,创建的文件的长度始终为 4kb 和 0 秒,我无法弄清楚为什么它无效。对于averagePowerPerChannel,计量也返
在我的设备上使用 Xcode 5.0 并运行 iOS 7.0.2。 我正在使用这种代码: AVAudioRecorder *audioRecorder; ……… [audioRecorder reco
我希望有人能支持我...... 我一直在开发一个应用程序,该应用程序允许最终用户录制一个小音频文件以供以后播放,并且正在测试内存泄漏。当 AVAudioRecorder 的“停止”方法尝试关闭其正在录
我在进入后台后暂停 AVAudioRecorder 时遇到问题。基本上,它是这样的(_recorder 是我的 AVAudioRecorder 实例): 开始录制: [_recorder record
AVAudioRecorder的peakPowerForChannel和averagePowerForChannel方法有什么区别? 为什么返回的值为负数?不是应该在没有声音时为 0,在声音幅度增大时
我有一个可以录制音频的应用程序。我想知道如何才能增加增益。有没有办法标准化音频或以某种方式放大它? 谢谢,豪伊 最佳答案 看来我找到了解决方案。根据文档,AVAudioPlayer 音量可以在 0.0
简单地说,我正在尝试根据 iPhone 麦克风输入流中的分贝读数对某些内容进行口型同步,但我得到的值并不完全是我想要的值。我正在使用 AVAudioRecorder 的peakPowerForChan
这是我的方法: -(void) playOrRecord:(UIButton *)sender { if (playBool == YES) { NSError *error
无法获取 AVAudioRecorder 与 URL 配合使用的代码。有人能够在 iOS 和 Swift 3 上录制音频吗?下面的粗体文本是我收到以下错误的地方: "Cannot invoke ini
我正在制作 iOS 游戏。我需要做的一件事是允许用户进行快速录音。这一切都有效,但录音只是暂时保存。因此,当用户关闭应用程序并重新打开它时,录音应该能够再次播放,但它没有,当我关闭应用程序时它被删除了
我需要开发一个在检测到语音时播放mp3的App女巫。我可以使用“在这里说”示例吗?还是有人知道类似的例子? 我当时在看FFT和aurioTouch的示例,但对我来说似乎很难... 提前致谢 最佳答案
我正在制作一个应用程序,可以记录用户的声音并以高音调播放给他们。 (像花栗鼠)。适用于 iOS 5.0 或更高版本以及 Xcode 4.6 这个问题之前已经在这里问过 Record the sound
我正在使用 AVAudioRecorder 录制具有以下配置的不同长度的音频文件: - (AVAudioRecorder*)recorder { if(!_recorder) {
我正在使用 AVAudioRecorder 进行录制,当我录制时,我按主页按钮并来到前台并检查 AVAudioRecorder (isRecording) 的状态仍然是 是。但是当我播放音频时,它只播
我最近发现我的应用程序存在漏洞。我把所有的代码都注释掉了,一步一步去掉注释。这一切都导致了 AVAudioRecorder。 ViewController.h: #import @interface
我正在使用 AVAudioRecorder 录制音频,它录制流畅,我可以播放或获取保存文件我正在使用以下代码初始化 AVAudioRecorder NSDictionary *settings =
我现在正在为 AVAudioRecorder(和 Player)苦苦挣扎。我有一个应用程序,其中有三个简单的按钮可以录制/播放/停止通话,我正在使用 AVAudioRecorder 和 AVAudio
我正在使用 AVAudioRecorder 录制并保存到具有以下设置的 audio.m4a 文件: NSMutableDictionary *recordSetting = [[NSMutableDi
如何在被来电打断后继续录音?现在来电后我的录音停止了,但我希望能够继续录音 func audioRecorderDidFinishRecording(_ recorder: AVAudioRecord
我正在努力实现我认为会非常容易但事实并非如此的事情。 我正在玩“react-native-audio”库的源代码。但是你可以假设我是为了这个问题而在本地工作。 这是一个reference for th
我是一名优秀的程序员,十分优秀!