Hello
I have an error when I use DSP_PeakLevelMeter with bassAsioHandler.InputChannel in an WPF application
in a WinForm App, I Havent this problem, and can use my progressbar
WPF App : fail
BassAsioHandler bassAsioHandler;
DSP_PeakLevelMeter DspLevelMeter;
private BASS_ASIO_DEVICEINFO[] bassAsioDeviceinfo;
private BASS_DEVICEINFO[] bassDeviceinfo;
private void Load(object sender, RoutedEventArgs e)
{
//////////////////////////////////////////////////////
// Load Bass Asio Device
//////////////////////////////////////////////////////
Console.WriteLine("[BASSMotor] BassAsio Init Asio Devices", 5);
// Get Asio Devices
bassAsioDeviceinfo = BassAsio.BASS_ASIO_GetDeviceInfos();
Console.WriteLine("[BASSMotor] BassAsio Fond " + bassAsioDeviceinfo.Length + " Devices " + BassAsio.BASS_ASIO_ErrorGetCode(), 3);
// Init Asio Devices
for (int i = 0; i < bassAsioDeviceinfo.Length; i++)
{
Console.WriteLine("[BASSMotor] BassAsio Init Device id:" + i + " - " + bassAsioDeviceinfo[i].name, 5);
if (!BassAsio.BASS_ASIO_Init(i, BASSASIOInit.BASS_ASIO_DEFAULT))
{
bassAsioDeviceinfo[i].name = "Error " + bassAsioDeviceinfo[i].name;
Console.WriteLine("[BASSMotor] BassAsio can't Init Device id:" + i + " - " + bassAsioDeviceinfo[i].name + " : " + BassAsio.BASS_ASIO_ErrorGetCode(), 0);
//sBassError = BassAsio.BASS_ASIO_ErrorGetCode().ToString();
}
else
{
Console.WriteLine("[BASSMotor] BassAsio Device id:" + i + " - " + bassAsioDeviceinfo[i].name + " : Init Sucess", 3);
if (BassAsio.BASS_ASIO_GetDevice() == i || BassAsio.BASS_ASIO_SetDevice(i))
{
Console.WriteLine("[BASSMotor] BassAsio Get Channels info from Device id:" + i + " - " + bassAsioDeviceinfo[i].name, 5);
// Get all Information of Device
BASS_ASIO_INFO bassAsioInfo = BassAsio.BASS_ASIO_GetInfo();
if (bassAsioInfo == null)
Console.WriteLine("[BASSMotor] BassAsio Get Channels info from Device id:" + i + " - " + bassAsioInfo.name + " Error : " + BassAsio.BASS_ASIO_ErrorGetCode(), 0);
else
{
Console.WriteLine("[BASSMotor] BassAsio Fond " + bassAsioInfo.inputs + " Input Channel from Devices id:" + i + " - " + bassAsioInfo.name, 0);
for (int ii = 0; ii < bassAsioInfo.inputs; ii++)
{
Console.WriteLine("[BASSMotor] BassAsio Get Info of from Input Channel id:" + ii + " - " + BassAsio.BASS_ASIO_ChannelGetInfo(true, ii).name + " ", 5);
}
}
}
else
Console.WriteLine("[BASSMotor] BassAsio can't set Devices id:" + i + " - " + bassAsioDeviceinfo[i].name + "Error : " + BassAsio.BASS_ASIO_ErrorGetCode(), 0);
}
}
//////////////////////////////////////////////////////
// Load Bass Device
//////////////////////////////////////////////////////
Console.WriteLine("[BASSMotor] BassAsio Init WDM Devices", 5);
// Get WDM Devices
bassDeviceinfo = Bass.BASS_GetDeviceInfos();
Console.WriteLine("[BASSMotor] Bass Fond " + bassDeviceinfo.Length + " Devices " + Bass.BASS_ErrorGetCode(), 3);
// Init WDM Devices
for (int i = 0; i < bassDeviceinfo.Length; i++)
{
if (!Bass.BASS_Init(i, 48000, BASSInit.BASS_DEVICE_DEFAULT, new WindowInteropHelper(Application.Current.MainWindow).Handle))
{
bassDeviceinfo[i].name = "Error " + bassDeviceinfo[i].name;
Console.WriteLine("[BASSMotor] Bass can't Init Device id:" + i + " - " + bassDeviceinfo[i].name + " : " + BassAsio.BASS_ASIO_ErrorGetCode(), 0);
//sBassError = Bass.BASS_ErrorGetCode().ToString();
}
else
Console.WriteLine("[BASSMotor] Bass Device id:" + i + " - " + bassDeviceinfo[i].name + " : Init Sucess", 3);
}
bassAsioHandler = new BassAsioHandler(true, 0, 3, 2, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT, 48000d);
if (!bassAsioHandler.Start(512))
{
Console.WriteLine("[SoundcardMOTOR] Could not start AsioHandler from Device:0 (id:0) - Channel:5 (id:5) : " + BassAsio.BASS_ASIO_ErrorGetCode(), 0);
bassAsioHandler.Dispose();
bassAsioHandler = null;
}
else
{
Console.WriteLine("[SoundcardMOTOR] Start AsioHandler from Device:" +0+ " (id:" + 0 + ") - Channel:" + 5 + " (id:" + 5 + ") : " + BassAsio.BASS_ASIO_ErrorGetCode(), 0);
DspLevelMeter = new DSP_PeakLevelMeter(bassAsioHandler.InputChannel, 0);
DspLevelMeter.Notification += new EventHandler(_plm_Rec_Notification);
}
}
public void _plm_Rec_Notification(object sender, EventArgs e)
{
//Console.WriteLine(Tools.SoundcardDSP_PeakLevelMeter[iId].LevelL);
Console.WriteLine(DspLevelMeter.LevelL.ToString());
progressBar1.Value = 32768d;//DspLevelMeter.LevelL;
}
}