【问题标题】:Enumerate samples of AudioBuffer?枚举 AudioBuffer 的样本?
【发布时间】:2014-04-24 22:33:32
【问题描述】:

我有一个来自AVCaptureSession CMSampleBufferAudioBuffer,比如:

Sample Rate:              44100 
Format ID:                 lpcm 
Format Flags:                 C 
Bytes per Packet:             2 
Frames per Packet:            1 
Bytes per Frame:              2 
Channels per Frame:           1 
Bits per Channel:            16 

kAudioFormatFlagIsSignedInteger 
kAudioFormatFlagIsPacked 
kLinearPCMFormatFlagIsSignedInteger 
kLinearPCMFormatFlagIsPacked 
kLinearPCMFormatFlagsSampleFractionShift 
kAppleLosslessFormatFlag_32BitSourceData 

如何正确转换/枚举样本? (做一些处理) 上面的配置我应该把mData转换成什么类型​​?

我是否完全正确地解析了格式标志?上面的输出是https://gist.github.com/eppz/11272305

【问题讨论】:

    标签: ios audio signal-processing audiotoolbox


    【解决方案1】:

    一旦我解析了上面的标志,kAudioFormatFlagIsSignedInteger 似乎就是答案,每个通道有 16 位。

    到目前为止,它是这样的:

    // Enumerate audio buffers (probably faceing a sole buffer handling mono PCM anyway).
    for (int audioBufferIndex = 0; audioBufferIndex <= audioBufferList.mNumberBuffers; audioBufferIndex++)
    {
        AudioBuffer eachAudioBuffer = audioBufferList.mBuffers[audioBufferIndex];
    
        // Enumerate samples.
        SInt16 *samples;
        samples = (SInt16*)eachAudioBuffer.mData;
        for (int sampleIndex = 0; sampleIndex <= sampleCount; sampleIndex++)
        {
            SInt16 eachSample = samples[sampleIndex];
            printf("%i \n", eachSample);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多