Chcę uzyskać informacje o czasie trwania zdalnego pliku mp3 na początku jego pobierania. Na początku mogę uzyskać ramki, ale nie wiem, które muszą być przeczytane, Xing lub VBRi.Jak obliczyć BitRate dla VBR mp3 bez pobierania całego pliku?
Jak mogę uzyskać te informacje, czytając znaczniki?
MemoryStream ms = new MemoryStream();
waveOut.Play();
long offset = from;
ms.Position = 0;
byte[] decBuffer = new byte[50 * 1024];
while (true)
{
if (paused)
{
waveOut.Stop();
bwProvider.ClearBuffer();
break;
}
lock (LockObj)
{
byte[] readed = Helper.ReadStreamPartially(localStream, offset, 100 * 1024, orders);
if (readed == null)
continue;
ms = new MemoryStream(readed);
}
Mp3Frame frame;
try
{
frame = Mp3Frame.LoadFromStream(ms);
}
catch
{
continue;
}
if (frame == null)
continue;
int decompressed = decompressor.DecompressFrame(frame, decBuffer, 0);
bwProvider.AddSamples(decBuffer, 0, decompressed);
if (Helper.IsBufferNearlyFull(bwProvider))
Thread.Sleep(500);
offset += ms.Position;
}
http://stackoverflow.com/q/9046492/1070452 – Plutonix
Może to ci pomaga - https://www.mp3-tech.org/programmer/frame_header.html i http://mpgedit.org/ mpgedit/mpeg_format/mpeghdr.htm –
Zajrzyj tutaj http://stackoverflow.com/questions/6196011/how-to-read-xingheaders-and-vbriheaders-from-mp3-files-using-taglib-sharp –