java - 将 2 个 wav 文件合并为一首同步歌曲
问题描述
我有一个程序可以在播放音乐时记录来自麦克风的输入。完成后,声音将保存为 wav 文件。我想将该 wav 文件与录制期间播放的 wav 文件歌曲结合起来。示例:song1.wav 在人唱歌时在背景中播放。那个人唱歌的录音现在是recording1.wav。我想将song1.wav和recording1.wav结合起来同时播放,成为一首歌曲录制finalsong1.wav。我是 Java 的初学者,还没有找到解决方案,甚至还没有找到如何连接它们的起点,这与我想做的相反。
解决方案
我将列出所涉及的步骤。这些步骤已被多次介绍,应该很容易研究。
对于两个 wav 文件,使用
AudioInputStream
.当数据到达时,将字节转换为有符号的 PCM。如果格式是 16 位,则 PCM 可以是有符号的短裤,或缩放/标准化为范围从 -1 到 1 的浮点数。
使用加法来组合相应的数据(例如,第一帧右声道语音和第一帧音乐右声道)。如果信号太“热”,可能需要强制执行 min 和 max 函数以防止数据超出范围的界限,因为当它发生时这听起来真的很糟糕。
根据音频格式将求和、签名的 PCM 数据转换回字节。
写入
wav
文件。
我知道可以混合曲目进行播放的工具,但我不记得有一种工具会自动将结果保存到wav
. 一个可能存在于某个地方,或者应该很容易编写或委托。
推荐阅读
- firebase - Firebase 服务“错误:找不到模块 './src/index'”
- html - 锚链接滚动到溢出隐藏的溢出内容
- javascript - 打开 Chrome 选项卡后,如何将侦听器添加到该选项卡
- java - Java中的生命游戏GUI - 表达式总是错误的
- azure - 在 Azure DevOps 中传递“searchCriteria.refName=master”参数时无法获取推送列表
- angular - 获取双重嵌套表单数组的控件
- excel - Google 表格可以从 Excel 电子表格中检索数据吗?
- powershell - Powershell 参数绑定 ByPropertyName 和 ByValue
- java - 开始拖动时,Libgdx 拖放崩溃
- selenium - Selenium 无法为不同的查找选项找到元素