是否可以使用CSCore-Library剪切音频文件?例如,我想在第二个20开始播放一个mp3,并在第二个50开始停止它,我想生成一个新的mp3文件,但是它确实是这样。
答案 0 :(得分:3)
有两种方法可以剪切mp3文件。
第一种方法的缺点是比方法2更复杂,你不能精确地切割mp3。这意味着,你被限制在mp3帧的大小。
第二种方法正是您所寻找的。但是存在一个大问题:自Windows 8以来仅支持MP3编码。这意味着您无法在Windows XP,Vista或Windows 7中使用此方法。
- >我建议你使用任何第三方组件,如lame,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;
}
}