Csharp/C#教程:修剪音频文件(.wav,.mp3)分享


修剪音频文件(.wav,.mp3)

我正在使用用户指定的标记来实现与修剪音频文件相关的软件,例如,如果音频文件播放1分钟并且用户想要将该文件从20秒修剪为40秒并保存它有新文件。 代码示例将不胜感激。

提前致谢。

谢谢大家的回复,但我得到了Mark Heath NAudio的解决方案。 这是样本希望它有帮助:)

public static class WavFileUtils { public static void TrimWavFile(string inPath, string outPath, TimeSpan cutFromStart, TimeSpan cutFromEnd) { using (WaveFileReader reader = new WaveFileReader(inPath)) { using (WaveFileWriter writer = new WaveFileWriter(outPath, reader.WaveFormat)) { int bytesPerMillisecond = reader.WaveFormat.AverageBytesPerSecond / 1000; int startPos = (int)cutFromStart.TotalMilliseconds * bytesPerMillisecond; startPos = startPos - startPos % reader.WaveFormat.BlockAlign; int endBytes = (int)cutFromEnd.TotalMilliseconds * bytesPerMillisecond; endBytes = endBytes - endBytes % reader.WaveFormat.BlockAlign; int endPos = (int)reader.Length - endBytes; TrimWavFile(reader, writer, startPos, endPos); } } } private static void TrimWavFile(WaveFileReader reader, WaveFileWriter writer, int startPos, int endPos) { reader.Position = startPos; byte[] buffer = new byte[1024]; while (reader.Position < endPos) { int bytesRequired = (int)(endPos - reader.Position); if (bytesRequired > 0) { int bytesToRead = Math.Min(bytesRequired, buffer.Length); int bytesRead = reader.Read(buffer, 0, bytesToRead); if (bytesRead > 0) { writer.WriteData(buffer, 0, bytesRead); } } } } } 

 ffmpeg -ss 00:00:30.0 -t 00:00:10.0 -i input.mp3 -acodec copy output.mp3 

这可以使用Ffmpeg来实现。 所以下载ffmpeg for windows和Start FFmpeg作为Process

PS:-ss Pun Offset -t Length,在示例中将音频文件从30秒修剪为40秒(10秒长度)

使用Sox提取文件的子部分

修剪效果将输入的开始部分和开始加长度的部分复制到输出。 两个参数可以指定为样本数,由整数后跟字母s组成,例如“8700s”或时间值。 时间值的forms为((hh:)mm:)ss(.fs)。 因此,裸整数是以秒为单位的时间值。

例如,假设您有1小时的录音,并希望将其分成两半。 以下两个命令将在Half1.wav中保留上半部分,在Half2.wav中保留下半部分。

 sox Input.wav Half1.wav trim 0 30:00 sox Input.wav Half2.wav trim 30:00 30:00 

原始文件不受影响,因此一旦确认两个输出文件包含它们应该包含的内容,您可以根据需要删除原始文件。

Sox是可扩展的,并且具有(可安装的)支持许多格式,包括wav,flac,mp3等

尝试更改您的代码:

 byte[] buffer = new byte[1024]; 

上述就是C#学习教程:修剪音频文件(.wav,.mp3)分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 byte[] buffer = new byte[endPosition-startPosition]; 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/951087.html

(0)
上一篇 2021年11月18日
下一篇 2021年11月18日

精彩推荐