ASIO backend, part 6

add support for handling device resets
this will be extended to the SDL and PortAudio backends soon
This commit is contained in:
tildearrow 2025-10-25 18:40:02 -05:00
parent 3edf62fc5c
commit db2f368813
7 changed files with 85 additions and 1 deletions

View file

@ -36,6 +36,36 @@ static void _onSampleRate(ASIOSampleRate rate) {
}
static long _onMessage(long type, long value, void* msg, double* opt) {
if (callbackInstance==NULL) return;
switch (type) {
case kAsioSelectorSupported:
switch (value) {
case kAsioSelectorSupported:
case kAsioEngineVersion:
case kAsioResetRequest:
case kAsioBufferSizeChange:
case kAsioResyncRequest:
return 1;
default:
return 0;
}
break;
case kAsioEngineVersion:
return 2;
break;
case kAsioResetRequest:
callbackInstance->requestDeviceChange();
return 1;
break;
case kAsioBufferSizeChange:
callbackInstance->onBufferSize(value);
return 1;
break;
case kAsioResyncRequest:
// ignore
return 1;
break;
}
return 0;
}
@ -343,6 +373,10 @@ bool TAAudioASIO::setRun(bool run) {
return running;
}
void TAAudioASIO::requestDeviceChange() {
deviceStatus=TA_AUDIO_DEVICE_RESET;
}
bool TAAudioASIO::init(TAAudioDesc& request, TAAudioDesc& response) {
if (initialized) return false;
if (callbackInstance) {