打印
[应用相关]

SPEEX解码数据为什么要+0x200,AD转化^0X8000,是什么原因

[复制链接]
297|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
flycamelaaa|  楼主 | 2024-10-30 09:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大佬,我在做SPEEX语音采集传输,看了AN2812的例程后,发现里面在AD采集时,采集到的12位数据先进行异或0X8000,然后才存储,播放时右移6位,然后+0x200,看了几天,没看明白,我按照例程写的程序,将DEMO的声音,解码后用PWM播放,出来的全是杂音,只能隐隐听到有人声,不知哪位大佬做过类似项目,指点一二,不胜感谢

使用特权

评论回复
沙发
别乱了阵脚| | 2024-11-14 21:31 | 只看该作者
在处理音频数据时,特别是在使用SPEEX进行语音采集和传输时,数据的处理方式非常重要

使用特权

评论回复
板凳
光辉梦境| | 2024-11-15 02:00 | 只看该作者
AN2812中的例程对采集到的12位数据进行了一系列的转换操作,这些操作可能是为了适应特定的硬件或软件需求

使用特权

评论回复
地板
远山寻你| | 2024-11-15 03:00 | 只看该作者
12位数据通常表示为04095之间的整数。异或0x8000(即16位数据的最高位)会将数据的符号位取反。例如,如果原始数据是正数,异或后会变成负数;如果是负数,异或后会变成正数。这种操作通常用于将无符号数据转换为有符号数据,或者反之

使用特权

评论回复
5
夜阑风雨| | 2024-11-15 04:00 | 只看该作者
右移6位相当于将数据除以642^6)。这可能是为了将12位数据转换为更小的范围,以便适应特定的数据格式或硬件需求

使用特权

评论回复
6
一秒落纱| | 2024-11-15 05:00 | 只看该作者
0x200(即512)可能是为了将数据偏移到一个特定的范围。例如,如果原始数据范围是-20482047,加512后会变成-15362559

使用特权

评论回复
7
三生万物| | 2024-11-15 06:00 | 只看该作者
如果采集到的数据格式与SPEEX解码器期望的格式不匹配,可能会导致解码后的音频数据出现杂音。例如,SPEEX可能期望有符号的16位数据,而你的数据处理方式可能导致了数据范围或符号的不匹配

使用特权

评论回复
8
三生万物| | 2024-11-15 06:00 | 只看该作者
如果采集到的数据格式与SPEEX解码器期望的格式不匹配,可能会导致解码后的音频数据出现杂音。例如,SPEEX可能期望有符号的16位数据,而你的数据处理方式可能导致了数据范围或符号的不匹配

使用特权

评论回复
9
淡漠安然| | 2024-11-15 07:00 | 只看该作者
右移6位和加0x200的操作可能会导致数据范围的变化,如果这些操作不适用于SPEEX解码器,可能会导致音频数据失真

使用特权

评论回复
10
暖了夏天蓝了海| | 2024-11-15 07:00 | 只看该作者
右移6位会导致数据精度丢失,特别是对于低幅度的音频信号,可能会导致信号失真或完全丢失

使用特权

评论回复
11
江河千里| | 2024-11-15 09:00 | 只看该作者
确保采集到的数据格式与SPEEX解码器期望的格式一致。如果SPEEX期望有符号的16位数据,确保你的数据处理方式不会改变数据的符号或范围

使用特权

评论回复
12
冰春彩落下| | 2024-11-15 10:00 | 只看该作者
尝试去掉或调整数据处理步骤,例如去掉异或0x8000、右移6位和加0x200的操作,直接将12位数据转换为16位有符号数据

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

655

主题

2736

帖子

0

粉丝