如何使用Bass.NET处理声卡输出的音频数据
本文关键字:输出 音频 数据 声卡 处理 何使用 Bass NET | 更新日期: 2023-09-27 17:51:21
我想使用Bass捕获和处理数据。使用BASS_ChannelGetData方法。我看到的例子使用这个通过Bass播放音频文件。. NET库然后采样,但是我希望采样我的声卡输出的数据,这样我就可以捕获和处理来自第三方音频播放器的音频数据,例如Spotify。
Bass.BASS_ChannelGetData(handle, buffer, (int)BASSData.BASS_DATA_FFT256);
我如何得到一个句柄,允许我处理这个数据?
Bass。BASS_RecordInit确实返回一个句柄,但是如果你仔细看文档,他们确实只在播放(实际开始)记录通道时使用它。他们的代码示例使用回调来检索音频样本。
看看Bass。BASS_RecordStart方法文档。
private RECORDPROC _myRecProc; // make it global, so that the GC can not remove it
private int _byteswritten = 0;
private byte[] _recbuffer; // local recording buffer
...
if ( Bass.BASS_RecordInit(-1) )
{
_myRecProc = new RECORDPROC(MyRecording);
int recHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, _myRecProc, IntPtr.Zero);
...
// start recording
Bass.BASS_ChannelPlay(recHandle, false);
}
...
private bool MyRecording(int handle, IntPtr buffer, int length, IntPtr user)
{
bool cont = true;
if (length > 0 && buffer != IntPtr.Zero)
{
// increase the rec buffer as needed
if (_recbuffer == null || _recbuffer.Length < length)
_recbuffer = new byte[length];
// copy from managed to unmanaged memory
Marshal.Copy(buffer, _recbuffer, 0, length);
_byteswritten += length;
// write to file
...
// stop recording after a certain amout (just to demo)
if (_byteswritten > 800000)
cont = false; // stop recording
}
return cont;
}
请注意,您应该能够在回调中使用BASS_ChannelGetData,而不是Marshal.Copy。
你是说重新取样而不是抽样吗?如果是,那么BassMix类将处理该任务。