표준 샘플 형식은 이제 iOS에서도 스테레오 플로트 32입니다.
Mac OS는 맞춤 v3 및 v2 오디오 기기를 지원하지만 iOS는 맞춤 v3 오디오 기기를 지원하지만 시스템에서 제공하는 v2 오디오 기기 만 지원합니다.
AVAudioEngine 및 친구들은 Swift/ObjC에서 핵심 오디오 C API를 상당 부분 감쌌으며 플랫폼 차이가 거의 없다고 생각합니다. AVAudioEngine을 먼저 시도한 다음 필요에 맞지 않으면 C API를 사용하는 것이 좋습니다.
C API의 대부분은 크로스 플랫폼이지만 MacOS 또는 iOS에서만 지원되는 부분이 있습니다. 차이점을 확인하려면 헤더를 살펴볼 수 있습니다. 예를 들어, 다음은 출력 오디오 유닛 하위 유형에 대한 정의입니다 (문서가 제거 된 경우).
#if !TARGET_OS_IPHONE
CF_ENUM(UInt32) {
kAudioUnitSubType_HALOutput = 'ahal',
kAudioUnitSubType_DefaultOutput = 'def ',
kAudioUnitSubType_SystemOutput = 'sys ',
};
#else
CF_ENUM(UInt32) {
kAudioUnitSubType_RemoteIO = 'rioc',
};
#endif
플랫폼 간 래퍼를 작성하려면 플랫폼 특성 전 처리기 지시문을 사용해야합니다. 다음은 플랫폼 관련 하위 유형을 사용하여 출력 오디오 유닛에 대한 AudioComponentDescription을 만드는 크로스 플랫폼 함수입니다.
AudioComponentDescription outputDescription() {
AudioComponentDescription description;
description.componentType = kAudioUnitType_Output;
description.componentManufacturer = kAudioUnitManufacturer_Apple;
description.componentFlags = 0;
description.componentFlagsMask = 0;
#if TARGET_OS_IPHONE
description.componentSubType = kAudioUnitSubType_RemoteIO;
#else
description.componentSubType = kAudioUnitSubType_DefaultOutput;
#endif
return description;
}
는 iOS 또는 맥 OS에서 지원되는 다른 오디오 장치 및 관리하는 API가있다 "시스템"수준의 오디오 상호 작용은 완전히 다릅니다. MacOS는 C API를, iOS는 AVAudioSession을 사용합니다.
나는 몇 가지가 빠졌음을 확신합니다.
고마워요, Dave. 너는 나의 의심도 확인했다. 새 문서 https://developer.apple.com/documentation/coreaudio는 최신 참조이지만 예제/샘플/설명이없는 반면 이전 문서는 https://developer.apple.com/library를 참조했습니다. /content/documentation/MusicAudio/Conceptual/CoreAudioOverview/WhatisCoreAudio/WawisCoreAudio.html에 설명이 있지만 오래된 것입니다. –