0

我正在尝试使用 MusicSequence 来控制针对 iOS5.1 的 AUSampler 实例

该项目引用了项目编译和运行的 CoreAudio 和 AudioToolbox,但使用 Bad Access Xcode、“未知功能”AppCode 调用 MusicDeviceMIDIEvent 时出错。

我看到 API 发生了变化,而且 MusicDeviceMIDIEvent 现在存在于 AudioUnit 框架的 MusicDevice.h 中。

如果我尝试添加对 AudioUnit.framework 的引用,我理解该引用包含我得到“找不到框架 AudioUnit”的功能,并且项目无法构建。

SE 上的其他问题表明我应该在 AudioUnit 上使用 CoreAudio 和 AudioToolbox。

此外,我可以看到示例代码“LoadPresetDemo”在没有 AudioUnit 框架的情况下运行,但我不明白为什么。

任何建议或指示将不胜感激。

4

1 回答 1

1

要使用 MusicPlayer API,您只需将AudioToolBox框架添加到您的项目中,然后将 AudioToolbox.h 导入您的项目中:

#import <AudioToolbox/AudioToolbox.h>

如果您查看该文件,您会看到它#includes 所有必要的位以使用 AUGraph 等。如果您需要做一些额外的事情,例如记录或访问 AUGraph 输出,那么您将需要导入其他框架。

我为使用 MusicPlayer API 的其他人发布了一个演示项目——你可能会发现它很有用。

更新:

AudioToolbox 是一种方便的“瑞士军刀音频”类型的东西。如果您查看 AudioToolbox.h 它链接到 MusicPlayer.h 并且链接到一些核心音频 + 音频单元的东西。MusicDeviceMIDIEvent在 MusicPlayer.h 中定义,因此如果您在构建设置中包含了 AudioToolBox 框架,

我在这里有“LoadPresetDemo”示例。对于音频,它只包含 AudioToolbox 和 AVFoundation。作为现实检查,我删除了 AVFoundation 链接,编译并修复了导致的错误 - 所有这些都与设置音频会话和输出采样率等有关,然后我在模拟器中编译并运行它,它运行良好。我认为 Apple 包含了所有这些来演示如何处理音频应用程序进入和离开后台(参见endInterruptionWithFlags方法)。

无论如何...如果您已链接到 AudioToolBox 并导入 AudioToolbox.h 那么我不知道出了什么问题... ;-)

#define AUDIO_TOOLBOX_VERSION 1060

#include <Availability.h>
#include <TargetConditionals.h>
#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
    #include <AudioToolbox/AudioFile.h>
    #include <AudioToolbox/AudioFileStream.h>
    #include <AudioToolbox/AudioFormat.h>
    #include <AudioToolbox/AudioQueue.h>
    #include <AudioToolbox/AudioServices.h>
    #include <AudioToolbox/AUGraph.h>
    #include <AudioToolbox/AudioConverter.h>
    #include <AudioToolbox/ExtendedAudioFile.h>
    #include <AudioToolbox/MusicPlayer.h>
    #include <AudioToolbox/CAFFile.h>
    #if !TARGET_OS_IPHONE
        #include <AudioToolbox/AudioFileComponent.h>
        #include <AudioToolbox/AudioUnitUtilities.h>
        #include <AudioToolbox/AUMIDIController.h>
        #include <AudioToolbox/CoreAudioClock.h>
    #endif
#else
    #include <AudioConverter.h>
    #include <AudioFile.h>
    #include <AudioFileComponent.h>
    #include <AudioFileStream.h>
    #include <AudioFormat.h>
    #include <AudioQueue.h>
    #include <AudioUnitUtilities.h>
    #include <AUGraph.h>
    #include <AUMIDIController.h>
    #include <CAFFile.h>
    #include <CoreAudioClock.h>
    #include <ExtendedAudioFile.h>
    #include <MusicPlayer.h>
    #include <AudioServices.h>
#endif

// MusicPlayer.h
#include <Availability.h>
#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
    #include <CoreAudio/CoreAudioTypes.h>
    #include <AudioUnit/AUComponent.h>
#else
    #include <CoreAudioTypes.h>
    #include <AUComponent.h>
#endif
于 2012-08-11T23:49:49.447 回答