0

MusicSequence を使用して、iOS5.1 を対象とする AUSampler のインスタンスを制御しようとしています。

プロジェクトには、プロジェクトがコンパイルして実行する CoreAudio および AudioToolbox への参照がありますが、MusicDeviceMIDIEvent への呼び出しで、Bad Access Xcode、「unknown function」AppCode でエラーが発生します。

API が変更され、AudioUnit フレームワークの MusicDevice.h に MusicDeviceMIDIEvent が存在するようになりました。

関数が含まれていることを理解している AudioUnit.framework への参照を追加しようとすると、「framework not found AudioUnit」というメッセージが表示され、プロジェクトのビルドに失敗します。

SE に関するその他の質問は、AudioUnit で CoreAudio と AudioToolbox を使用する必要があることを示唆しています。

さらに、サンプル コード 'LoadPresetDemo' が AudioUnit フレームワークなしで機能することがわかりますが、その理由はわかりません。

アドバイスや指針をいただければ幸いです。

4

1 に答える 1

1

MusicPlayer API を使用するには、AudioToolBoxフレームワークをプロジェクトに追加してから、プロジェクトに AudioToolbox.h をインポートするだけです。

#import <AudioToolbox/AudioToolbox.h>

そのファイルを見ると、AUGraph などを操作するために必要なすべてのビットが #include されていることがわかります。記録や AUGraph 出力へのアクセスなど、何か追加の操作が必要な場合は、追加のフレームワークをインポートする必要があります。

私は、MusicPlayer API を使用する他の誰かのためにデモ プロジェクトを投稿しました。

アップデート:

AudioToolbox は、一種の便利な「オーディオ用スイス アーミー ナイフ」タイプのものです。AudioToolbox.h を見ると、MusicPlayer.h にリンクしており、Core Audio + Audio Unit のものにリンクしています。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 に答える