我找到了我转换的例子,它是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,我在这里使用了转换器。虽然它不能正确转换所有内容,但需要以下值得注意的修复:(不幸的是,我不记得我所做的所有更改,这并不难,您可以搜索您可能遇到的任何转换问题)
- 在类中从任何语句中
MathUtils
移除并添加到方法中。return
Yield return ...
Iterator
- 将类更改
MathUtils
为模块以修复扩展错误。
- 用 .修复
Case
语句...,Else
。
var
从For Each
语句中删除。
- 在
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
Method 中,将Try
语句中的 all 更改为:
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
地区,您可以更改颜色/绘图方法。