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部分将移动字节以使其适合。
虽然我不知道如何使用它来改变采样率,因为这只是字节的移动,所以为采样率做点什么应该并不难。
感谢
如果你想调整速度,有几个可能的解决方案:
- 使用重采样器对曲目进行重采样,例如从44100Hz到50000Hz,但仍然告诉音频驱动程序以44100Hz播放
- 只需更改文件的采样率,但不更改文件例如,修改波头并更改采样率。音频播放器将读取波形头的采样率以60000Hz的采样率播放44100Hz的曲目
- 使用专业的dsp算法来调整速度