2016-08-31 5 views
1

노래 한 16 비트 스트림 데이터에 대해 AVAudioEngine으로 재생하려고했습니다.함수를 연결하는 AVAudioFormat에 크래시가 발생했습니다.

하지만 AVAudioFormat 연결 함수에 전달하면 항상 크래시가 발생합니다.

코드 다음과 같은 :

let AUDIO_OUTPUT_SAMPLE_RATE = 44100 
let AUDIO_OUTPUT_CHANNELS  = 2 
let AUDIO_OUTPUT_BITS   = 16 
var audioEngine: AVAudioEngine? 
var audioPlayer: AVAudioPlayerNode? 

... 

    audioEngine = AVAudioEngine() 
    audioPlayer = AVAudioPlayerNode() 

    audioEngine?.attach(audioPlayer!) 

    let mixer = audioEngine?.mainMixerNode 
    mixer!.outputVolume = 1.0 
    let stereoFormat = AVAudioFormat(commonFormat: .pcmFormatInt16, sampleRate: Double(AUDIO_OUTPUT_SAMPLE_RATE), channels: 2, interleaved: false) 
    audioEngine!.connect(audioPlayer!, to: mixer!, format: stereoFormat) 

... 

audioEngine (...) 라인에게 내가 엑스 코드 (8)에게 베타 6를 사용하고

충돌되어, OS X 엘 카피 탄이, 그리고, 이런 일이 .connect을 발생! 시뮬레이터와 장치 모두에서.

ERROR: >avae> AVAudioNode.mm:751: AUSetFormat: error -10868 
*** Terminating app due to uncaught exception 'com.apple.coreaudio.avfaudio', reason: 'error -10868' 

... 
3 AVFAudio 0x000000011e0a5630 _Z19AVAE_RaiseExceptionP8NSStringz + 176 
4 AVFAudio 0x000000011e0f270d _ZN19AVAudioNodeImplBase11AUSetFormatEP28OpaqueAudioComponentInstancejjP13AVAudioFormat + 213 
5 AVFAudio 0x000000011e0f2630 _ZN19AVAudioNodeImplBase15SetOutputFormatEmP13AVAudioFormat + 46 
6 AVFAudio 0x000000011e0f9663 _ZN21AVAudioPlayerNodeImpl15SetOutputFormatEmP13AVAudioFormat + 25 
7 AVFAudio 0x000000011e099cfd _ZN18AVAudioEngineGraph8_ConnectEP19AVAudioNodeImplBaseS1_jjP13AVAudioFormat + 2377 
8 AVFAudio 0x000000011e09d15f _ZN18AVAudioEngineGraph7ConnectEP11AVAudioNodeS1_mmP13AVAudioFormat + 355 
9 AVFAudio 0x000000011e0fc80e _ZN17AVAudioEngineImpl7ConnectEP11AVAudioNodeS1_mmP13AVAudioFormat + 348 

그것은 오디오 파일에서 버퍼와 형식을 가지고 노는 아무 문제 없습니다 :

이 충돌 메시지의 일부입니다.

내가 실수를 하나 하나 했습니까?

감사합니다.

답변

1

-10868, a.k.a. kAudioUnitErr_FormatNotSupported이므로 PCMFormatInt16은 인정되지 않습니다. .PCMFormatFloat32으로 변경하면됩니다.

+0

감사합니다. 효과가 있습니다. –

+1

나는 같은 상황을 만났고 그것을 해결하기 위해 Float32를 사용했다. outputNode의 기본 AudioFormat도 3 개의 다른 iOD 장치에서 Float32라는 것을 알았습니다. iOS 기기가 Float32에서만 재생을 지원한다는 의미입니까? –