首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CSCore:可能,可以剪切音频文件

CSCore:可能,可以剪切音频文件
EN

Stack Overflow用户
提问于 2014-05-11 10:54:51
回答 1查看 1.5K关注 0票数 1

是否可以使用CSCore-图书馆剪切音频文件?例如,我想在第二个20开始启动一个mp3,在第二个50中停止它,我想生成一个新的mp3文件,这样就可以了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-11 11:36:26

有两种方法可以剪切mp3文件。

  1. 解析mp3文件以获取所有mp3框架。复制不想被剪切的帧,并将它们粘贴到一个新的流中。
  2. 解码整个mp3文件并重新编码您不想被剪切的数据。

第一种方法的缺点是它比方法2更复杂,而且不能精确地切割mp3。这意味着,您仅限于mp3帧的大小。

第二种方法就是你要找的东西。但是有一个大问题:MP3编码只支持Windows 8,这意味着您不能在Windows、Vista或Windows 7中使用这种方法。

->我建议你使用任何第三方的组件,如lame,ffmpeg,.

不管怎样..。方法2的一个例子:

代码语言:javascript
复制
private static void Main(string[] args)
{
    TimeSpan startTimeSpan = TimeSpan.FromSeconds(20);
    TimeSpan endTimeSpan = TimeSpan.FromSeconds(50);

    using (IWaveSource source = CodecFactory.Instance.GetCodec(@"C:\Temp\test.mp3"))
    using (MediaFoundationEncoder mediaFoundationEncoder =
        MediaFoundationEncoder.CreateWMAEncoder(source.WaveFormat, @"C:\Temp\dest0.mp3"))
    {
        AddTimeSpan(source, mediaFoundationEncoder, startTimeSpan, endTimeSpan);
    }
}

private static void AddTimeSpan(IWaveSource source, MediaFoundationEncoder mediaFoundationEncoder, TimeSpan startTimeSpan, TimeSpan endTimeSpan)
{
    source.SetPosition(startTimeSpan);

    int read = 0;
    long bytesToEncode = source.GetBytes(endTimeSpan - startTimeSpan);

    var buffer = new byte[source.WaveFormat.BytesPerSecond];
    while ((read = source.Read(buffer, 0, buffer.Length)) > 0)
    {
        int bytesToWrite = (int)Math.Min(read, bytesToEncode);
        mediaFoundationEncoder.Write(buffer, 0, bytesToWrite);
        bytesToEncode -= bytesToWrite;
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23591715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档