Измените Audio Samplerate через этот код, который в настоящее время изменяет битовую глубину
Ладно, не могу придумать хорошую тему.
Дело в том, что у меня есть код, который мне помог, который изменяет битовую глубину с 32 бит на 16 бит, не уверен, как это работает, но я думаю, что он просто просто удаляет все остальные биты, ничего особенного.
Поэтому, если это возможно сделать с помощью кода, можно изменить частоту дискретизации. Кроме того, я не хочу, чтобы здесь было что-то причудливое, так как это больше предназначено для отладки, я просто хочу превратить его в какую-то другую частоту дискретизации, это не должно быть "повторной выборкой".
Имеется в виду, например, что если звук 48 кГц, и я ресэмплирую его, пока он воспроизводит 47 кГц, он не будет звучать так же, как и до 48 кГц, то есть он будет воспроизводиться медленнее.
Другими словами, я собираюсь использовать его для очень простого изменения скорости звука.
Вот код для изменения битовой глубины, который, я надеюсь, может быть использован для этого.
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 ответ
Если вы хотите отрегулировать скорость, есть несколько возможных решений:
- Используйте ресэмплер, чтобы повторно сэмплировать вашу дорожку, например, с 44100 Гц до 50000 Гц, но при этом попросите звуковой драйвер воспроизвести его с частотой 44100 Гц.
- Просто измените частоту дискретизации файла, но не содержимое файла. Например, измените заголовок волны и измените частоту дискретизации. Аудиоплееры будут считывать частоту дискретизации заголовка волны и воспроизводить вашу дорожку 44100 Гц с частотой дискретизации, например, 60000 Гц.
- Используйте профессиональный алгоритм DSP для регулировки скорости.