gpt4 book ai didi

java - 将带有样本的数组转换为字节数组

转载 作者:行者123 更新时间:2023-12-01 15:44:25 24 4
gpt4 key购买 nike

我有二维整数数组。第一个索引表示 channel 数。第二个表示 channel 中的样本数。如何将该数组保存到音频文件中?我知道,我必须将其转换为字节数组,但我不知道该怎么做。

//编辑

更多信息。我已经有一门用于绘制波形的类(class)。它在这里:

http://javafaq.nu/java-example-code-716.html

现在我想剪切该波形的一部分并将其保存到新文件中。所以我必须剪切int[][]samplesContainer的一部分,将其转换为字节数组(我不知道如何),然后将其保存到与audioInputStream格式相同的文件中。

//编辑

好的。所以最大的问题是向这个写逆函数:

protected int[][] getSampleArray(byte[] eightBitByteArray) {
int[][] toReturn = new int[getNumberOfChannels()][eightBitByteArray.length / (2 * getNumberOfChannels())];
int index = 0;
//loop through the byte[]
for (int t = 0; t < eightBitByteArray.length;) {
//for each iteration, loop through the channels
for (int a = 0; a < getNumberOfChannels(); a++) {
//do the byte to sample conversion
//see AmplitudeEditor for more info
int low = (int) eightBitByteArray[t];
t++;
int high = (int) eightBitByteArray[t];
t++;
int sample = (high << 8) + (low & 0x00ff);

if (sample < sampleMin) {
sampleMin = sample;
} else if (sample > sampleMax) {
sampleMax = sample;
}
//set the value.
toReturn[a][index] = sample;
}
index++;
}
return toReturn;
}

我不明白为什么 t 在 high 之后有第二次增量。我也不知道如何从样本中获得高点和低点。

最佳答案

您发布的代码将示例流逐字节读取到示例数组中。该代码假设在流中,每两个 8 位字节形成一个 16 位样本,并且每个 NumOfChannels channel 都有一个样本。

因此,给定一组样本(例如该代码返回的样本),

   int[][] samples; 

和一个用于流式传输的字节数组,

   byte[] stream;

你可以用这种方式构建相反的字节流

  for (int i=0; i<NumOfSamples; i++) {
for (int j=0; j<NumOfChannels; j++) {
int sample=samples[i][j];
byte low = (byte) (sample & 0xff) ;
byte high = (byte) ((sample & 0xff00 ) >> 8);
stream[((i*NumOfChannels)+j)*2] = low;
stream[(((i*NumOfChannels)+j)*2)+1] = high;
}
}

关于java - 将带有样本的数组转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7380112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com