以前我提出了一个关于将 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 位样本(或任何其他大于一个字节的样本大小),字节顺序很重要;每个样本中的字节以“小端”或“大端”样式排列。
问题:
BigEndian
as true吗?javax.sound.sampled.AudioFormat
我想我得到了由 AudioFormat 对象预先格式化的 BigEndian 数据。