我想在下载开始时获取远程mp3文件的持续时间信息。我可以先得到帧,但不知道哪一个必须是read、Xing或VBRi。
如何通过读取标记来获取此信息?
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;
}发布于 2017-02-03 14:32:28
有点晚了,但如果其他人需要的话...
这个CodeProject 有很多关于MP3头的很好的格式。
total frames的整数(如果存在,则为4字节,大端)。每个MPEG帧提供由采样率确定的每个帧的恒定采样量,而与帧内总字节数X无关。您可以使用如下计算进行估算:
durationVBR = single_frame_time * total_frames; 哪里..。
single_frame_time = (SampleRate / SamplesPerFrame) * 1000;SamplesPerFrame的常量为:
MPEG-1
MPEG-2
https://stackoverflow.com/questions/41732725
复制相似问题