连接两个字节数组并转换为音频流。

3
以下是从两个音频输入流中读取音频数据到字节数组的代码。
import javax.sound.sampled.*;
import java.io.*;

class tester {
 public static void main(String args[]) throws IOException {
 try {
  Clip clip_1 = AudioSystem.getClip();
  AudioInputStream ais_1 = AudioSystem.getAudioInputStream( new File("D:\\UnderTest\\wavtester_1.wav") );
  clip_1.open( ais_1 );

  Clip clip_2 = AudioSystem.getClip();
  AudioInputStream ais_2 = AudioSystem.getAudioInputStream( new File( "D:\\UnderTest\\wavtester_2.wav") );
  clip_2.open( ais_2 );

  byte arr_1[] = new byte[ais_1.available()]; // not the right way ?
  byte arr_2[] = new byte[ais_2.available()];
  ais_1.read( arr_1 );
  ais_2.read( arr_2 );


} catch( Exception exc ) {
  System.out.println( exc );
 }
}

从上面的代码中,我有两个字节数组array1,array2对应着ais_1,ais_2。有没有办法将这两个字节数组(arr_1,arr_2)连接起来,然后将它们转换回音频流?我想要连接两个音频文件。


1
我将这个作为注释,因为它不是一个完整的答案:我认为.available()不一定会返回流中可用的总字节数。相反,应该使用ais_1.frameLength * ais_1.frameSize - MusiGenesis
1个回答

3

如果你已经有了这两个byte数组(见我的注释),你可以将它们连接成第三个数组,如下所示:

byte[] arr_combined = new byte[arr_1.length + arr_2.length];
System.arraycopy(arr_1, 0, arr_combined, 0, arr_1.length);
System.arraycopy(arr_2, 0, arr_combined, arr_1.length, arr_2.length);

很抱歉,这个数组只是样本数据,并不是完整的答案 - 您仍需要编写标题,然后是数据。我没有看到使用AudioSystem api完成此操作的方法。

编辑:尝试这个:

从Java中连接两个WAV文件?


如果没有办法从字节数组中获取音频(应该有的话),那么我怎么才能将两个音频文件连接起来呢? - Suhail Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接