我找到了我转换的例子,它是AudioVSTToolbox
这是我的结果:http://puu.sh/4mWU8.png
(我正在复制我的 Winamp 主题 :))
从该工具箱中运行 Spectrum Analyzer 所需的最低要求如下:
- “NAudio-Visualizing”文件夹的所有内容(波形内容除外,除非您需要它)。
- CommonUtils\ColorUtils.cs
- CommonUtils\ExtendedGraphics.cs
- CommonUtils\MathUtils.cs
- CommonUtils\MidiUtils.cs
- CommonUtils\Audio\NAudio\AudioUtilsNAudio.cs
- CommonUtils\Audio\NAudio\NAudio.dll
- CommonUtils\FFT\AudioAnalyzer.cs
- CommonUtils\FFT\FFTWindows.cs
- CommonUtils\FFT\LomontFFT.cs
- CommonUtils\FFT\ExocortexDSP\Complex.cs
- CommonUtils\FFT\ExocortexDSP\ComplexF.cs
- CommonUtils\FFT\ExocortexDSP\Fourier.cs
- CommonUtils\FFT\ExocortexDSP\FourierDirection.cs
如果转换为 VB .Net,我使用了转换器here。虽然它不能正确转换所有内容,但需要以下值得注意的修复:(不幸的是,我不记得我所做的所有更改,这并不难,您可以搜索您可能遇到的任何转换问题)
- 在
MathUtils 类中从任何Yield return ... 语句中删除return 并将Iterator 添加到方法中。
- 将
MathUtils 类更改为模块以修复扩展错误。
- 用
...,Else 修复Case 语句。
- 从
For Each 语句中删除var。
- 在
ExtendedGraphics 类中,将命名空间 System.Drawing.Extended 重命名为 AudioSystem.Drawing.Extended,因为它与 System 命名空间冲突。
我个人做了一些改变:
添加字段:
Private m_Volume As Single = 0.2F 'Desired default volume
Private audioFileReader As AudioFileReader
Private fadeInOut As FadeInOutSampleProvider
Private m_fadeDuration As Integer = 250 'Desired fading duration
在OpenFile方法中,将Try语句中的全部改为:
waveOutDevice = New WaveOutEvent() With { _
.DesiredLatency = definedLatency _
}
audioFileReader = New AudioFileReader(path)
ActiveStream = DirectCast(audioFileReader, WaveStream)
inputStream = New WaveChannel32(ActiveStream)
fadeInOut = New FadeInOutSampleProvider(New WaveToSampleProvider(inputStream))
audioFileReader.Volume = Volume()
sampleAggregator = New SampleAggregator(m_fftDataSize)
AddHandler inputStream.Sample, AddressOf inputStream_Sample
waveOutDevice.Init(New SampleToWaveProvider(fadeInOut))
ChannelLength = inputStream.TotalTime.TotalSeconds
FileTag = TagLib.File.Create(path)
GenerateWaveformData(path)
CanPlay = True
在Pause()方法中将waveOutDevice.Pause()改为fadeInOut.BeginFadeOut(fadeDuration())
在Play() 方法中,在CanPlay 语句中:
fadeInOut.BeginFadeIn(fadeDuration())
waveOutDevice.Play()
要将图形的样式更改为条形,在自定义频谱分析器控件的代码中,将默认值Public DoSpectrumGraph As Boolean = True 更改为False。然后,您可以更改上面的字段以根据需要设置条形样式。
在Event Overrides 区域,您可以更改颜色/绘制方法。