糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 使用NAudio音频文件剪切指定片段

使用NAudio音频文件剪切指定片段

时间:2024-09-02 23:57:57

相关推荐

使用NAudio音频文件剪切指定片段

NAudio是一个开源语音处理库,但中文资料确实很少,还是得看github文档。

在网上搜索NAudio音频文件进行剪切,有的提供了一种方法是一个个字节读,感觉效率不高。另外我只想截取几秒到几秒内的音频,需要将字节换算成时间,还是挺麻烦的。

看源文档提供的范例是这样的

var source = new AudioFileReader("example.mp3");var trimmed = new OffsetSampleProvider(source) {SkipOver = TimeSpan.FromSeconds(30),Take = TimeSpan.FromSeconds(60),WaveFileWriter.CreateWaveFile16(outputFilePath, trimmed);

这里用到的OffsetSampleProvider,解决了我们的问题。

OffsetSampleProvider允许提取另一个ISampleProvider的片段。通过设置SkipOver可以跳过源ISampleProvider的时间 和设置Take来限制要截断多长时间的片段。你也可以通过设置DelayBy和LeadOut在音频前后增加延迟加长。

还可以支持扩展方法

var trimmed = new AudioFileReader("example.mp3").Skip(TimeSpan.FromSeconds(30)).Take(TimeSpan.FromSeconds(60));WaveFileWriter.CreateWaveFile16(outputFilePath, trimmed);

除了按时间来截断,也可以通过采样字节数来进行

WaveFileReader source = new WaveFileReader("local.wav");//与AudioFileReader有区别,WaveFileReader要转成ISampleProvider,下面的SkipOverSamples 与采样率有关系var trimmed = new OffsetSampleProvider(source.ToSampleProvider()){//跳过多少帧SkipOverSamples = frame,//截取多少帧TakeSamples = len};

上面稍微注意一下是AudioFileReader与WaveFileReader有些区别,请看我上一篇文章:

/mountainlord/article/details/114769488

官方提供的范例全是写入文件的,有的时候可能会预览某一段音频,如果先保存再播放,会感觉比较别扭,其实生成的OffsetSampleProvider也是继承的ISampleProvider这个接口,所以播放时可以直接使用。

播放某一片段代码如下:

WaveOut m_tempWave = null;public void PlayFrame(double start, double len){var source = new AudioFileReader("example.mp3");var trimmed = new OffsetSampleProvider(source) {SkipOver = TimeSpan.FromSeconds(start),Take = TimeSpan.FromSeconds(len),};m_tempWave = new WaveOut();m_tempWave.Init(trimmed);m_tempWave.Play();}

如果觉得《使用NAudio音频文件剪切指定片段》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。