1
是否可以使用CSCore-Library剪切音頻文件?例如,我想在第二個20上開始播放一個mp3,並在第二個50上停止播放,並且我想生成一個新的mp3文件,這個文件就是這個文件。CSCore:可能,剪切音頻文件
是否可以使用CSCore-Library剪切音頻文件?例如,我想在第二個20上開始播放一個mp3,並在第二個50上停止播放,並且我想生成一個新的mp3文件,這個文件就是這個文件。CSCore:可能,剪切音頻文件
有兩種方法可以剪切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;
}
}