Hi everybody,
I want to add an input device (in this case a microphone, but I am planning to do this with any input device) to a mixer channel.
For now I got this (VB.NET):
Public Class Form1
Private MikroRecordingProc As RECORDPROC
Private MikroInput As Integer
Private MikroOutput As Integer
Private Sub Form1.Load(sender As Object, e As EventArgs) Handles MyBase.Load
Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, Me.Handle) 'Initialisiere Output Device
mixer = Un4seen.Bass.AddOn.Mix.BassMix.BASS_Mixer_StreamCreate(44100, 2, BASSFlag.BASS_DEFAULT)
Bass.BASS_ChannelSetAttribute(mixer, BASSAttribute.BASS_ATTRIB_BUFFER, 0) ' disable playback buffering
Bass.BASS_RecordInit(-1) 'Initialisiere Mike
MikroRecordingProc = New RECORDPROC(AddressOf MikroRecordingCallback)
MikroOutput = Bass.BASS_StreamCreate(44100, 1, BASSFlag.BASS_DEFAULT, BASSStreamProc.STREAMPROC_PUSH)
MikroInput = Bass.BASS_RecordStart(44100, 1, BASSFlag.BASS_STREAM_DECODE, MikroRecordingProc, IntPtr.Zero)
BassMix.BASS_Mixer_StreamAddChannel(mixer, MikroOutput, BASSFlag.BASS_MIXER_NORAMPIN Or BASSFlag.BASS_STREAM_AUTOFREE)
Bass.BASS_ChannelPlay(mixer, False)
End Sub
Public Function MikroRecordingCallback(ByVal handle As Integer, ByVal buffer As IntPtr, ByVal length As Integer, ByVal user As IntPtr) As Boolean
Bass.BASS_StreamPutData(MikroOutput, buffer, length)
Bass.BASS_ChannelPlay(MikroOutput, False)
Return True
End Function
End Class
However, I get error 38 (The channel is a 'decoding channel') when I call BASS_Mixer_StreamAddChannel() for some reason. I already had this working, but I must have changed something accidentally, and I can't find what I'm doing wrong.
Further, I was told that I shouln't use BASS_ChannelPlay in a callback function and I am getting a microphone latency of about one second.
Is there any way to do this better?