好吧,不能拿出一个好主题。通过此代码更改音频采样率当前更改位深度?
重点是,我有一个代码,我得到了帮助,将位深度从32位改为16位,不知道它是如何工作的,但我认为它只是删除了其他所有位,没有任何幻想。
所以如果可以用代码来做到这一点,应该可以改变采样率。 另外我不想在这里看到什么奇怪的东西,因为它更多的是用于调试,我只是想把它变成一些其他的采样率,它不一定是“重采样”。
例如,如果音频是48khz,并且在播放到47khz时重新采样它,它听起来不会像它仍然认为它是48khz一样,这意味着它会播放得更慢。
换句话说,我打算用它来以非常简单的方式改变音频的速度。
这是更改位深度的代码,我希望可以对此重用。
Int32 bytesrecorded = e.BytesRecorded;
byte[] newArray16Bit = new byte[bytesrecorded/2];
fixed (byte* sourcePtr = e.Buffer)
fixed (byte* targetPtr = newArray16Bit)
{
float* sourceTyped = (float*)sourcePtr;
short* targetTyped = (short*)targetPtr;
Int32 count = bytesrecorded/4;
for (int i = 0; i < count; i++)
{
targetTyped[i] = (Int16)(sourceTyped[i] * Int16.MaxValue);
}
}
e.Bytesrecorded
=音频缓冲区的大小,
e.Buffer
=实际缓冲
正如我不完全理解这一点,我只是看一下/ 2,并假设它只是分歧长度的大小,那么/ 4部分将移动字节,使其适合。
虽然我不知道如何使用它来改变采样率,因为这只是字节的移动,它不应该很难为采样率做些什么。
感谢
更改位深和采样率是完全不同的过程。此代码不会帮助你。 –
好的,很高兴知道这一点。 不存在类似的方法吗? 正如我只是想减少采样率,这将意味着,以某种方式删除一些字节。 – Zerowalker
不,你不只是删除字节。我在这个问题的答案中详细讨论了两个:http://stackoverflow.com/questions/15087668/how-to-convert-pcm-samples-in-byte-array-as-floating-point-numbers-in范围 –