如果直接使用wav文件的字节,则可以在任何编程语言中使用相同的策略.对于这个例子,我假设两个源文件具有相同的比特率/ numchannels并且长度/大小相同.

(如果没有,你可以在开始合并之前编辑它们).

首先看一下wav规范,我在stanford课程网站上找到了一个好的:

通用标头长度为44或46个字节.

如果你想连接两个文件(即在一个文件中播放一个wav,然后播放另一个文件):

>找出你的wav文件的格式

>砍掉作为标题的前44/46字节,文件的其余部分是数据

>创建一个新文件并在其中粘贴其中一个标题.

新的wav文件= {header} = {44/46}个字节长

>从原始文件中添加两个数据部分

new wav file = {header data1 data2} = {44/46 size(data1)size(data2)} bytes long

>在两个地方修改标题以反映新文件的长度.

一个.修改字节4 4(即从偏移4开始的4个字节).

新值应该是十六进制数,表示新的wav文件的大小,以字节{44/46 size(data1)size(data2)} – 8字节为单位.

湾修改字节40 4或42 4(从偏移40或42开始的4个字节,具体取决于您是否具有44字节标头或46字节标头).

新值应为十六进制数,表示新wav文件的总大小.即{44/46尺寸(数据1)尺寸(数据2)}

如果你想要合并或混合这两个文件(这样它们两者同时播放):

>如果两个文件的长度相同,则无需编辑标题.

>从字节44/46开始,您必须将每个样本编辑为data1中data2中值的值.

因此,例如,如果您的SampleRate是8位,您将修改1个字节,如果您的采样率是16位,您将修改2个字节.

文件的其余部分只是1/2个样本的样本,存储一个int值,表示当时声音的波形.

一个.对于文件中的每个剩余样本,抓取1/2字节十六进制字符串,并从文件data1和data2获取int值.

湾将1/2字节整数加在一起

将结果转换回十六进制,并在输出文件中使用该值.

C.您通常必须将该数字除以2才能获得适合原始1/2字节样本块的平均值.当我在objc中尝试它时可能会失真(可能与有符号或无符号的整数相关)并且只是跳过了除法部分,因为如果你将非常大的声音合并在一起它只会是一个问题.

即当data1 data2大于1/2字节时,声音将被剪辑.有关剪辑问题here的讨论,你可能想尝试其中一种裁剪技术.

java wav合并_java – 如何将两个wav文件合并/合并到一个wav文件中?相关推荐

  1. 计算机如何将两个磁盘合在一起,Win7系统如何合并磁盘分区将两个或多个合并到一起...

    Win7系统如何合并磁盘分区将两个或多个合并到一起 腾讯视频/爱奇艺/优酷/外卖 充值4折起 在重装雨林木风Win7系统之前,进行了磁盘分区,装完系统后才发现有一个磁盘只分到了17.4GB,于是就想到 ...

  2. java math 保留_java怎么保留两位小数?具体方法是什么?

    小伙伴们在平时写程序的时,有没有需要在界面或者页面上保留小数点后两位的数据时候呢?今天,小编就来为大家讲一讲如何在Java中保留小数点后两位. 一.使用java.math.BigDecimal /** ...

  3. Java教程交集_Java 程序计算两个集合的交集

    Java 程序计算两个集合的交集 在此示例中,我们将学习计算Java中两个集合的交集. 要理解此示例,您应该了解以下Java编程主题: 示例1:计算两个集合的交集 示例import java.util ...

  4. 两个链接合并_如何找到两个链接列表的合并点

    两个链接合并 了解问题 (Understand the Problem) We are given two singly linked lists and we have to find the po ...

  5. java代码例子_Java与C++两大语言比较

    Java Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程 ...

  6. 初始化一个java空数组_Java 数组的两种初始化方式

    一.数组 1.数组中存储元素的类型是统一的,每一个元素在内存中所占用的空间大小是相同的,知道数组的首元素的内存地址,要查找的元素只要知道下标,就可以快速的计算出偏移量,通过首元素内存地址加上偏移量,就 ...

  7. java枚举怎么遍历,java遍历枚举_java枚举的两种遍历方法

    摘要 腾兴网为您分享:java枚举的两种遍历方法,余额宝,永安期货,易视云3,小睡眠等软件知识,以及幻想三国志4外传,损益表表格,2018微信最新的版本,贺卡,手机mp3格式转换器,cf挂无毒,火炬之 ...

  8. java最全人名数组_java 里有两个方法 第一个方法定义一个数组 每个数组都是一个学生类 每个学生有姓名 学号 年龄...

    匿名用户 1级 2015-12-01 回答 写了一半,剩下的自己来吧. /** * Filename:    student.java * Create at:   2015年11月30日 上午9:2 ...

  9. java月份列表_java – 如何获取两个日期之间的月份和年份列表

    使用较少的代码和基本的Java库并获得您要求的结果.所以你可以修改date1和date2变量. import java.text.DateFormat; import java.text.ParseE ...

最新文章

  1. c语言程序执行时无法输入字符串,C语言程序设计中键盘输入数据的方法分析
  2. python练习题-day8
  3. 系统接口规范以及常见的接口技术概述和比较
  4. 关于解决 从相册中选择照片后无法剪切图片以及无法加载图片的问题
  5. MySql中的变量定义
  6. 富友支付富掌柜智能收银系统是怎样的一套系统
  7. 基于SSM的房屋出租管理系统设计与实现
  8. yum安装软件报错:Invalid configuration value: failovermethod=priority...
  9. linux转换flv文件格式,在linux 如何播放FLV 和 WMV 格式的文件?
  10. 回顾过去,展望未来 —— web唐和诚
  11. java使用CLE调用python37
  12. 007-Cobbler批量自动化部署Windows10和Server 2019及激活
  13. 适合编程初学者的开源博客系统(Python版)
  14. vcs+verdi简单的仿真
  15. vs2015 无法启动程序 系统找不到指定的文件
  16. IE浏览器兼容性视图设置数据解析
  17. 计算机应用自荐书中专1000,中专生的自荐书
  18. PostMan工具介绍及安装使用
  19. 【vision transformer】DETR原理及代码详解(四)
  20. powerlink(一)——上层协议canopen

热门文章

  1. Access 查询的IIF的写法
  2. python re 中文_python处理中文编码
  3. AS(强直性脊柱炎)完全手册
  4. php面试题目(中等水平)
  5. 企业电子邮箱怎么写?企业邮箱登录入口是什么?
  6. centos7.1与无线网 (芯片rtl8723be)
  7. 深度学习项目,使用python进行表情识别,pytorch应用
  8. springboot过滤器和拦截器使用
  9. HTML5 1.4 列表
  10. 又到年底冲刺时,华为小米竞相降价促销