首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从样本到WAV文件格式的浮动数组

从样本到WAV文件格式的浮动数组
EN

Stack Overflow用户
提问于 2016-06-11 00:13:10
回答 2查看 3.1K关注 0票数 1

我正在开发一个将过滤器应用于声音文件的应用程序,滤波器是在频域上应用的,因此我使用下面的代码使用.wav库从NAudio文件中获得了示例:

代码语言:javascript
复制
audio = new AudioFileReader(wav_file);
samples = new float[wave.Length];
audio.Read(samples, 0, samples.Length);

在应用前面的代码后,现在我把样本作为一个浮点数组,然后对得到频域数据的样本应用短时傅立叶变换,然后对频域数据应用滤波器。

然后对频域数据进行逆短时傅立叶变换,将其转换回时域,这应该与初始样本相似,但需要使用滤波器。

这些步骤又一次:

  1. 从wav文件中获取示例(时域数据)数组。
  2. 对样本进行短时傅里叶变换,得到频域数据.
  3. 对频域数据应用滤波器。
  4. 对频域数据应用逆短时傅立叶变换得到样本(时域数据).
  5. 将样本转换为wav表单再次返回以保存和播放它。

现在的问题是在最后一步,我有一个浮点数组的样本(时域数据),我如何将它转换成一个.wav文件并播放它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-11 13:45:25

若要将示例保存为.wav文件,请使用以下代码:

代码语言:javascript
复制
WaveFormat waveFormat = new WaveFormat(sampleRate, bitDepth, channels);
using (WaveFileWriter writer = new WaveFileWriter("C:\\track1.wav", waveFormat))
{
    writer.WriteSamples(floatOutput, 0, floatOutput.Length);
}

从输入文件中提取sampleRatebitDepthchannels,如下所示:

代码语言:javascript
复制
sampleRate = wave.WaveFormat.SampleRate;
bitDepth = wave.WaveFormat.BitsPerSample;
channels = wave.WaveFormat.Channels;
票数 3
EN

Stack Overflow用户

发布于 2017-10-31 18:48:47

1-创建一个实现ISampleProvider 2的类-使用此代码播放(sourse为ISampleProvider)

代码语言:javascript
复制
         var xs = new NAudio.Wave.SampleProviders.SampleToWaveProvider16(source);
                var l = new NAudio.Wave.WaveOut();
                l.Init(xs);
                l.Play();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37758735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档