通过当前更改位深度的代码更改音频采样率

  • 本文关键字:代码 音频 采样率 深度 c# audio
  • 更新时间 :
  • 英文 :


Okay没有想出一个好的话题。

重点是,我有一个代码,我得到了帮助,它将比特深度从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部分将移动字节以使其适合。

虽然我不知道如何使用它来改变采样率,因为这只是字节的移动,所以为采样率做点什么应该并不难。

感谢

如果你想调整速度,有几个可能的解决方案:

  1. 使用重采样器对曲目进行重采样,例如从44100Hz到50000Hz,但仍然告诉音频驱动程序以44100Hz播放
  2. 只需更改文件的采样率,但不更改文件例如,修改波头并更改采样率。音频播放器将读取波形头的采样率以60000Hz的采样率播放44100Hz的曲目
  3. 使用专业的dsp算法来调整速度

相关内容

最新更新