Измените 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 ответ

Если вы хотите отрегулировать скорость, есть несколько возможных решений:

  1. Используйте ресэмплер, чтобы повторно сэмплировать вашу дорожку, например, с 44100 Гц до 50000 Гц, но при этом попросите звуковой драйвер воспроизвести его с частотой 44100 Гц.
  2. Просто измените частоту дискретизации файла, но не содержимое файла. Например, измените заголовок волны и измените частоту дискретизации. Аудиоплееры будут считывать частоту дискретизации заголовка волны и воспроизводить вашу дорожку 44100 Гц с частотой дискретизации, например, 60000 Гц.
  3. Используйте профессиональный алгоритм DSP для регулировки скорости.
Другие вопросы по тегам