Author Topic: ASIO get level case accelerated and distorted/clipped audio  (Read 218 times)


  • Posts: 46
I ask you for help because I have finished all the attempts.
My problem is that with ASIO asking for levels causes the audio to speed up and distort.
I've seen these cases before
but I've not found a solution yet.
I'm using Visual Studio 2022, NET Core 6, Windows 11 64 bit

Code: [Select]
float[] peaks = new float[8];

peaks = BassMix.BASS_Mixer_ChannelGetLevel(handle, 0.02f, BASSLevel.BASS_LEVEL_ALL);                         //null
error = BassAsio.BASS_ASIO_ErrorGetCode();                                                                   //Un4seen.Bass.BASSError.BASS_OK

peaks = BassMix.BASS_Mixer_ChannelGetLevel(mMixerHandles[mChannelIndex], 0.02f, BASSLevel.BASS_LEVEL_ALL);   //null
error = BassAsio.BASS_ASIO_ErrorGetCode();                                                                   //Un4seen.Bass.BASSError.BASS_OK

fpeakL = BassAsio.BASS_ASIO_ChannelGetLevel(false, 0);                                                       //Always -1
error = BassAsio.BASS_ASIO_ErrorGetCode();                                                                   //Un4seen.Bass.BASSError.BASS_ERROR_START

peaks[0] = Bass.BASS_ChannelGetLevel(handle);                                                                //OK BUT THE AUDIO IS ACCELERATED AND DISTORTED

peaks = Bass.BASS_ChannelGetLevels(handle, 0.00002f);                                                        //OK BUT STILL SOME CLIPPING IS HEARDABLE

Also the spectrum getting cause trouble with
Code: [Select]
Bass.BASS_ChannelGetData(handle, mFftBuffer, (int)BASSData.BASS_DATA_FFT1024);but it seems ok if I do
Code: [Select]
Bass.BASS_ChannelGetData(handle, mFftBuffer, (int)BASSData.BASS_DATA_FFT_INDIVIDUAL); //OK
« Last Edit: 29 Mar '24 - 15:51 by Dev01 »

Ian @ un4seen

  • Administrator
  • Posts: 25847
If "handle" is being played by BASSASIO then the problem is as in the 2nd link you posted, ie. BASSASIO will not see/play the data used in BASS_ChannelGetData/Level(s) calls on the same handle. BASS_ChannelGetLevel(s) could be replaced with BASS_ASIO_ChannelGetLevel, but BASS_ChannelGetData will be trickier to replace. The simplest solution is probably to create a mixer and plug "handle" into that with the BASS_MIXER_CHAN_BUFFER flag set, and have BASSASIO play the mixer. You can then use BASS_Mixer_ChannelGetData instead of BASS_ChannelGetData.

Regarding BASS_ASIO_ChannelGetLevel giving a BASS_ERROR_START error, that indicates the ASIO device hasn't been started. You can start it with BASS_ASIO_Start.