MAC audioUnit AudioComponentInstanceDispose 崩溃

问题描述

音频单元子类型是kAudioUnitSubType_VoiceProcessingIO, 并使用 kAudioOutputUnitProperty_CurrentDevice 设置音频单元的设备 ID

Osstatus result = AudioOutputUnitStop(audio_unit);
result = AudioUnitUninitialize(audio_unit);
result = AudioComponentInstancedispose(audio_unit);

线程跟踪:

3   ExceptionHandling                   0x00007fff3c64ef31 -[NSExceptionHandler _handleException:mask:] + 364
4   ExceptionHandling                   0x00007fff3c64ecac NSExceptionHandleruncaughtSignalHandler + 35
5   libsystem_platform.dylib            0x00007fff204d3d7d _sigtramp + 29
6   CoreFoundation                      0x00007fff2050f381 CFStringGetLength + 11
7   CoreFoundation                      0x00007fff205225c7 CFStringCompare + 24
8   CoreAudio                           0x00007fff221e83f5 _ZN9HALDevice4DuckEfPK14AudioTimeStampf + 921
9   CoreAudio                           0x00007fff21d3ed48 AudioDeviceDuck + 843
10  AudioDSP                            0x00000001390d7d4a _Z14DuckOtherAudiojff + 51
11  AudioDSP                            0x0000000139213e06 _ZN16AUVoiceProcessor22DestroyAggregateDeviceEv + 974
12  AudioDSP                            0x0000000139215459 _ZN16AUVoiceProcessorD2Ev + 417
13  AudioDSP                            0x00000001392efdec _ZN13ComponentBase8AP_CloseEPv + 30
14  AudioToolboxcore                    0x00007fff219e4b6a AudioComponentInstancedispose + 55

解决方法

您正在处理音频实例,然后再停止。

请注意,AudioOutputUnitStop 可能不会立即停止音频单元,因为音频线程是异步运行的。如果您在停止音频单元后延迟半秒,那么其他线程可能会在那时停止,然后您可以更安全地处理其资源。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...