【问题标题】:concatenate 2 byte arrays and then convert to an audio stream连接 2 字节数组,然后转换为音频流
【发布时间】:2011-09-14 18:43:54
【问题描述】:

以下是从2audio input streams读取音频数据到字节数组中的代码。

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 。有什么方法可以连接这些 2 字节数组(arr_1,arr_2),然后将它们转换回音频流?我想连接 2 个音频文件。

【问题讨论】:

  • 我发表评论是因为它不是一个完整的答案:我认为.available() 不一定会返回流中可用的字节总数。使用 ais_1.frameLength * ais_1.frameSize 应该可以代替。

标签: java audio bytearray javasound


【解决方案1】:

一旦你有了两个字节数组(见我的评论),你可以像这样将它们连接成第三个数组:

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 的方法。

编辑:试试这个:

Join two WAV files from Java?

【讨论】:

  • 如果没有办法从字节数组中取回音频(应该有),那么如何连接两个音频文件?
猜你喜欢
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 2010-11-05
  • 2019-12-27
  • 1970-01-01
  • 2013-05-04
  • 2016-04-27
相关资源
最近更新 更多