我对this方法有疑问。 在下面的代码中,我编写了一个将音频流读取到字节数组中的测试代码(并且是否进行了转换[我将mp3plugin.jar作为外部jar,如果您想知道为什么这样做的话)和其他一些东西,但是我只有让它使代码可执行)。 问题是该方法并非总是可以做相同的事情。有时AudioInputStream会变小,有时却不会。我的问题是为什么?
package doej.test;
import java.io.File;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
public class Test2 {
public static void main(String[] args) {
@SuppressWarnings("unused")
int totalFramesRead = 0;
File fileIn = new File("D:/User/Music/eclipseTestfiles/test.mp3");
try {
AudioInputStream mp3Stream = AudioSystem.getAudioInputStream(fileIn);
AudioFormat sourceFormat = mp3Stream.getFormat();
AudioFormat convertFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, sourceFormat.getSampleRate(), 16, sourceFormat.getChannels(), sourceFormat.getChannels() * 2, sourceFormat.getSampleRate(), false);
AudioInputStream converted = AudioSystem.getAudioInputStream(convertFormat, mp3Stream);
int bytesPerFrame = converted.getFormat().getFrameSize();
int numBytes = 1024 * bytesPerFrame;
byte[] audioBytes = new byte[numBytes];
try {
int numBytesRead = 0;
//My simplified Test part
System.out.println(converted.available());
好,所以这是音频流的原始大小。 (直到这里一切都很好)
System.out.println("read " + converted.read(audioBytes));
System.out.println(converted.available());
为什么我的流变小了? (在文档中,他们说它正在读入数组,所以我有点理解该部分)
System.out.println("read " + converted.read(audioBytes));
System.out.println(converted.available());
为什么 我的Stream 没有变小,如第一次? (因为这是我不知道的部分)
while ((numBytesRead = converted.read(audioBytes)) != -1) {
System.out.println(converted.available());
为什么 流现在每十一次变小 ? (在这里我不再了解世界)
}
//End of my test part
} catch (Exception ex) {
}
System.out.println("finished");
} catch (Exception e) {
e.printStackTrace();
}
}
}
最后这是我得到的输出:
6043688
read 4096
6035592
read 4096
6035592
6035592
6035592
6035592
6035592
6035592
6035592
6035592
6035592
6035592
6029324
6029324
6029324
[...]
4444
4444
4444
0
0
0
0
0
0
0
0
0
0
0
0
finished
感谢您的帮助。
约翰