以前我提出了一个关于将 a 转换为byte[]的问题,我遇到的一个新问题是将数据从BigEndianshort[]转换/不转换。
这是发生了什么:byte[]
TargetDataLine将数据读入byte[10000].AudioFormat对象已任意BigEndian设置为true。byte[]需要转换为,short[]以便可以使用 Xuggler 对其进行编码我不知道AudioFormat应该将 BigEndian 设置为 true 还是 false。
我已经尝试了这两种情况,并且在这两种情况下都得到了异常。
要转换byte[]为short[],我这样做:
fromMic.read(tempBufferByte, 0, tempBufferByte.length);
for(int i=0;i<tempBufferShort.length;i++){
tempBufferShort[i] = (short) tempBufferByte[i];
}
其中:
fromMic是
我得到 TargetDataLine
tempBufferbyte异常byte[10000]
tempBufferShort:short[10000]
java.lang.RuntimeException: failed to write packet: com.xuggle.xuggler.IPacket@90098448[complete:true;dts:12;pts:12;size:72;key:true;flags:1;stream index:1;duration:1;position:-1;time base:9/125;]
可能需要的其他信息:
writer.addAudioStream(0,1,fmt.getChannels(),(int)fmt.getSampleRate());
writer.encodeAudio(1,tempBufferShort,timeStamp,TimeUnit.NANOSECONDS);
关于音频格式的 Java 文档
...除了编码之外,音频格式还包括其他属性,这些属性进一步指定了数据的确切排列。这些包括通道数、采样率、样本大小、字节顺序、帧速率和帧大小......
和
对于 16 位样本(或任何其他大于一个字节的样本大小),字节顺序很重要;每个样本中的字节以“小端”或“大端”样式排列。
问题:
BigEndianas true吗?javax.sound.sampled.AudioFormat我想我得到了由 AudioFormat 对象预先格式化的 BigEndian 数据。