[英]Filtering and Distorting Audio stored in byte array Java
我还没有开始编写一个部分,但想知道是否有人事先了解这个解决方案/有任何对其有用的资源。
我正在尝试在已经记录的 44.1 Khz PCM 16 位(小端)音频数据的字节数组上模拟磁带饱和度(我有一个已经准备好的录音类并且正在运行)。 我想扭曲和过滤数据字节以模拟磁带的声音。
理论上,我认为我们需要对失真使用对称软剪辑(我已经查看了本教科书第 118 页上的数字音频 FX 示例,我只是不知道如何实现它: https ://books.google.it/books?id=h90HIV0uwVsC&printsec=frontcover&hl=en#v=onepage&q&f=false )然后用低通滤波器过滤整个信号?
我真的不确定从哪里开始,但是如果您知道任何可以映射到函数中的解决方案,我将非常感激。
需要的元素:
AudioInputStream
,如果数据未保存在内存数组中)SourceDataLine
输出我不知道最适合您的失真算法是什么。 DSP相关的免费书籍物理音频信号处理中有许多建议。 我记得斯坦福大学的CCRMA也有一些关于此的有趣文章,但我手边没有链接。
我个人最喜欢的失真是tanh
函数。 我用于合成补丁的 Java 代码如下:
float distortVal = (float)Math.tanh(noteVal * (1 + timbreNormal * 5));
在这种情况下, noteVal
是单个 PCM 值。 我有一个范围从 0 到 1 的变量timbreNormal
,并且正在从相当于脚踏板控制器的地方读取它。 “幻数”反模式值 5 是我懒惰输入的常数。它决定了在应用失真算法之前放大信号的最大量。 无论您使用何种失真算法,失真的强度都取决于您在应用算法之前放大信号的程度。 如果您想要更微妙的效果,可以将“幻数”值设置得更低。
过采样对过滤步骤有很大帮助。 我过采样了 8,并使用了一个两极巴特沃斯滤波器。 我必须进行一些重要的挖掘才能找到滤波器设计中使用的值。 但我认为您可以从这个答案中了解程序流程的要点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.