Попытка исказить звук в Java - PullRequest
0 голосов
/ 21 апреля 2011

Я нашел библиотеку под названием JVST, которая может загружать файлы VST и соответствующим образом фильтровать звук.Проблема в том, что я понятия не имею, как его использовать.Все, что я мог сделать, это скопировать и вставить пример кода с веб-сайта и адаптировать его к моим потребностям, но он все еще не работает.Я пытаюсь исказить звук из файла .au или .wav, который пользователь выбирает для имитации boombox.Я не уверен, что лучше использовать многополосное сжатие, но я собираюсь попробовать его, и если оно не сработает, в моем распоряжении будет множество пользовательских 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)

1 Ответ

0 голосов
/ 21 апреля 2011

Я импортировал JAR JAR в мой путь сборки и вуаля! Импорт org.boris.jvst. *; работал

...