繁体   English   中英

如何在我自己的程序中使用下载的 Github 库?

[英]How can I use downloaded Github libraries in my own program?

我正在编写一个程序,在给定 .wav 文件时绘制波形,但我希望它也适用于 .mp3。 由于 java.sound 包不支持 .mp3 文件,我找到了一个 github 程序,可以将 mp3 文件转换为 .wav 文件。 我下载了这个项目并得到了这个:

在此处输入图片说明

现在这个项目中有一个我特别感兴趣的类,那就是 WaveConverter 类。 它相当简单,并要求输入 .mp3 文件和您想要将其转换为的输出。 这是它的样子:

package org.mp3transform.wav;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.mp3transform.Bitstream;
import org.mp3transform.Decoder;
import org.mp3transform.Header;

public class WavConverter extends Decoder {
    public static void main(String[] args) throws Exception {
    String in = "test.mp3";
    String out = "out.wav";
    for (int i = 0; i < args.length; i++) {
        if ("-in".equals(args[i])) {
            in = args[++i];
        } else if ("-in".equals(args[i])) {
            out = args[++i];
        } else {
            System.out.println("Options: -in <input.mp3> -out <output.wav>");
        }
    }
    WavConverter.convert(in, out);
}

private static void convert(String sourceFileName, String destFileName)
        throws IOException {
    System.out.println(sourceFileName);
    InputStream fileIn = new FileInputStream(sourceFileName);
    BufferedInputStream in = new BufferedInputStream(fileIn, 128 * 1024);
    convert(in, destFileName);
    in.close();
}

private static void convert(InputStream sourceStream, String destFileName)
        throws IOException {
    int frameCount = Integer.MAX_VALUE;
    WavConverter decoder = new WavConverter();
    Bitstream stream = new Bitstream(sourceStream);
    frameCount = Integer.MAX_VALUE;
    try {
        for (int frame = 0; frame < frameCount; frame++) {
            Header header = stream.readFrame();
            if (header == null) {
                break;
            }
            if (decoder.channels == 0) {
                int channels = (header.mode() == Header.MODE_SINGLE_CHANNEL) ? 1
                        : 2;
                int freq = header.frequency();
                decoder.initOutputBuffer(channels, freq, destFileName);
            }
            decoder.decodeFrame(header, stream);
            stream.closeFrame();
        }
    } finally {
        decoder.close();
    }
}

private short[] buffer;
private WaveFileWriter outWave;

public void initOutputBuffer(int numberOfChannels, int freq, String fileName)
        throws IOException {
    super.initOutputBuffer(null, numberOfChannels);
    buffer = new short[BUFFER_SIZE];
    for (int i = 0; i < numberOfChannels; ++i) {
        bufferPointer[i] = (short) i;
    }
    outWave = new WaveFileWriter(fileName, freq, (short) 16,
            (short) numberOfChannels);
}

public void appendSamples(int channel, double[] f) {
    int p = bufferPointer[channel];
    for (int i = 0; i < 32; i++) {
        double sample = f[i];
        short s = ((sample > 32767.0f) ? 32767
                : ((sample < -32768.0f) ? -32768 : (short) sample));
        buffer[p] = s;
        p += 2;
    }
    bufferPointer[channel] = p;
}    

public void writeBuffer() throws IOException {
    outWave.writeData(buffer, bufferPointer[0]);
    for (int i = 0; i < channels; ++i) {
        bufferPointer[i] = i;
    }
 }

 public void close() throws IOException {
    outWave.close();
 }
}

但是我的问题是我不断收到第 50 行的 FileNotFoundException,这是以下代码行:

InputStream fileIn = new FileInputStream(sourceFileName);

出于某种原因,程序无法找到我的 test.mp3 文件,即使您从这张图片中看到,它显然在同一目录中:

在此处输入图片说明

为什么会这样? 有没有更好的方法来使用 github 项目中的类? 我真的很困惑,希望得到帮助。 谢谢。

路径test.mp3是相对于您运行程序的目录的路径。

2种方法来解决您的问题:

  • WavConverter.java您定义 mp3 文件的完整路径: C: \\ .. \\ .. \\ ..... \\ test.mp3
  • 您定义 WavConverter 的类路径。 这是一个例子

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM