C# BASS WASAPI BPM计数器

C# BASS WASAPI BPM计数器,c#,.net,audio,bass,C#,.net,Audio,Bass,我想分析我的默认播放设备并检测节拍。我一直在使用BASS WASAPI获取所选设备的FFT数据,包括: int ret = BassWasapi.BASS_WASAPI_GetData(_fft, (int)BASSData.BASS_DATA_FFT2048); 现在,我正在使用这些数据生成光谱数据,并将其显示给用户。此外,我想从BASS中使用BPMCounter类来检测节拍。然而,据我所知,BPMCounter.ProcessAudio函数需要一个流,而我在WASAPI中没有得到该流才能工

我想分析我的默认播放设备并检测节拍。我一直在使用BASS WASAPI获取所选设备的FFT数据,包括:

int ret = BassWasapi.BASS_WASAPI_GetData(_fft, (int)BASSData.BASS_DATA_FFT2048);
现在,我正在使用这些数据生成光谱数据,并将其显示给用户。此外,我想从BASS中使用BPMCounter类来检测节拍。然而,据我所知,BPMCounter.ProcessAudio函数需要一个流,而我在WASAPI中没有得到该流才能工作。有什么方法可以将BPMCounter与WASAPI一起使用吗?如果有人能给我指出正确的方向那就太好了。谢谢

编辑: 尝试将数据转换为流,但未成功:

int ret = BassWasapi.BASS_WASAPI_GetData(_fft, (int)BASSData.BASS_DATA_FFT2048); //get channel fft data
var chan = Bass.BASS_StreamCreate(0, 44100, BASSFlag.BASS_DEFAULT, BASSStreamProc.STREAMPROC_PUSH);
Bass.BASS_ChannelPlay(chan, false);
Bass.BASS_StreamPutData(chan, _fft, _fft.Length);
bool beat = _count.ProcessAudio(chan, true);
Debug.Write(beat);

beat总是错误的,但是我可以从频谱中看出FFT数据的捕获是正确的。

我几个小时前才开始使用这个库,现在仍在浏览示例。所以我的答案可能不是你想要的。对于我的项目,我还想将WASAPI转换为流,并将其用于显示频谱。我所做的是在BASS_WASAPI初始化之后创建一个StreamPush

要初始化WASAPI,请使用此调用和此委托:

private InitWasapi()
{
  WASAPIPROC _process = new WASAPIPROC(Process); // Delegate
  bool res = BassWasapi.BASS_WASAPI_Init(_YourDeviceNumber, 0, 0, BASSWASAPIInit.BASS_WASAPI_BUFFER, 1f, 0f, _process, IntPtr.Zero);
  if (!res)
  {
    // Do error checking
  }      

  // This is the part you are looking for (maybe!)
  // Use these flags because Wasapi needs 32-bit sample data
  var info = BassWasapi.BASS_WASAPI_GetInfo();
  _stream = Bass.BASS_StreamCreatePush(info.freq, info.chans, BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT, IntPtr.Zero);

  BassWasapi.BASS_WASAPI_Start();
}

private int Process(IntPtr buffer, int length, IntPtr user)
{
  Bass.BASS_StreamPutData(_stream, buffer, length);
  return length;
}
请注意:这是可行的,但我仍在尝试。例如,当我从音乐文件本身创建流时,我没有得到相同的频谱输出。有一些小的区别。可能是因为我在Winamp中使用了一个自定义EQ来播放相同的.mp3。所以,如果有人知道更多关于这个问题的信息,我也很想听听