iOS语音到文本AVAudioInputNode(?)随机崩溃

时间:2017-06-08 14:35:14

标签: ios objective-c crash speech-to-text avaudioengine

我的应用程序中有一个语音转文字功能,按&按住按钮;一个viewcontroller从windowbounds外部动画进入视图并开始录制,释放按钮;录制停止并且视图在窗口边界中生成动画。

突然间,我通过Firebase Crashreporting获得了一些崩溃报告,该功能正在崩溃一些用户(2个用户/ 5个实例,所有相同的事件)。以下是我的crashlog-events指向我的代码..但是,我根本无法重现错误,我尝试了1000次,压力加载(猴子按钮捣碎等等),它不会在我的设备上崩溃..

有人可以帮我解析底部/建议中的堆栈跟踪吗? /有什么问题的建议?我能做些什么来稳定?

根据我的理解,它围绕installTapOnBus:0?有关下一步的建议吗?

_audioEngine = [[AVAudioEngine alloc] init];
_speechRecognizer = [[SFSpeechRecognizer alloc] initWithLocale:[NSLocale localeWithLocaleIdentifier:@"da"]];
[_speechRecognizer setDelegate:self];
_request = [[SFSpeechAudioBufferRecognitionRequest alloc] init];


AVAudioInputNode *node =[_audioEngine inputNode];
AVAudioFormat *recordingFormat = [node outputFormatForBus:0];


[node installTapOnBus:0 bufferSize:1024 format:recordingFormat block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {

        [_request appendAudioPCMBuffer:buffer];

    }];
}

堆栈跟踪:

1 CoreFoundation __exceptionPreprocess + 1232864

2 libobjc.A.dylib objc_exception_throw + 34100

3 CoreFoundation +[NSException raise:format:arguments:] + 1232560

4 AVFAudio AVAE_RaiseException(NSString*, ...) + 78280

5 AVFAudio AVAudioNodeImplBase::CreateRecordingTap(unsigned long, unsigned int, AVAudioFormat*, void (AVAudioPCMBuffer*, AVAudioTime*) block_pointer) + 554488

6 AVFAudio -[AVAudioNode installTapOnBus:bufferSize:format:block:] + 545144

7 shoppinglist 4295363296 + 297696

8 shoppinglist 4295358408 + 292808

9 UIKit -[UIViewController loadViewIfRequired] + 65212

10 UIKit -[UIViewController view] + 64152

11 shoppinglist 4295296168 + 230568

12 shoppinglist 4295272504 + 206904

13 shoppinglist 4295266368 + 200768

14 UIKit -[UIViewController _setViewAppearState:isAnimating:] + 162800

15 UIKit -[UIViewController __viewWillAppear:] + 162144

16 UIKit __56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 3540196

17 UIKit _runAfterCACommitDeferredBlocks + 2738508

18 UIKit _cleanUpAfterCAFlushAndRunDeferredBlocks + 2681320

19 UIKit _afterCACommitHandler + 9796

20 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 895396

21 CoreFoundation __CFRunLoopDoObservers + 886316

22 CoreFoundation __CFRunLoopRun + 887416

23 CoreFoundation CFRunLoopRunSpecific + 36256

24 GraphicsServices GSEventRunModal + 49264

25 UIKit UIApplicationMain + 479316

26 shoppinglist 4295262124 + 196524

27 libdyld.dylib start + 17816

1 个答案:

答案 0 :(得分:2)

我也遇到了同样的崩溃,但现在已经解决了。所以你需要检查音频格式的速率:

AVAudioInputNode *node =[_audioEngine inputNode];
AVAudioFormat *recordingFormat = [node outputFormatForBus:0];

if (recordingFormat.sampleRate > 0)
{
    [node installTapOnBus:0 bufferSize:1024 format:recordingFormat block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {

        [_request appendAudioPCMBuffer:buffer];

    }];
}