gpt4 book ai didi

c# - BASS WASAPI BPMCounter

转载 作者:行者123 更新时间:2023-12-03 00:35:32 29 4
gpt4 key购买 nike

我想分析我的默认播放设备并检测节拍。我一直在使用 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总是 False ,但是我可以在 Spectrum 中看到 FFT 数据的捕获是正确的。

最佳答案

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

要初始化您的 WASAPI,请使用此调用和此委托(delegate):

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。因此,如果有人对此主题有更多了解,我也想听听!

关于c# - BASS WASAPI BPMCounter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41760288/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com