Я хотел бы сгенерировать серверную часть данных о пиках 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 за пределами этого по вертикали. Как я могу убедиться, что пики остаются в пределах желаемой высоты и не становятся огромными? Источник