在 C# 中从特定时间点将 Mp3 文件合并在一起
Posted
技术标签:
【中文标题】在 C# 中从特定时间点将 Mp3 文件合并在一起【英文标题】:Merging Mp3 files together from specific points in time in C# 【发布时间】:2011-04-04 21:42:32 【问题描述】:我正在尝试将两个 mp3 文件从第一个 mp3 文件中的特定时间点合并到第二个 mp3 的特定时间点(在 C# 中) 当我说特定的时间点时,我想在第一个 mp3 文件播放 10 秒后复制所有内容,然后复制整个 mp3。然后我想将它与前 20 秒的第二个 mp3 合并。我该怎么做?
只是为了将两个文件合并在一起,我正在做如下:
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();
上面的代码是在 *** 上的某个地方找到的。我知道我没有从第二个文件中删除标题,但无论如何这有点工作。 (如果您能告诉我如何删除标题,我们将不胜感激)。
有没有办法找出 mp3 文件中每秒有多少字节(或多少帧)?
由于我的 mp3 文件格式,我无法使用 NAudio.NET。当我尝试在这些 mp3 文件上播放这些文件时,NAudio 给我一个错误(不是公认的 MP3 头文件)。
【问题讨论】:
【参考方案1】:1) 最好至少学习 MP3 文件结构和合法 MP3 文件标签(ID3v1/v2 和可能的 Xing VBR Header)的基础知识。 例如,查看以下链接: 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) 要计算 MP3 文件中连续部分的准确持续时间,您需要计算该部分中 MP3 帧的数量。对于 MPEG1 第 3 层,MP3 帧的持续时间始终为 1152 个样本,而对于其他版本的 MPEG,则为 576 个样本。
3) 要定位到 MP3 文件中的特定点,您可以使用以下方法之一:
如果文件较小,您可以简单地从 MP3 数据开始计算帧数。 如果您处理 CBR 文件,您可以简单地计算所需位置的偏移量。 如果您处理 VBR 文件并且该文件具有 VBR 标头,您可以从标头获取起始位置并将帧数计数到所需位置。“如果您能告诉我如何删除标头,我们将不胜感激” - 您需要切断 ID3 标签,可能还有 VBR 标头。
“有没有办法找出 mp3 文件中每秒有多少字节(或多少帧)?” - 对于 CBR,这可以很容易地从比特率计算出来。
注意,您应该在帧边界上执行所有操作。
【讨论】:
以上是关于在 C# 中从特定时间点将 Mp3 文件合并在一起的主要内容,如果未能解决你的问题,请参考以下文章