Как создать данные пика MP3 с помощью NAudio for Wavesurfer. js? - PullRequest
0 голосов
/ 25 января 2020

Я хотел бы сгенерировать серверную часть данных о пиках MP3 (PCM) с помощью NAudio и сохранить данные в базе данных, чтобы их можно было использовать на стороне клиента в Wavesurfer. js. К сожалению, я просто не понимаю звуковую логику / логи c. Это то, что я пробовал до сих пор (в консольном приложении):

List<float> maxes = new List<float>();

using (var reader = new AudioFileReader(fileLocation))
{
    var samples = reader.Length / (reader.WaveFormat.Channels * reader.WaveFormat.BitsPerSample / 8);

    var max = 0.0f;
    // waveform will be a maximum of 800 pixels wide:
    var batch = (int)Math.Max(40, samples / 800);

    float[] buffer = new float[batch];
    int read;


    while ((read = reader.Read(buffer, 0, batch)) == batch)
    {
        for (int n = 0; n < read; n++)
        {
            max = Math.Max(Math.Abs(buffer[n]), max);
        };

        Console.Write(max);//peak ex: 0.342424, this can be store in array or .peak file 
        Console.Write(',');
        maxes.Add(max);
        max = 0;

    }
}

var result = SongService.SavePCM(song.SongId, maxes).Result;

Это работает, за исключением того, что у меня окно Wavesurfer установлено на 650px X 150px, а сгенерированные волны отображаются на go за пределами этого по вертикали. Как я могу убедиться, что пики остаются в пределах желаемой высоты и не становятся огромными? Источник

...