Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java声音实时处理音频和绘制波形_Java_Waveform_Javasound - Fatal编程技术网

使用java声音实时处理音频和绘制波形

使用java声音实时处理音频和绘制波形,java,waveform,javasound,Java,Waveform,Javasound,我目前正在开发一个应用程序,帮助用户调整他的吉他,并生成吉他效果。这是实时的。我一直在寻找java应用程序,这些应用程序可以提供生成诸如overdrive和delay等吉他效果的想法,但我找不到任何应用程序。此外,还需要一个实时创建波形的源。您的评论将非常有帮助,提前谢谢。首先,忘记Java。Java是一个进行垃圾收集的托管运行时。当这种情况发生时,你会听到快门声,因为你想让你的声音缓冲区小,以尽量减少延迟 第二,您将与硬件接口,即声卡,Java不支持这类东西,因此您必须在JNI中编写一些硬件抽

我目前正在开发一个应用程序,帮助用户调整他的吉他,并生成吉他效果。这是实时的。我一直在寻找java应用程序,这些应用程序可以提供生成诸如overdrive和delay等吉他效果的想法,但我找不到任何应用程序。此外,还需要一个实时创建波形的源。您的评论将非常有帮助,提前谢谢。

首先,忘记Java。Java是一个进行垃圾收集的托管运行时。当这种情况发生时,你会听到快门声,因为你想让你的声音缓冲区小,以尽量减少延迟

第二,您将与硬件接口,即声卡,Java不支持这类东西,因此您必须在JNI中编写一些硬件抽象,或者找到一个现有的解决方案,但这有一个问题。您不太可能从Java平台获得实时性能

你想做的是,你想用
C++
来做这件事,你会想学习更多关于偏微分、DSP、声音合成和波形分析的知识。这是相当多的事情要做,但如果你开始阅读相关的研究,它应该会给你一个很好的方向感

说:

首先,忘记Java。。。其次,您将与硬件接口。。。Java不支持这种事情

天哪,这有点苛刻-你应该在Sun发布API之前告诉他们这是不可能的:。在Java中有很多关于声音的工作,我从来没有遇到过延迟或缓冲区的问题,即使是在有些陈旧的硬件上

好例子@

很好的帮助@

。。。话虽如此,John关于学习DSP和波形分析的评论见$$


玩得开心-Dave这个开源项目可能是你的一个很好的参考。有一个函数可以构成波形

关于低延迟声音处理的可行性:看看这篇关于的文章。这是一个完全用java实现的示例播放synth,使用,它在实时操作系统上运行<2毫秒时具有较高的延迟保证


关于wave表单生成/dsp,请查看本问题中的示例,这是一个非常简单的波形生成示例。

我相信,当您使用小型缓冲区时,垃圾收集的影响会显现出来,这是最小化延迟所必需的(约2ms的范围)。虽然我并不是说Java不能播放声音。出于性能原因,您可以使用类似于JNI的东西将本机引擎与用于提高生产率的托管UI框架连接起来。这通常是我在性能至关重要的时候所追求的。我最近遇到了这个小问题,我想与大家分享一下@约翰莱德格林:我经常想,如果流能够跟踪自打开以来的绝对时间量,那么会有帮助,可以指定音频数据流应该替换任何已经缓冲过的数据,从特定的绝对时间开始,语义是如果该时间在过去,将跳过适当数量的新数据,以便在特定时间排队播放的每个样本将替换为打算同时播放的数据。这将允许代码将推测性数据排队……但如果控件被更改,使其过时,则会立即将其替换。知道系统是否会这样做吗?当然,但这取决于数据流的编码方式,PCM很简单,因为寻道时间与采样率、位深度和通道计数呈线性关系。对于其他编码流,我不知道,但通常你有一个比特率的概念,这可能是一个很好的近似值,但不精确,对于精确的寻道时间,你可能会依赖更多关于流如何编码的知识。也许在数据流中有一些标记,你可以跳转到它们,然后从中寻找,这可能是效率和实用性之间的一个很好的折衷