Java 我这样做对吗?
Java 我这样做对吗?,java,audio,byte,bytebuffer,short,Java,Audio,Byte,Bytebuffer,Short,在我请求帮助之前,让我告诉你我做了什么: 假设采样率为8000Hz且采样大小为16位(2字节),则在第二秒结束时,我需要16000字节或8000字节短。 现在我有一个10fps的记录速度,那么对于每一个fps,我需要16000/10=1600字节。 下面是故事的发展过程: 声明的变量: 循环和字节[]到短[]的后续转换 问题 即使buffer.position()在if语句中返回16000,当我执行buffer.asShortBuffer.get(audioSamples)时,我会得到一个Buf
在我请求帮助之前,让我告诉你我做了什么: 假设采样率为8000Hz且采样大小为16位(2字节),则在第二秒结束时,我需要16000字节或8000字节短。
现在我有一个10fps的记录速度,那么对于每一个fps,我需要16000/10=1600字节。
下面是故事的发展过程: 声明的变量: 循环和字节[]到短[]的后续转换 问题
buffer.position()
在if
语句中返回16000,当我执行buffer.asShortBuffer.get(audioSamples)时,我会得到一个BufferUnderflowException
代码>
java.util.Arrays.toString()
查看我的eachPass
和audioSamples
包含的内容,我在每个pass中得到了一些数字,如-107、0、32等,在audioSamples中得到了全零。为什么?李>
老兵们,你们能帮我搞定这个密码吗?我不知道发生了什么事 您在读取数据之前忘记了缓冲区,这就是为什么在音频样本中没有写入任何内容的原因
buffer.flip();
buffer.asShortBuffer.get(audioSamples);
while(keepCapturing == true){
-- set up the java.awt.Robot and TargetDataLine before entering the loop --
-- use java.awt.Robot to record the screen --
-- do some other stuff, if needed --
fromMic.read(eachPass,0,eachPass.length); // read data from microphone
buffer.put(eachPass); //put it in a bigger buffer
if(passCounter!=0 && passCounter%10==0){ // is it 10th frame?
passCounter = 0; //reset counter
seconds++;
buffer.asShortBuffer.get(audioSamples); //get short[] in BigEndian format
-- encode the audio at position (seconds-1) --
buffer.clear();
}else{
passCounter++;
}
buffer.flip();
buffer.asShortBuffer.get(audioSamples);