Java:在X-Y网格上绘制.flac音频文件的左声道和右声道。(示波器)
我试图用Java创建一个X-Y示波器,但我被卡住了。我已经阅读了jFlac的所有文档,我用来解码.flac音频文件的库以及免费的无损音频编解码器文档。我似乎找不到我遇到的问题的答案。请考虑以下事项:Java:在X-Y网格上绘制.flac音频文件的左声道和右声道。(示波器),java,audio,bytearray,oscilloscope,Java,Audio,Bytearray,Oscilloscope,我试图用Java创建一个X-Y示波器,但我被卡住了。我已经阅读了jFlac的所有文档,我用来解码.flac音频文件的库以及免费的无损音频编解码器文档。我似乎找不到我遇到的问题的答案。请考虑以下事项: public void processPCM(ByteData pcm) { byte[] temp = pcm.getData(); line.write(temp, 0, pcm.getLen()); leftAndRight = new int[pcm.getData(
public void processPCM(ByteData pcm) {
byte[] temp = pcm.getData();
line.write(temp, 0, pcm.getLen());
leftAndRight = new int[pcm.getData().length];
for(int i = 0; i < temp.length; i+=2){
leftAndRight[i/2] = (temp[i + 1]<<8) + (temp[i] & 0xff);
}
}
public void processPCM(字节数据pcm){
字节[]温度=pcm.getData();
行写入(temp,0,pcm.getLen());
leftAndRight=newint[pcm.getData().length];
对于(int i=0;igetLen()的值
是其中的有效字节数;由于重复使用相同的ByteData
对象,因此可能会有更多的数据,可能会过度分配以避免重复重新分配,等等
因此,您将需要以下内容:
byte[] data = pcm.getData();
int n_bytes = pcm.getLen();
int n_samples = n_bytes / (n_channels*bytes_per_sample);
int k=0;
for (int i=0; i<n_samples; ++i) {
for (int j=0; j<n_channels; ++j) {
output[j][i] = data[k] + (data[k+1)<<8);
k += 2;
}
}
byte[]data=pcm.getData();
int n_bytes=pcm.getLen();
int n_samples=n_字节/(n_通道*每个_样本的字节);
int k=0;
对于(int i=0;i查看其中的代码,字节数组的内容似乎是:一系列样本,每个样本是:一系列通道,每个通道是:一系列字节,代表一个通道上的一个样本,最低有效字节在前。getLen()的值
是其中的有效字节数;由于重复使用相同的ByteData
对象,因此可能会有更多的数据,可能会过度分配以避免重复重新分配,等等
因此,您将需要以下内容:
byte[] data = pcm.getData();
int n_bytes = pcm.getLen();
int n_samples = n_bytes / (n_channels*bytes_per_sample);
int k=0;
for (int i=0; i<n_samples; ++i) {
for (int j=0; j<n_channels; ++j) {
output[j][i] = data[k] + (data[k+1)<<8);
k += 2;
}
}
byte[]data=pcm.getData();
int n_bytes=pcm.getLen();
int n_samples=n_字节/(n_通道*每个_样本的字节);
int k=0;
对于(int i=0;我感谢你,这非常有用谢谢,这非常有用