I'm playing with AIFF files, which include an 80-bit "extended" format value which defines the sample rate. Since neither my language of choice, R, nor my desktop Mac, natively supports this size, I need to write conversion code. Given the data structure of the bits, as shown here, and in this image from that page enter image description here ,

假设我永远不会看到那么高精度的采样率,我可以简单地截断"分数"部分吗? 也就是说,我可以抓取从左侧开始的64位并将它们视为双浮点吗? 请注意,指数中的有效位数也必须被截断,根据图表为this question

一个最小的例子:我验证了测试文件中的采样率为44100.

从AIFF标头读取的10个字节是:

40 0e ac 44 00 00 00 00 00 00

edit ac 44,因为4个原始字节转换为小数变成44100,这是我期望的采样率.

推荐答案

这是一种不需要任何截断的直接方法.

  1. 转换15位指数. 遵循双打的标准程序,但现在计算ExpMul = 2^(exponent - 16383) ;后一个数字是2#14-1.

  2. 存储尾数的 bootstrap 位(相当于双打中的隐式"1"). 将剩余位的值计算为小数. (注:我为此使用了bigBits:fracB2B).

  3. 乘以(lead_bit + fraction) * (ExpMul).

我的样本值实际上产生了44100,正如我所期望的那样.

R相关问答推荐

try 在Powershell中运行R(编程语言)会重复最后一个命令

R根据名称的载体对收件箱列采取行动

使用gggplot 2在R中重新调整面板和y轴文本大小

从R中的另一个包扩展S3类的正确方法是什么

抖动点与嵌套类别变量箱形图的位置不对齐

用derrr在R中查找组间的重复项

使用geom_segment()对y轴排序

是否可以创建一个ggplot与整洁判断的交互作用

如何改变x轴比例的列在面

使用整齐的计算(curl -curl )和杂音

将文件保存到新文件夹时,切换r设置以不必创建目录

如何从R ggplot图片中获取SVG字符串?

如何通过判断数据框的一列来压缩另一列?

以相同的方式对每个表进行排序

比较理论阿尔法和经验阿尔法

如何将Which()函数用于管道%>;%

将箭头绘制在图形外部,而不是图形内部

随机将数据帧中特定列上的某些行设置为NA

如何合并不同列表中的数据文件,包括基于名称的部分匹配,而不是一对一等价

排序R矩阵的行和列