- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在处理过程中通过光线追踪对可听度进行编程。要根据光线追踪器中的信息编辑样本,我需要将 .wav 文件(文件格式:PCM 签名、16 位、立体声、2 字节/帧、小端)转换为 float 组。
我通过audioInputStream 和DataInputStream 转换了音频,并将音频加载到字节数组中。
然后我将字节数组转换为 float 组,如下所示。
byte[] samples;
float[] audio_data = float(samples);
当我将 float 组转换回 .wav 文件时,我得到了原始音频文件的声音。
但是当我向原始信号添加另一个 float 组并将其转换回 a.通过上述方法(即使我添加相同的信号)生成.wav文件,我得到一个白噪声信号而不是想要的信号(我可以听到白噪声调制下的原始信号,但非常非常安静)。
我之前读到过这个问题,从 float 组到字节数组的转换可能会出现问题。这是因为 float 是 32 位数据类型,而 byte(在 java 中)只有 16 位,不知何故,字节错误地混合在一起,所以结果是白噪声。在处理中,有一种带符号 16 位整数的数据类型(名为:“short”),但我无法再修改幅度,因为因此我需要浮点值,而我无法将其转换为短值。
我还尝试通过将信号从 16 位值 (-32768/32767) 调制到 -1/1 的值并在混合(添加)信号后再次返回来处理 float 组中的溢出(幅度)。结果给了我白噪音。当我添加超过 2 个信号时,它没有给我任何结果(什么也听不到)。
我想要解决的具体问题是以 float 组的形式添加许多信号(超过 1000 个,具有适当的延迟以创建一种混响)。然后我想将它们组合成一个 float 组,我想将其保存为没有白噪声的音频文件。
希望大家能够帮助我。
最佳答案
如果您有真正的 PCM 数据点,使用简单的加法应该没有问题。唯一的问题是,在极少数情况下(假设您的音频一开始不是太热)这些值会超出范围。这往往会产生刺耳的失真,而不是白噪声。您收到白噪声的事实表明,您可能没有将 PCM 总和正确地转换回您输出格式的字节。
这是我在 AudioCue 中使用的一些代码将 PCM 转换回字节。假定格式为 16 位、44100 fps、立体声、小端。我正在使用 PCM 作为标准化 float 。该算法一次对缓冲区的数据进行转换。
for (int i = 0, n = buffer.length; i < n; i++)
{
buffer[i] *= 32767;
audioBytes[i*2] = (byte) buffer[i];
audioBytes[i*2 + 1] = (byte)((int)buffer[i] >> 8 );
}
有时,像 Math.min(Math.max(audioval, -1), 1) 或 Math.min(Math.max(audioval, -32767), 32767) 这样的函数用于将值保持在范围内。更复杂的限制器或压缩器算法将缩放音量以适应。但如果不处理这个问题,结果应该是失真,而不是白噪声。
如果错误发生在其他阶段,我们将需要查看您的更多代码。
说了这么多,祝您在 1000 点回声阵列混响方面好运。我没有听说过这种方法有效。也许现在有处理器可以处理计算负载? (您是否尝试实时执行此操作?)我对实时混响进行编码的唯一成功是使用 Schroeder 方法,插入 CCMRA Freeberb 中的结构和值。 ,使用 Craig Lindley 现已古老(版权所有 2001)的书“Digital Audio with Java”中的代码进行工作。该书的大部分内容涉及过时的 GUI 代码(Swing 之前的版本!),但他为 AllPass 和 Comb 过滤器提供的代码仍然有效。
我记得当我从事这项工作时,我找到了更好的混响引用来尝试和编码,但我必须进行一些真正的挖掘才能尝试找到我的笔记。当时我感到头晕目眩,因为算法是通过框图呈现的,没有编码细节,甚至没有伪代码。不过我想再次研究这个问题,并获得比施罗德类型更好的混响。 Schoeder 对于不太具有冲击力的声音来说还算可以。
获得实时光线追踪解决方案将是一项有值(value)的成就。 AR/VR 和游戏中的许多应用。
关于java - 如何将 .wav 文件转换为 float 组(编辑 float 组,例如添加两个信号)并返回到 .wav 文件而不使用白噪声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56207937/
我最后一次使用C++是在它无法被管理之前。不过最近,我从 Java 回来,看到现在可以管理 C++ 了! 没过多久我就意识到gcnew 和^ 的用途。但是,我对容器有点卡住了。 如何创建一个容器,其元
我离开 Microsoft 堆栈已有一段时间了,专注于 Linux、开源内容和 PHP 中的 Web 开发。我曾经在 Dev Studio(所有 C 和 C++)中在 Windows 上进行一些桌面应
在我的程序中有两个 View Controller 。第一个有表格 View 。当我单击一个单元格时,相关的炎症会显示在第二个 View Controller 中。它运作良好。 当我返回到第一个 Vi
我使用 AVAssetWriter 和 CMSampleBuffer 数据(来自视频、音频输入)录制视频(.mp4 文件)。 在录制时我想处理帧,我正在将 CMSampleBuffer 转换为 CII
在 python 中有两种不同的离开循环的选项。 continue 将您带回到循环的开头,break 就像一个电灯开关,它会在脚本运行的剩余时间内切断循环。我的问题是我有一个 while True 循
我是 Git 的新手,我正试图恢复到 SourceTree 中的先前提交。我右键单击要还原到的提交,然后单击 checkout 。它给了我一个提示,说我的工作副本将成为一个独立的头。这是什么意思,这是
所以我决定在离开几年后,为了我的一些个人项目重新使用 Ruby on Rails。我想知道的是,找出 Rails 中的新功能的最佳资源是什么?自从 1.2 是新的以来,我什至没有真正接触过 Rails
我的项目有两个部分。第一部分是在 Storyboard中制作的,第二部分是 SKView。如何从 SKView 中的第二部分返回到主 UIView? 最佳答案 创建自定义 ViewController
所以我在大约四次提交前对我的项目做了一个糟糕的改变。我了解到我可以恢复到之前描述的状态 here ,并通过依次检查以前的提交(并在我的设备上测试它们),我已经确定了问题发生的位置。 现在我想回到坏改变
我想知道,在 Canvas 的 commandAction 方法中,如何让我的命令按钮回到 MIDlet 的开始? (基本上重新开始)。 当按键触发时,我将它带到一个新的列表页面。在该页面上,我有一个
我想知道是否可以使用 intro.js 返回到下一行。我尝试了\n 和其他类似的东西,但它们中的任何一个都有效并且不可能在文档中找到类似的东西。有谁知道这是否可能? 最佳答案 正确的做法是像这样使用
这是关于我发现我的应用程序面临的一个反复出现的问题,它与使用几个 DialogFragment 相关。我主要针对平台级别 8 设备,因此要使用 DialogFragments,我必须使用兼容性库。 每
我有一个 uiview 的问题,它放置在 Storyboard的一个位置,在应用程序启动后,我将 uiview 移动到第二个位置,并使用代码中的按钮进行动画处理。 int alpha = -212;
我有 Controller B,它使用委托(delegate)模式将数据发送回 Controller A,但由于某种原因我的 segue 没有触发。 是否有什么东西阻止我的 segue 被触发?我将如
我已经找到了处理除我需要的之外的所有内容的解决方案。这是场景 就像在 GMail 中一样 - 主要内容呈现在 iframe 中。单击主页上的链接会指向 iframe。这效果很好,而且无缝。此时,如果我
我有一个 RCP 程序,带有需要登录的启动屏幕。 我想制作一个注销按钮。通过单击此按钮,用户应该返回到初始屏幕,因此他必须重新登录.. 这可能吗? 提前致谢。 最佳答案 如果您使用org.eclips
我有一个数据框: df = pd.DataFrame({'Section': [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 6],
是否可以将元素 $("p") 返回到应用 mouseenter() 方法之前的确切颜色?或者我是否需要知道 mouseenter() 之前的颜色,然后使用 mouseleave() 应用该颜色?我希望
在 Matlab R2016b 中,显示某些数据类型的变量会显示有关该类型的信息。当通过不带最终分号键入变量来显示变量时会发生这种情况(使用 disp 函数时不会发生这种情况)。 比较例如: Matl
是否可以告诉 RSpec::Mocks 为一组值 stub 一个方法,否则回退到原始方法?例如: File.stub(:exist?).with(/txt/).and_return(true) Fil
我是一名优秀的程序员,十分优秀!