Ich habe die Dauer, die mit Mp3WaveFormat.AverageBytesPerSecond
beim Streamen von MP3 berechnet wird getestet.NAudio falsche MP3-Dauer bei der Berechnung von AverageBytesPerSecond
AverageBytesPerSecond: 64 kbps
Content Length: 2436943 bytes
Duration: 2436943/(64/8 * 1024) = 297 seconds
Aber das ist nicht korrekt, denn die tatsächliche Dauer des MP3 ist 191 Sekunden. Ich kann nicht verstehen, warum das passiert. Stimmt etwas in meiner Berechnung nicht?
Mp3 Informationen
-Code WAVE der Quelle mp3
HttpWebRequest req = SendRequest(url, 0, 0);
HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
size = resp.ContentLength;
Stream str = resp.GetResponseStream();
byte[] buffer = new byte[1024];
byte[] storer = new byte[1024 * 100];
int bytesRead = 0;
int total = 0;
while ((bytesRead = str.Read(buffer, 0, buffer.Length)) > 0)
{
Buffer.BlockCopy(buffer, 0, storer, total, bytesRead);
total += bytesRead;
Mp3Frame frame = Mp3Frame.LoadFromStream(new MemoryStream(storer));
if (frame == null) continue;
format = new Mp3WaveFormat(frame.SampleRate, frame.ChannelMode == ChannelMode.Mono ? 1 : 2,
frame.FrameLength, frame.BitRate);
decompressor = new AcmMp3FrameDecompressor(format);
req.Abort();
resp.Close();
str.Close();
break;
}
Also, wie kann ich eine bestimmte Sekunde Byte-Offset berechnen, um einen schnellen Vor- oder Rücklauf? –
Es ist nicht so einfach. Sie können herausfinden, wie lange jedes "Frame" ist und versuchen, zum nächsten Frame zu springen. –