首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用Bass.NET处理声卡输出的音频数据

如何利用Bass.NET处理声卡输出的音频数据
EN

Stack Overflow用户
提问于 2013-01-12 01:07:17
回答 1查看 3.6K关注 0票数 0

我希望使用Bass.NET使用BASS_ChannelGetData方法捕获和处理数据。我看到的示例通过Bass.NET库使用这个播放音频文件,然后进行示例,但是我希望对声卡输出的数据进行采样,这样我就可以捕获和处理来自第三方音频播放器的音频数据,例如Spotify。

代码语言:javascript
复制
Bass.BASS_ChannelGetData(handle, buffer, (int)BASSData.BASS_DATA_FFT256);

我如何获得一个允许我处理这些数据的句柄?

EN

回答 1

Stack Overflow用户

发布于 2013-03-25 21:57:04

Bass.BASS_RecordInit确实返回一个句柄,但是如果您仔细查看文档,他们确实只使用它来播放(实际上是启动)记录通道。他们的代码示例使用回调来检索音频示例。

看看Bass.BASS_RecordStart方法文档。

代码语言:javascript
复制
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类将处理该任务。

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

https://stackoverflow.com/questions/14289137

复制
相关文章

相似问题

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