1 致谢

感谢kimmking网友提供的资料

原文链接如下:http://blog.csdn.net/kimmking/article/details/8752737

2 问题描述

今天遇到一个问题 读取了WAV文件的PCM数据
PCM数据是以byte[]类型存储的 而在一般的FFT变换库函数中一般使用的是浮点型数据
(Youki此处使用的是double类型 后期会根据需要进行修改)
所以需要将byte[]转换为double[]
此实验是在Java中进行的

3 算法设计

首先我们会获得一个byte[] 将两个byte转换为1个double
代码如下:
byte bl = byteArray[2 * i];
byte bh = byteArray[2 * i + 1];

可以看到 这里用的是“小端模式”

(具体为什么是“小端模式” 还有待探究 这个留待以后继续修改)
bh和bl中会分别存放浮点数的高8位和低8位 将这两个数合并就好了
合并需要进行位操作 详见后面的代码分析
之后需要除以16位的最大值 也就是2^15=32768
得到的就是所需的double值了

4 代码实现

代码如下:
static private void ByteArray2DoubleArray(double[] doubleArray, byte[] byteArray) {// TODO Auto-generated method stubfor (int i = 0; i < doubleArray.length; i++) {byte bl = byteArray[2 * i];byte bh = byteArray[2 * i + 1];short s = (short) ((bh & 0x00FF) << 8 | bl & 0x00FF);/*** Java中short是2字节 1字节是8bit 这里为什么要加上“& 0x00FF”呢? 这是为了把复数前面的“很多个F”去掉* 只取后8位的数据 防止相互影响*/System.out.println("s_" + s);doubleArray[i] = s / 32768f; // 32768 = 2^15}}

关于音频PCM数据2字节(16位)byte与64位double之间的转换相关推荐

  1. ffmpeg进行混音,将两路音频pcm数据合成一路输出

    ffmpeg进行混音,将两路音频pcm数据合成一路输出 audiomixer.h #ifndef AUDIOMIXER_H #define AUDIOMIXER_H#include <map&g ...

  2. js实现音频PCM数据合并、拼接、裁剪、调节音量等功能

    关于音频的内容,我边学习,边实践也总结了一些,从最开始实现一个简单的web音乐播放器的自定义工具栏,到后来的实现简单的音频频谱图.直到今天的对音频数据进行的进一步操作,我也是一点点的在进步.虽然很多地 ...

  3. 从16位到32位再到64位,为何16年过去,依然没有128位系统出现?

    绝大部分人都没有意识到128位的处理器早已经存在了,并且已经存在了几十年.这么多年过去了,不光是128位的处理器出现了,256位.512位的处理器也同样出现了,比如Nvidia GTX 280这样的显 ...

  4. 32位系统和64位系统各种数据类型占用的空间(字节数)

    不同的平台上对不同的数据类型分配的字节数是不同的,一般的,数据类型的字节数是由编辑器决定的(编译期间决定数据类型长度). 简单来说,平台就是CPU+OS+Compiler,cpu的位是指一次性可处理的 ...

  5. (阿里/百度/腾讯)云服务器建站全过程(Ubuntu Server 16.04.1 LTS 64位)

    (阿里/百度/腾讯)云服务器建站全过程(Ubuntu Server 16.04.1 LTS 64位) 注:这是作者利用周末时间,研究了一下云服务器的建站过程,以下是整理出来的学习笔记,仅供参考,如果有 ...

  6. 32位计算机处理64位数据,win764位和32位区别

    众所周知,Windows 7有32位系统和64位系统,但是针对win764位与32位区别之间的差别相信很多用户都感到困惑,最近就有用户问小编关于win764位和32位区别,那win764位和32位区别 ...

  7. 32位机器和64位机器中int、char等数据类型所占字节长度对比

    在32位机器和64机器中int类型都占用4个字节.编译器可以根据自身硬件来选择合适的大小,但是需要满足约束:short和int型至少为16位,long型至少为32位,并且short型长度不能超过int ...

  8. 32位系统处理64位数据

    64位返回值 x86平台 ARM平台 参数传递及加减运算 x86平台 ARM平台 右移 x86平台 ARM平台 32位数据转换为64位数据 x86平台 ARM平台 32位系统的通用寄存器GPR只能容纳 ...

  9. 转载】将32位代码向64位平台移植的注意事项

    转载]将32位代码向64位平台移植的注意事项 新近的64位平台在二进制上与32位应用程序兼容,这意味着可以非常简单地移植现有的程序.许多目前在32位平台上运行良好的程序也许不必移植,除非程序有以下要求 ...

最新文章

  1. HNCU1101:马的移动---BFS
  2. TCP/IP学习——利用主机IP与子网掩码计算网络号
  3. linux | 网卡驱动
  4. 《计算机网络》实验报告——常用网络命令
  5. 一道小时候经常玩的数字游戏
  6. LeetCode 837. 新21点(动态规划)
  7. Redis之Redis内存模型
  8. 一文读懂人工智能的前世今生(建议收藏)
  9. 随办——真正懂企业痛点的移动协作软件
  10. hdu-5493 Queue(二分+树状数组)
  11. as3.0横向渐变发光字
  12. 前端开发中如何将文件夹中的图片变为背景图_如何用Elementor设计banner
  13. 云计算分布式计算机硬件在哪,初学者: 云计算和分布式计算的概念
  14. 文件系统的设计与实现(操作系统课程设计)
  15. 【面试】造价工程师面试试题汇总
  16. 万特电能表接线仿真系统 软件_电工技能——分享一款超实用的电工仿真教学接线Flash动画软件...
  17. 打印出从1到1000的罗马数字
  18. 人工智能(AI)真的会带来大规模失业吗?
  19. linux安装/迁移confluence
  20. MySQL Server 安装和卸载

热门文章

  1. 【转】 C#学习笔记14——Trace、Debug和TraceSource的使用以及日志设计
  2. C#反射机制详解(转)
  3. mngoDB 常用语法
  4. free store VS heap(自由存储区VS堆)
  5. 简明Linux命令行笔记:tee
  6. 【PyQt5】连接 mysql 查询数据 并显示在 tableWidget 表格
  7. 【Java 进阶】匿名类(代码传递、回调、过滤器)、Lambda表达式(方法引用)、函数式接口(Supplier、Consumer、Predicate、Function)
  8. 通向财务自由之路09_知道何时收手:如何保护你的资本
  9. 海龟交易法则06_掌握优势
  10. java smtp收信_求一个简单java编写的邮件收发程序,邮件发送程序为smtpsend,邮件接收程序为popreceive。急需,感谢。...