首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SoundTouch BPMDetect的NAudio WaveIn的C#示例

使用SoundTouch BPMDetect的NAudio WaveIn的C#示例
EN

Stack Overflow用户
提问于 2018-05-23 21:39:22
回答 1查看 513关注 0票数 0

有没有人能举例说明如何在naudio WaveIn中使用BPMDetect类?

我总是得到0BPM。

这就是我到目前为止所知道的:

代码语言:javascript
复制
        const int ConstWaveInSampleRate = 44100;

    private BufferedWaveProvider bufferedWaveProvider;

    private WaveIn m_WaveIn;
    private WaveOut m_WaveOut;

    private BPMDetect m_BpmDetect;
    public NAudioBpmDetect()
    {
        int deviceNumber = 0;
        m_WaveIn = new WaveIn();
        m_WaveIn.DeviceNumber = deviceNumber;
        int channels = NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels;
        m_WaveIn.WaveFormat = new WaveFormat(ConstWaveInSampleRate, 16, 1);
        m_WaveOut = new WaveOut();

        m_BpmDetect = new BPMDetect(channels, ConstWaveInSampleRate);
        m_WaveIn.DataAvailable += new EventHandler<WaveInEventArgs>(WaveIn_DataAvailable);

        bufferedWaveProvider = new BufferedWaveProvider(m_WaveIn.WaveFormat);
        bufferedWaveProvider.DiscardOnBufferOverflow = true;

        m_WaveOut.Init(bufferedWaveProvider);
        m_WaveIn.StartRecording();
        m_WaveOut.Play();

    }

    void WaveIn_DataAvailable(object sender, WaveInEventArgs e)
    {
        bufferedWaveProvider.AddSamples(e.Buffer, 0, e.BytesRecorded);
        byte[] buffer = e.Buffer.Where((value, index) => index % 2 == 0).ToArray();
        var waveBuffer = new WaveBuffer(buffer);
        uint count = (uint)waveBuffer.FloatBuffer.Count();
        m_BpmDetect.PutSamples(waveBuffer.FloatBuffer, count);
        Console.WriteLine(m_BpmDetect.Bpm);
    }

是否存在从缓冲区拆分通道数据的问题?

EN

回答 1

Stack Overflow用户

发布于 2018-05-31 21:54:45

我不熟悉BPMDetect类,但是在如何向它提供数据方面有一些问题:

  • 你是用单声道录制的,所以你不需要拆分频道。
  • 你可能用2个声道初始化BPMDetect,这在这里是不正确的。
  • 即使你是在立体声录音,每个样本都是两个字节,所以你不能只是每隔一个byte.
  • WaveBuffer就执行一次重新解释转换。它不会将16位整数样本转换为32位浮点样本。

您需要做的是获取捕获的缓冲区中的每一对字节,将其解释为Int16 (例如,使用BitConverter),然后通过除以32768f将其转换为+/- 1.0范围内的float。这将为您提供您的BPM检测器应该能够使用的样本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50489945

复制
相关文章

相似问题

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