From 8ed69b7a5d035354cd386b9f82ffdef4c8ba6bca Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 25 Oct 2025 21:05:15 -0500 Subject: [PATCH] ASIO backend, part 7 implement the rest of sample formats --- src/audio/asio.cpp | 95 ++++++++++++++++++++++++++++++---------------- 1 file changed, 62 insertions(+), 33 deletions(-) diff --git a/src/audio/asio.cpp b/src/audio/asio.cpp index 632fbb5a7..81b11c783 100644 --- a/src/audio/asio.cpp +++ b/src/audio/asio.cpp @@ -75,6 +75,7 @@ void TAAudioASIO::onSampleRate(double rate) { void TAAudioASIO::onBufferSize(int bufsize) { bufferSizeChanged(BufferSizeChangeEvent(bufsize)); + desc.bufsize=bufsize; } void TAAudioASIO::onProcess(int index) { @@ -99,11 +100,23 @@ void TAAudioASIO::onProcess(int index) { } break; } - // TODO: how does this work? it's vaguely described in the docs case ASIOSTInt24LSB: { + unsigned char* buf=(unsigned char*)bufInfo[i].buffers[index]; + for (unsigned int j=0; j8388607) val=-8388607; + *(buf++)=(val)&0xff; + *(buf++)=(val>>8)&0xff; + *(buf++)=(val>>16)&0xff; + } break; } - case ASIOSTInt32LSB: { + case ASIOSTInt32LSB: + case ASIOSTInt32LSB16: + case ASIOSTInt32LSB18: + case ASIOSTInt32LSB20: + case ASIOSTInt32LSB24: { int* buf=(int*)bufInfo[i].buffers[index]; for (unsigned int j=0; j>8)|(val<<8); + } break; } case ASIOSTInt24MSB: { + unsigned char* buf=(unsigned char*)bufInfo[i].buffers[index]; + for (unsigned int j=0; j8388607) val=-8388607; + *(buf++)=(val>>16)&0xff; + *(buf++)=(val>>8)&0xff; + *(buf++)=(val)&0xff; + } break; } - case ASIOSTInt32MSB: { + case ASIOSTInt32MSB: + case ASIOSTInt32MSB16: + case ASIOSTInt32MSB18: + case ASIOSTInt32MSB20: + case ASIOSTInt32MSB24: { + unsigned int* buf=(unsigned int*)bufInfo[i].buffers[index]; + for (unsigned int j=0; j8388607) val=-8388607; + val<<=8; + unsigned char* uVal=(unsigned char*)&val; + buf[j]=(uVal[0]<<24)|(uVal[1]<<16)|(uVal[2]<<8)|(uVal[3]); + } break; } case ASIOSTFloat32MSB: { + unsigned int* buf=(unsigned int*)bufInfo[i].buffers[index]; + for (unsigned int j=0; j