2015-07-29 4 views
0

Я пытаюсь получить доступ к mSampleRate и mChannelsPerFrame и присваивать значения глобальным переменным.Не удается получить AudioStreamBasicDescription из вывода вывода

Метод:

func setAudioFormat(format: CMFormatDescriptionRef) { 
    let asbd: UnsafePointer<AudioStreamBasicDescription> = CMAudioFormatDescriptionGetStreamBasicDescription(format) 

    sampleRate = asbd.memory.mSampleRate // breakpoint 
    channels = asbd.memory.mChannelsPerFrame 

} 

Вызов метода:

func captureOutput(captureOutput: AVCaptureOutput!, var didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) { 
    ... 

    let format: CMFormatDescriptionRef = CMSampleBufferGetFormatDescription(sampleBuffer)! 
    self.setAudioFormat(format) 

    ... 
} 

я делаю что-то не так? есть лучший способ получить AudioStreamBasicDescription от захвата выходного samplebuffer

Edit: формата

держит эти значения:

<CMAudioFormatDescription 0x14516150 [0x346c08a0]> { 
mediaType:'soun' 
mediaSubType:'lpcm' 
mediaSpecific: { 
    ASBD: { 
     mSampleRate: 44100.000000 
     mFormatID: 'lpcm' 
     mFormatFlags: 0xc 
     mBytesPerPacket: 2 
     mFramesPerPacket: 1 
     mBytesPerFrame: 2 
     mChannelsPerFrame: 1 
     mBitsPerChannel: 16  } 
    cookie: {(null)} 
    ACL: {(null)} 
} 
extensions: {(null)} 
} 
+0

является образцом Буфера действительно и существует ли формат? – Volker

+0

@ Волькер сожалеет, что вы подразумеваете под «делает формат существует»? и я бы предположил, что samplebuffer действителен, поскольку все остальное работает, когда я комментирую вызов метода, есть ли что-то, что я должен проверять специально? –

+0

Вы проверили, если sampleBuffer и формат не ноль/удержание полезных значений? Вы форсируете формат, чтобы существовать, используя! ... – Volker

ответ

0

После того, как у вас есть CMFormatDescriptionRef экземпляра, вы можете использовать этот код (в Objective-C, извините) для извлечения данных ASBD:

const AudioFormatListItem *audioFormatListItem = CMAudioFormatDescriptionGetFormatList(formatDescription, nil); 
AudioStreamBasicDescription asbd = audioFormatListItem->mASBD; 
float sampleRate = asbd.mSampleRate; 

 Смежные вопросы

  • Нет связанных вопросов^_^