【发布时间】: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