我正在尝试在Java程序中播放数组。
到目前为止,我已经可以使用以下代码播放字节数组:
AudioFormat audioFormat = new AudioFormat(samplingFreq, bps, 1, true, true);
SourceDataLine sdline = AudioSystem.getSourceDataLine(audioFormat);
line.open(audioFormat);
sdline.start();
sdline.write(playArray, 0, playArray.length);
sdline.drain();
sdline.close();
但是,由于write方法仅接受字节数组作为参数,因此我只能播放字节数组。我希望每个样本数组也能播放16/32位。
是否有任何方法可以使用AudioSystem(或任何其他类)播放整数数组,甚至可以播放 double 数组。
最佳答案
借助@ greg-449的评论,我得以解决该问题。要每秒播放更高的位,您只需要增加bps参数并一个接一个地发送字节即可。
例如,如果要发送1867作为样本,则需要16位,如下所示:
0000 0111 0100 1011
前8位是十进制的7,后八位是十进制的75,因此,由于我们使用的是big endian(AudioFormat参数的最后一个参数),因此字节数组的第一个元素应为7,第二个元素应为是75。因此对于16位,每个样本我们只需要两个字节。
关于java - 在Java中播放整数/双数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23857683/