将24位音频的样本转换为int32 [英] Converting samples of 24 bit audio to int32
问题描述
嘿伙计们,
我有点潜入音频。 我有一个故障但会播放的采样器。 今晚的焦点是我永远无法弄清楚为什么我在24
位样本中具有比16位更高的白噪声增益而具有显着更低的输出。 这些是针对2种费率转换的2个剪辑。 我成功地使用了waveout结构(我认为)。
I am diving back into audio a bit. I have a sampler that is glitch but will play. The focus tonight is that I never could figure out why I have a significant lower output with a higher gain of white noise in a 24 bit sample than a 16 bit. These are 2 snips of the bit converting for the 2 rates. I am successfully using the waveout structures (I think).
' 16 bit '
' buffer array is the file written into an array '
Dim adjustBufferVolumesFinal() As Byte
For i = 0 to Size Step 4
sample = BitConverter.ToInt16(BufferArray, i)
sample2 = BitConverter.ToInt16(BufferArray, i + 2)
sampleVolume = BitConverter.GetBytes(sample)
sampleVolume2 = BitConverter.GetBytes(sample2)
adjustBufferVolumes(B)= sampleVolume(0)
adjustBufferVolumes(B + 1)= sampleVolume(1)
adjustBufferVolumes(B + 2)= sampleVolume2(0)
adjustBufferVolumes(B + 3)= sampleVolume2(1)
B + = 4
下一个
'2 4位'
'bufferarray是写入数组的整个文件'
sampleVolume = BitConverter.GetBytes(sample) sampleVolume2 = BitConverter.GetBytes(sample2) adjustBufferVolumes(B) = sampleVolume(0) adjustBufferVolumes(B + 1) = sampleVolume(1) adjustBufferVolumes(B + 2) = sampleVolume2(0) adjustBufferVolumes(B + 3) = sampleVolume2(1) B += 4 Next ' 24 bit ' ' bufferarray is the entire file that is written to an array '
For i = 0到大小步骤6
samplew =(BitConverter.ToInt32(New Byte(){0,BufferArray(i + 2),BufferArray(i + 1),BufferArray(i )},0)>> 8)
sample2w =(BitConverter.ToInt32(New Byte(){0,BufferArray(i + 5),BufferArray(i + 4),BufferArray(i + 3)},0)>> 8)
sampleVolume = BitConverter.GetBytes(samplew<< 8)
sampleVolume2 = BitConverter.GetBytes(sample2w<< 8)
adjustBufferVolumes(B)= sampleVolume(1)
adjustBufferVolumes(B + 1)= sampleVolume(2)
adjustBufferVolumes(B + 2)= sampleVolume(3)
adjustBufferVolumes(B + 3)= sampleVolume2(1)
adjustBufferVolumes(B + 4)= sampleVolume2(2)
adjustBufferVolumes(B + 5)= sampleVolume2(3)
B + = 6
下一个
adjustBufferVolumesFinal = adjustBufferVolumes
For i = 0 to Size Step 6 samplew = (BitConverter.ToInt32(New Byte() {0, BufferArray(i + 2), BufferArray(i + 1), BufferArray(i)}, 0) >> 8) sample2w = (BitConverter.ToInt32(New Byte() {0, BufferArray(i + 5), BufferArray(i + 4), BufferArray(i + 3)}, 0) >> 8) sampleVolume = BitConverter.GetBytes(samplew << 8) sampleVolume2 = BitConverter.GetBytes(sample2w << 8) adjustBufferVolumes(B) = sampleVolume(1) adjustBufferVolumes(B + 1) = sampleVolume(2) adjustBufferVolumes(B + 2) = sampleVolume(3) adjustBufferVolumes(B + 3) = sampleVolume2(1) adjustBufferVolumes(B + 4) = sampleVolume2(2) adjustBufferVolumes(B + 5) = sampleVolume2(3) B += 6 Next adjustBufferVolumesFinal = adjustBufferVolumes
它适用于24位。 但是,产生的噪音是不正确的,输出的音量也是不正确的(太低)
It works at 24 bit. But, the noise generated is incorrect and the volume of the output is incorrect, too (too low)
推荐答案
似乎第一个片段只是将
BufferArray 中的字节复制到 adjustBufferVolumes 。
It seems that the first fragment simply copies bytes from BufferArray to adjustBufferVolumes.
在第二种情况下,您可能应该更改订单:
samplew = (BitConverter.ToInt32(New Byte() {0, BufferArray(i), BufferArray(i + 1), BufferArray(i + 2)}, 0) >> 8)
sample2w = (BitConverter.ToInt32(New Byte() {0, BufferArray(i + 3), BufferArray(i + 4), BufferArray(i + 5)}, 0) >> 8)
< span lang ="EN-GB">
但现在它只是从 BufferArray 复制到 adjustBufferVolumes 。如果您想要特定的转换,请提供详细信息。
But now it simply copies from BufferArray to adjustBufferVolumes. If you want a specific transformation, then give details.
这篇关于将24位音频的样本转换为int32的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!