开发者

Merging Mp3 files together from specific points in time in C#

I am trying to merge two mp3 files together from a specific point time in the first mp3 file to a specific point in time for the 2nd mp3 (in C#) When I say specific point in time, I want to copy everything from the first mp3 file 10 sec after it has played and then the entire mp3. Then I want to merge this together with the 2nd mp3 first 20 seconds. How do I do this?

Just to merge the two files together I am doing as follows:

using (var fs = File.OpenWrite("combined.mp3")) 
{ 
  var buffer = File.ReadAllBytes("test1.mp3"); 
  fs.Write(buffer, 0, buffer.Length); 
  buffer = File.ReadAllBytes("test.mp3"); 
  fs.开发者_开发知识库Write(buffer, 0, buffer.Length); fs.Flush(); 
}

The above code was found somewhere here on Stackoverflow. I know that I am not removing the header from the 2nd file, but this kinda works anyways. (If you can tell me how to remove the header this will be appreciated).

Is there a way to find out how many bytes each second is (or how many frames) in the mp3 files?

Due to the format of my mp3 files I cannot use NAudio.NET. NAudio gives me an error when I try to play these on these mp3 files (Not a recognised MP3 header).


1) It is desirable to learn at least basics of MP3 file structrure and legal MP3 file tags (ID3v1/v2 and possibly Xing VBR Header). Look for example at the following links: http://www.mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm http://www.codeproject.com/KB/audio-video/mpegaudioinfo.aspx http://www.developerfusion.com/code/4684/read-mp3-tag-information-id3v1-and-id3v2/ http://www.id3.org/

2) To count exact duration of continuous part in a MP3 file you will need to count number of MP3 frames in this part. Duration of a MP3 frame is always 1152 samples for MPEG1 Layer 3, and 576 samples for other versions of MPEG.

3) To position to a specific point in a MP3 file you can use one of the following:

  • If the file has a small size you can simply count frames from begginning of MP3 data.
  • If you deal with a CBR file you can simply calculate offset of the desired position.
  • If you deal with a VBR file and the file has a VBR header, you can get from the header a starting position and count frames to the desired position.

"If you can tell me how to remove the header this will be appreciated" - you need to cut off ID3 tags and probably VBR header.

"Is there a way to find out how many bytes each second is (or how many frames) in the mp3 files?" - for CBR this can be easily calculated from bitrate.

Note, you should perform all operations on the frame boundaries.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜