I'm using Bass.Net lib to play a dsf file in DoP mode in Windows 11, my app can play the file normally from the begining, but after 1 minutes or so, the sound starts dithering and the app corrupted. Please help me to find the solution. My env:
Bass.Net 2.4.17
Bass libs 2.4.17
BASSWASAPI 2.4.3.1
dotnet 6.0.400
windows 11
My code snippet:
public void OnPlayClickCommand()
{
bool code = Bass.BASS_Init(-1, 176400, BASSInit.BASS_DEVICE_DEFAULT | BASSInit.BASS_DEVICE_FREQ , IntPtr.Zero);
if (code != true)
{
Console.WriteLine("Error returned from BASS_INIT");
}
else
{
Console.WriteLine("BASS_INIT OK");
}
int freq = 0;
stream = BassDsd.BASS_DSD_StreamCreateFile("test.dsf", 0, 0, BASSFlag.BASS_DSD_DOP | BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE, 0);
if (stream == 0)
{
BASSError err = Bass.BASS_ErrorGetCode();
Console.WriteLine("create file error code={0}",err);
}
BASS_CHANNELINFO ci;
ci = Bass.BASS_ChannelGetInfo(stream);
BASS_CHANNELINFO info = new BASS_CHANNELINFO();
bool ret = Bass.BASS_ChannelGetInfo(stream, info);
if (ret == false)
{
BASSError err = Bass.BASS_ErrorGetCode();
Console.WriteLine("channel getinfo error code={0}",err);
}
WASAPIPROC _wasapiProc = new WASAPIPROC(WasapiProc);
code = BassWasapi.BASS_WASAPI_Init(-1, ci.freq, ci.chans, BASSWASAPIInit.BASS_WASAPI_EXCLUSIVE, 0.4f, 0, _wasapiProc, IntPtr.Zero);
if (code != true)
{
BASSError err = Bass.BASS_ErrorGetCode();
Console.WriteLine("Error returned from BASS_WASAPI_Init:{0}",err);
}
else
{
Console.WriteLine("BASS_WASAPI_Init OK");
}
code = BassWasapi.BASS_WASAPI_Start();
if (code != true)
{
BASSError err = Bass.BASS_ErrorGetCode();
Console.WriteLine("Error returned from BASS_WASAPI_Start:{0}",err);
}
else
{
Console.WriteLine("BASS_WASAPI_Start OK");
}
}
private int WasapiProc(IntPtr buffer, int length, IntPtr user)
{
// stream is defined in class as: public int stream;
int r = Bass.BASS_ChannelGetData(stream, buffer, length);
// error occur
if (r == -1)
{
r = 0;
// BASSError err = Bass.BASS_ErrorGetCode();
// Console.WriteLine("Error returned from BASS_ChannelGetData:{0}",err);
}
return r;
}
Thanks in advance.