在 MemoryStream 中拆分 mp3 音频的正确方法是啥?

Posted

技术标签:

【中文标题】在 MemoryStream 中拆分 mp3 音频的正确方法是啥?【英文标题】:What is the proper way to split mp3 audio in MemoryStream?在 MemoryStream 中拆分 mp3 音频的正确方法是什么? 【发布时间】:2015-09-14 00:25:41 【问题描述】:

我有一个MemoryStream,它从在线读取音频,然后将其保存到FileStream。音频播放效果很好,有一个问题是剪辑的前 30-40 毫秒是无声的,并且在每个分割开始时是无声的。这是有问题的,因为我需要将音频剪辑分成多个文件以便以后无缝播放。 mp3 数据中是否有特定的字节或十六进制来指示 mp3 帧的开始/结束位置以尝试在正确的位置拆分它?这在代码中可能是什么样的?

在这个简单的FileStream 保存在这里,你可以看到,在我的实验中,即使我尝试在开头剪掉那个死角,它仍然会产生死角 - 导致我认为我正在将声音文件拆分为位置不正确,然后玩家无法读取该帧 - 但我该如何克服呢?

byte[] byteArray = ms.ToArray();
using (FileStream fs = new FileStream(destPath + filename + ".mp3", FileMode.Create))

        fs.Write(byteArray, 0, byteArray.Length);

剪辑回来尝试摆脱一开始的死角,只是为了测试:

byte[] oldArray = ms.ToArray();
byte[] newArray = new byte[oldArray.Length - 1000];
Array.Copy(oldArray, 1000, newArray, 0, newArray.Length);
using (FileStream fs = new FileStream(destPath + filename + ".mp3", FileMode.Create))

      fs.Write(newArray, 0, newArray.Length);
 

检查正在保存的 mp3 的字节数组,当我将其转换为文本时,即使在那个死区中也有数据被保存,但由于某种原因它无法播放。正如我所说,我猜这与文件在声音帧中途被错误分割或其他什么有关?抱歉,如果我使用了不正确的术语。

【问题讨论】:

【参考方案1】:

试着看看这里: NAudio to split mp3 file。 NAudio 是一个完整的库,可能适合您...

【讨论】:

以上是关于在 MemoryStream 中拆分 mp3 音频的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

NAudio 的错误,在 MemoryStream,VB 中播放 mp3

从 MemoryStream 打开音频 (wav) 文件以确定持续时间

使用 NAudio 读取包含作品音频的 MemoryStream

用 C 语言编辑音频 (mp3)

iOS 将立体声 mp3 拆分为单声道 aac

使用静音检测分割音频文件