【问题标题】:Getting values out of byte array (UInt8) in C从 C 中的字节数组(UInt8)中获取值
【发布时间】:2010-11-02 18:15:50
【问题描述】:

我有一个包含未知格式数据的字节数组(比如 UInt8 *somebuffer)。我尝试过转换为几种数据类型,但未能成功获取任何有意义的数据。我想做的是这样的:

float *floatArray = somebuffer;

然后将内容作为浮点数处理,我还尝试了其他一些,例如 int 和 double。以这种方式进行转换是否足以访问存储为不同类型的数据?例如,浮点数是字节数组中的索引 0-3,但应该是浮点数组中的索引 0,对吗?

顺便说一句,这恰好是线性 PCM 音频数据,以下是我用来生成 PCM 数据的设置(我试图从 pcm 数据中获取电平以生成波形):

    [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
    [recordSetting setValue:[NSNumber numberWithFloat:22000.0] forKey:AVSampleRateKey]; 
    [recordSetting setValue:[NSNumber numberWithInt:1] forKey:AVNumberOfChannelsKey];

    [recordSetting setValue:[NSNumber numberWithInt:8] forKey:AVLinearPCMBitDepthKey];
    [recordSetting setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];
    [recordSetting setValue:[NSNumber numberWithBool:YES] forKey:AVLinearPCMIsFloatKey];

【问题讨论】:

  • 需要更多信息:PCM 数据、立体声/单声道的位深度是多少,或者您要做什么?
  • PCM 通常使用 8/16/20/24 位整数而不是浮点数,并且可能是压缩数据,具体取决于格式。
  • 我指定了 16 位、单声道、22000khz,但已经使用了这些设置(我从 iPhone 麦克风录制)并且还没有获得合理的数据。我正在指定浮点数据,但也尝试过整数。浮点数据指定为 -1 到 1,但我得到的所有值要么是随机的,要么非常接近 0(即 0.00002、-0.00003)

标签: c core-audio


【解决方案1】:

是的,如果您转换为正确的格式,这就足够了。你的推理是正确的,但为了摆脱编译器警告,我会做一个演员,比如:

float floatArray = (float*)someBuffer;

【讨论】:

  • 并且一定要记住,数组中的元素数量也会相应减少(100 个byte 数组只能容纳25 个float 秒)
  • 还有其他注意事项吗?例如,我知道结束很重要,但我从阅读有关浮动的维基百科文章中注意到,有许多不同的方式来表示浮动。
猜你喜欢
  • 1970-01-01
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多