gpt4 book ai didi

android - 将短数组从音频记录转换为字节数组,而不降低音频质量?

转载 作者:行者123 更新时间:2023-12-03 00:47:38 25 4
gpt4 key购买 nike

我正在使用Android Audio Record类录制音频。录音是PCM 16位的,所以(我听说)最好让Audio Record将数据写入Short数组。但是,对于我要执行的操作,我需要将Short数组转换为字节数组。我尝试了几种方法,但是所有方法都会以不同方式降低音频质量。

我首先尝试:

byte[] bytes2 = new byte[shortsA.length * 2];
ByteBuffer.wrap(bytes2).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().put(shortsA);

但结果是音频非常安静且断断续续。

我尝试的第二种方法是:
byte[] MyShortToByte(short[] buffer) {
int N = buffer.length;
float f[] = new float[N];
float min = 0.0f;
float max = 0.0f;
for (int i=0; i<N; i++) {
f[i] = (float)(buffer[i]);
if (f[i] > max) max = f[i];
if (f[i] < min) min = f[i];
}
float scaling = 1.0f+(max-min)/256.0f; // +1 ensures we stay within range and guarantee no divide by zero if sequence is pure silence ...

ByteBuffer byteBuf = ByteBuffer.allocate(N);
for (int i=0; i<N; i++) {
byte b = (byte)(f[i]/scaling); /*convert to byte. */
byteBuf.put(b);
}
return byteBuf.array();
}

来自 https://stackoverflow.com/a/15188181/902631,但结果加快了音调,提高了音调,就像原始音频以2倍的速度快进一样。但是音量比第一个高,并且不断断续续。

是否可以使用任何外部库或任何不降低音频质量的音频特定转换方法?

任何帮助,将不胜感激!

最佳答案

为什么不尝试这样做,当从AudioRecord对象读取数据时,将其读入byte []数组而不是短数组

audioRecord.startRecording();
byte[] buffer = new byte[_bufferSize]; //recorded data is stored in this byte array
audioRecord.read(buffer, 0, _bufferSize);

关于android - 将短数组从音频记录转换为字节数组,而不降低音频质量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24666961/

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