将24位音频的样本转换为int32 [英] Converting samples of 24 bit audio to int32

查看:272
本文介绍了将24位音频的样本转换为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆