c - 从 C 中的字节数组 (UInt8) 中获取值

标签 c core-audio

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

float *floatArray = somebuffer;

然后将内容作为 float 处理,我也尝试过其他一些,如 int 和 double。以这种方式进行转换是否足以访问存储为不同类型的数据?例如, float 在字节数组中的索引为 0-3,但在 float 组中的索引应该为 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];

最佳答案

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

float <strong>floatArray = (float*</strong>)someBuffer;

关于c - 从 C 中的字节数组 (UInt8) 中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4080790/

相关文章:

objective-c - 音频值的播放缓冲区 - iOS

c - C 中的链表/指针

c - nfhook (netfilter) 错误 : assignment from incompatible pointer type

c - 在某个重复字符后从字符串中删除文本

objective-c - iOS 7 SDK 不遵守背景音频

ios - 如何获得 native (硬件支持的)音频采样率以避免内部采样率转换?

swift - 如何设置 AVAudioEngine 输入和输出设备 (swift/macos)

objective-c - 无法使用 MusicPlayer 和 AUGraph 在 iOS 中设置多个乐器

c - 动态函数名称 - 无法解析外部符号

c - 在循环排序数组中找到最小元素