【问题标题】:MAC audioUnit AudioComponentInstanceDispose crashMAC audioUnit AudioComponentInstanceDispose 崩溃
【发布时间】:2021-07-19 10:56:07
【问题描述】:

音频单元子类型是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

【问题讨论】:

    标签: c++ macos audiounit


    【解决方案1】:

    您将在音频实例停止之前对其进行处置。

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

    【讨论】:

    • 在AudioUnitUninitialize之前,我得到了音频单元的属性“kAudioOutputUnitProperty_IsRunning”,状态没有运行。
    • 这可能会或可能不会告诉您音频单元是否完全停止并与所有其他内核进程断开连接。只是你告诉它停止。
    猜你喜欢
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多