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;
}
Marshal.Copy の代わりに、そのコールバック内で BASS_ChannelGetData を使用できるはずであることに注意してください。
sample ではなく resample ということですか?その場合、BassMix クラスがそのジョブを処理します。