2014-05-11 110 views

回答

3

有兩種方法可以剪切mp3文件。

  1. 解析mp3文件得到所有的mp3幀。複製您不想剪切的幀並將其粘貼到新的流中。
  2. 解碼整個mp3文件,並重新編碼你不想被剪下的數據。

第一種方法的缺點是它比方法2更復雜,並且不能精確地剪切mp3。這意味着,你被限制在MP3幀的大小。

第二種方法正是你要找的。但是有一個大問題:自Windows 8以來只支持MP3編碼。這意味着您不能在Windows XP,Vista或Windows 7中使用此方法。

- >我會建議您使用任何第三方組件,如跛腳,ffmpeg的,...

反正...對方法2的例子:

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; 
    } 
}