当前位置: 首页 > 编程语言 > C#

C#基于NAudio实现Wav音频文件切割共享(限PCM格式)

时间:2023-04-11 01:18:02 C#

内容前言实现代码效果图前言C#基于NAudio工具切割Wav音频文件,将一个音频文件切割成多个音频文件注意:调用该方法前需要导入NAudio.dll或在NuGet程序管理器中搜索NAudio并安装它使用NAudio.Wave;使用系统;使用System.Collections.Generic;使用System.Linq;使用系统文本;使用System.Threading.Tasks;namespaceXXX.util{publicstaticclassWavFileUtils{///

///基于NAudio工具剪切Wav音频文件(仅限PCM格式)//////目标文件///输出文件///开始时间///结束时间publicstaticvoidTrimWavFile(stringinPath,stringoutPath,TimeSpancutFromStart,TimeSpancutFromEnd){using(WaveFileReaderreader=newWaveFileReader(inPath)){intfileLength=(int)reader.Length;使用(WaveFileWriterwriter=newWaveFileWriter(outPath,reader.WaveFormat)){floatbytesPerMillisecond=reader.WaveFormat.AverageBytesPerSecond/1000f;intstartPos=(int)Math.Round(cutFromStart.TotalMilliseconds*bytesPerMillisecond);startPos=startPos-startBlockAl%reader.WaveFormat。intendPos=(int)Math.Round(cutFromEnd.TotalMilliseconds*bytesPerMillisecond);endPos=endPos-endPos%reader.WaveFormat.BlockAlign;//判断结束位置是否越界endPos=endPos>fileLength?文件长度:结束位置;TrimWavFile(读卡器、写入器、startPos、endPos);}}}//////重新合并wav文件//////读取流///写入流///开始流///结束流privatestaticvoidTrimWavFile(WaveFileReaderreader,WaveFileWriterwriter,intstartPos,intendPos){reader.Position=startPos;byte[]buffer=newbyte[1024];while(reader.Position0){intbytesToRead=Math.Min(bytesRequired,buffer.Length);intbytesRead=reader.Read(buffer,0,bytesToRead);if(bytesRead>0){writer.Write(buffer,0,bytesRead);}}}}}}调用:stringfilePath="D//获取录音文件的时长(秒)intfileTime=(int)Util.Cover(Util.GetVoiceTime(filePath))/1000;//计算文件需要被切割多少等份decimalfileNum=Math.Ceiling((decimal)fileTime/cutTimeSpan);诠释我=0;while(i///获取时间戳//////publicstaticstringGetTimeStamp(){TimeSpants=DateTime.UtcNow-newDateTime(1970,1,1,0,0,0,0);返回Convert.ToInt64(ts.TotalMilliseconds).ToString();}//////返回音频持续时间//////音频文件路径///publicstaticstringGetVoiceTime(stringSongPath){stringdirName=Path.GetDirectoryName(SongPath);字符串SongName=Path.GetFileName(SongPath);ShellClasssh=newShellClass();文件夹目录=sh.NameSpace(dirName);FolderItemitem=dir.ParseName(SongName);stringSongTime=Regex.Match(dir.GetDetailsOf(item,-1),"\d:\d{2}:\d{2}").Value;//返回音频时长返回歌曲时间;}   //////时间格式转每秒值//////时间字符串///publicstaticlongCover(stringtime){string[]a=time.Split(':');如果(long.Parse(a[0])==0&&long.Parse(a[1])==0){returnlong.Parse(a[2])*1000;}elseif(long.Parse(a[0])==0&&long.Parse(a[1])!=0){return(long.Parse(a[1])*60+long.Parse(a[2]))*1000;}elseif(long.Parse(a[0])!=0&&long.Parse(a[1])==0){return((long.Parse(a[0])*60*60)+long.Parse(a[2]))*1000;}elseif(long.Parse(a[0])!=0&&long.Parse(a[1])!=0){return(((long.Parse(a[0])*60)+long.Parse(a[1]))*60)*1000;}返回0;}}}效果图在这里。本文是关于C#基于NAudio切割Wav音频文件(仅限PCM格式)的介绍就到此为止。更多关于C#NAudioWav音频文件切割内容请搜索往期文章或继续浏览以下相关文章。希望大家以后多多支持!本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: