![](/img/trans.png)
[英]How can I programmatically determine whether an MP3 file is CBR or VBR? (preferrably using c#)
[英]How to calculate BitRate for a VBR mp3 without downloading the entire file?
我想在下載開始時獲取遠程mp3文件的持續時間信息。 我可以先獲取幀,但不知道哪些必須讀取,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;
}
有點晚,但如果有人需要它...
這篇CodeProject 文章有很多關於MP3標題的良好形式。
total frames
的整數( 如果存在則為 4個字節,Big endian)。 每個MPEG幀每幀提供恆定量的采樣,由采樣率決定,而不管幀中的總字節數X。 您可以通過以下計算進行估算:
durationVBR = single_frame_time * total_frames;
哪里...
single_frame_time = (SampleRate / SamplesPerFrame) * 1000;
SamplesPerFrame
的常量是:
MPEG-1
MPEG-2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.