Я совершенно новичок в работе со звуком.В конце концов я хочу транслировать MP3 на веб-страницу и позволить пользователю изменять темп.Я настроил звуковой элемент HTML5, и он может нормально воспроизводить MP3.Я могу импортировать MP3 в NAudio.AudioFileReader
и транслировать его на страницу, и это также отлично работает, используя следующий код:
string fn = Server.MapPath("~/Uploads/Music/" + filename);
AudioFileReader reader = new AudioFileReader(fn);
MemoryStream outputStream = new MemoryStream();
using (NAudio.Wave.WaveFileWriter waveFileWriter = new WaveFileWriter(outputStream, reader.WaveFormat))
{
byte[] bytes = new byte[reader.Length];
reader.Position = 0;
reader.Read(bytes, 0, (int)reader.Length);
waveFileWriter.Write(bytes, 0, bytes.Length);
waveFileWriter.Flush();
}
return File(outputStream.ToArray(), "audio/mp3");
Я даже не уверен, что это правильный способ сделать это,но я изменил некоторый код, который я нашел в сети, и это работает.Однако, глядя на демонстрационную версию NAudio Varispeed, которая интегрирует библиотеку SoundTouch, и пытаясь включить ее, она больше не работает.
Я изменил свой код следующим образом:
string fn = Server.MapPath("~/Uploads/Music/" + filename);
AudioFileReader reader = new AudioFileReader(fn);
bool useTempo = true;
VarispeedSampleProvider speedControl = new VarispeedSampleProvider(reader, 100, new SoundTouchProfile(useTempo, false));
MemoryStream outputStream = new MemoryStream();
using (NAudio.Wave.WaveFileWriter waveFileWriter = new WaveFileWriter(outputStream, reader.WaveFormat))
{
byte[] bytes = new byte[reader.Length];
speedControl.Read(bytes.Select(b => (float)Convert.ToDouble(b)).ToArray(), 0, (int)reader.Length);
waveFileWriter.Write(bytes, 0, bytes.Length);
waveFileWriter.Flush();
}
return File(outputStream.ToArray(), "audio/mp3");
Он создается и выглядит так, как будто работает, но когда я нажимаю кнопку воспроизведения, у меня нет звука.Что я здесь не так делаю?Разве это не хороший способ достичь того, чего я хочу?