首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将16位PCM值转换为-1到1的值

将16位PCM值转换为-1到1的值
EN

Stack Overflow用户
提问于 2011-03-08 00:18:16
回答 1查看 2.5K关注 0票数 3

这是我的第一篇文章,所以我希望有人能帮助我!

我正在使用AudioFileReadPackets函数读取音频数据(在CoreAudio中),此代码工作正常,并将16位PCM值加载到缓冲区中。

第一个样本值是:'65491‘(这段音频的开头没有声音)。我知道这是一个无符号整数,所以我的问题是,如何将这个值转换为-1到1的范围。

目前,我将样本值除以32768.0,得到一个浮点变量,如下所示...

代码语言:javascript
运行
复制
    for (UInt32 i = 0; i < packetCount; i++){ 
            
            sample = *(audioData + i);
    
            
            //turn it into the range -1.0 - 1.0
            monoFloatDataLeft[i] = (float)sample / 32768.0;
            
        }

但是,对于上面给出的示例(作为示例),这将导致输出'1.998626709‘,它不是零(对于静默来说应该是零)?

说到这里,当我在很久以后查看文件中的一个样本时,我知道它的值在'0.311584473‘标记附近,算法的结果是'0.3’,我相信它是正确的?

那么,为什么第一批样本没有被读取为零,正如我所知的那样?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-08 00:22:00

你需要先从你的无符号数据中减去32768,所以它以0为中心。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5222056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档