我找到了一个名为 JVST 的库,它可以加载 VST 文件并相应地过滤音频。问题是,我不知道如何使用它。我所能做的就是从网站上复制并粘贴示例代码并根据我的需要进行调整,但它仍然无法正常工作。我想要做的是扭曲用户选择模拟音箱的 .au 或 .wav 文件中的音频。我不确定多频段压缩是否是最好的使用方法,但我会尝试一下,如果失败,我可以使用大量自定义 VST 插件。无论如何,这是代码:
import sun.audio.*; //import the sun.audio package
import java.awt.*;
import java.io.*;
import org.boris.jvst.*;
@SuppressWarnings("serial")
public class SoundPlayer extends Frame implements FilenameFilter {
Button openButton = new Button("Open");
Button playButton = new Button("Play");
Button loopButton = new Button("Loop");
Button stopButton = new Button("Stop");
Label filename = new Label(" ");
File theFile = null;
@SuppressWarnings({ "restriction" })
AudioData theData = null;
InputStream nowPlaying = null;
@SuppressWarnings({ "deprecation" })
public SoundPlayer() {
super("Boombox");
resize(300, 200);
Panel north = new Panel();
north.setLayout(new FlowLayout(FlowLayout.LEFT));
north.add(new Label("File: "));
north.add("North", filename);
add("North", north);
Panel south = new Panel();
south.add(openButton);
south.add(playButton);
south.add(loopButton);
south.add(stopButton);
add("South", south);
}
@SuppressWarnings("deprecation")
public static void main(String[] args) {
SoundPlayer sp = new SoundPlayer();
sp.show();
}
@SuppressWarnings({ "deprecation", "restriction" })
public void open() {
FileDialog fd = new FileDialog(this, "Please select a .au or .wav file:");
fd.setFilenameFilter(this);
fd.show();
try {
theFile = new File(fd.getDirectory() + "/" + fd.getFile());
if (theFile != null) {
filename.setText(theFile.getName());
FileInputStream fis = new FileInputStream(theFile);
AudioStream as = new AudioStream(fis);
theData = as.getData();
}
}
catch (IOException e) {
System.err.println(e);
}
}
@SuppressWarnings("restriction")
public void play() {
stop();
if (theData == null) open();
if (theData != null) {
AudioDataStream ads = new AudioDataStream(theData);
AudioPlayer.player.start(ads);
nowPlaying = ads;
}
}
@SuppressWarnings("restriction")
public void stop() {
if (nowPlaying != null) {
AudioPlayer.player.stop(nowPlaying);
nowPlaying = null;
}
}
@SuppressWarnings("restriction")
public void loop() {
stop();
if (theData == null) open();
if (theData != null) {
ContinuousAudioDataStream cads = new ContinuousAudioDataStream(theData);
AudioPlayer.player.start(cads);
nowPlaying = cads;
}
}
public boolean action(Event e, Object what) {
if (e.target == playButton) {
play();
return true;
}
else if (e.target == openButton) {
open();
return true;
}
else if (e.target == loopButton) {
loop();
return true;
}
else if (e.target == stopButton) {
stop();
return true;
}
return false;
}
public boolean accept(File dir, String name) {
name = name.toLowerCase();
if (name.endsWith(".au")) return true;
if (name.endsWith(".wav")) return true;
return false;
public static void main(String[] args); throws Exception {
AEffect a = VST.load("C:/Program Files (x86)/Audacity 1.3 Beta (Unicode)/Plug-Ins/mda MultiBand.dll");
a.open();
a.setSampleRate(44100.0f);
a.setBlockSize(512);
// attempt some processing
int blocksize = 512;
float[][] inputs = new float[a.numInputs][];
for (int i = 0; i < a.numInputs; i++) {
inputs[i] = new float[blocksize];
for (int j = 0; j < blocksize; j++)
inputs[i][j] = (float) Math
.sin(j * Math.PI * 2 * 440 / 44100.0);
}
float[][] outputs = new float[a.numOutputs][];
for (int i = 0; i < a.numOutputs; i++) {
outputs[i] = new float[blocksize];
for (int j = 0; j < blocksize; j++)
outputs[i][j] = 0;
}
a.processReplacing(inputs, outputs, blocksize);
VST.dispose(a);
}
}
}
编辑 它给出的错误是:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
at SoundPlayer.main(SoundPlayer.java:35)