commit libopenmpt for openSUSE:Factory
Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libopenmpt for openSUSE:Factory checked in at 2024-04-02 16:37:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libopenmpt (Old) and /work/SRC/openSUSE:Factory/.libopenmpt.new.1905 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "libopenmpt" Tue Apr 2 16:37:35 2024 rev:46 rq:1163533 version:0.7.6 Changes: -------- --- /work/SRC/openSUSE:Factory/libopenmpt/libopenmpt.changes 2024-03-18 16:43:47.725268304 +0100 +++ /work/SRC/openSUSE:Factory/.libopenmpt.new.1905/libopenmpt.changes 2024-04-02 16:37:36.174596628 +0200 @@ -1,0 +2,16 @@ +Fri Mar 29 12:38:51 UTC 2024 - Mia Herkt <mia@0x0.st> + +- Update to 0.7.6: + * [Sec] Potential heap out-of-bounds read or write past sample + end with malformed sustain loops in SymMOD files. + * MED: Transposed samples were playing too low in some files + (e.g. mix94.mmd1). + * OKT: Some files with garbage at the end were rejected + (e.g. katharsis - piano lesson.okta). + * Compressor DMO: It was possible that the plugin would not + behave as intended at mix rates above 500 kHz. + * Avoid re-allocating the loop state map contents on every + playthrough of the module. +- Run test suite during package build + +------------------------------------------------------------------- Old: ---- libopenmpt-0.7.5+release.autotools.tar.gz New: ---- libopenmpt-0.7.6+release.autotools.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libopenmpt.spec ++++++ --- /var/tmp/diff_new_pack.YLbpAC/_old 2024-04-02 16:37:38.898697017 +0200 +++ /var/tmp/diff_new_pack.YLbpAC/_new 2024-04-02 16:37:38.910697459 +0200 @@ -21,7 +21,7 @@ %define libopenmpt_modplug_version 0.8.9.0 Name: libopenmpt -Version: 0.7.5 +Version: 0.7.6 Release: 0 Summary: C++ and C library to decode tracker music files License: BSD-3-Clause @@ -111,12 +111,15 @@ --with-flac \ --with-portaudio \ --with-sdl2 -make %{?_smp_mflags} +%make_build %install %make_install find %{buildroot} -type f -name "*.la" -delete -print +%check +%make_build check + %post -n %{libopenmpt} -p /sbin/ldconfig %postun -n %{libopenmpt} -p /sbin/ldconfig ++++++ libopenmpt-0.7.5+release.autotools.tar.gz -> libopenmpt-0.7.6+release.autotools.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/common/versionNumber.h new/libopenmpt-0.7.6+release.autotools/common/versionNumber.h --- old/libopenmpt-0.7.5+release.autotools/common/versionNumber.h 2024-03-17 08:42:51.000000000 +0100 +++ new/libopenmpt-0.7.6+release.autotools/common/versionNumber.h 2024-03-24 13:08:54.000000000 +0100 @@ -17,7 +17,7 @@ // Version definitions. The only thing that needs to be changed when changing version number. #define VER_MAJORMAJOR 1 #define VER_MAJOR 31 -#define VER_MINOR 05 -#define VER_MINORMINOR 02 +#define VER_MINOR 06 +#define VER_MINORMINOR 00 OPENMPT_NAMESPACE_END diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/configure new/libopenmpt-0.7.6+release.autotools/configure --- old/libopenmpt-0.7.5+release.autotools/configure 2024-03-17 09:49:51.000000000 +0100 +++ new/libopenmpt-0.7.6+release.autotools/configure 2024-03-24 14:26:48.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for libopenmpt 0.7.5+release.autotools. +# Generated by GNU Autoconf 2.71 for libopenmpt 0.7.6+release.autotools. # # Report bugs to <https://bugs.openmpt.org/>. # @@ -621,8 +621,8 @@ # Identity of this package. PACKAGE_NAME='libopenmpt' PACKAGE_TARNAME='libopenmpt' -PACKAGE_VERSION='0.7.5+release.autotools' -PACKAGE_STRING='libopenmpt 0.7.5+release.autotools' +PACKAGE_VERSION='0.7.6+release.autotools' +PACKAGE_STRING='libopenmpt 0.7.6+release.autotools' PACKAGE_BUGREPORT='https://bugs.openmpt.org/' PACKAGE_URL='https://lib.openmpt.org/' @@ -1510,7 +1510,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libopenmpt 0.7.5+release.autotools to adapt to many kinds of systems. +\`configure' configures libopenmpt 0.7.6+release.autotools to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1581,7 +1581,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libopenmpt 0.7.5+release.autotools:";; + short | recursive ) echo "Configuration of libopenmpt 0.7.6+release.autotools:";; esac cat <<\_ACEOF @@ -1768,7 +1768,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libopenmpt configure 0.7.5+release.autotools +libopenmpt configure 0.7.6+release.autotools generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2148,7 +2148,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libopenmpt $as_me 0.7.5+release.autotools, which was +It was created by libopenmpt $as_me 0.7.6+release.autotools, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3644,7 +3644,7 @@ # Define the identity of the package. PACKAGE='libopenmpt' - VERSION='0.7.5+release.autotools' + VERSION='0.7.6+release.autotools' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -21837,13 +21837,13 @@ -printf "%s\n" "#define MPT_SVNURL \"https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.7.5\"" >>confdefs.h +printf "%s\n" "#define MPT_SVNURL \"https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.7.6\"" >>confdefs.h -printf "%s\n" "#define MPT_SVNVERSION \"20388\"" >>confdefs.h +printf "%s\n" "#define MPT_SVNVERSION \"20445\"" >>confdefs.h -printf "%s\n" "#define MPT_SVNDATE \"2024-03-17T07:44:31.885993Z\"" >>confdefs.h +printf "%s\n" "#define MPT_SVNDATE \"2024-03-24T12:17:57.924136Z\"" >>confdefs.h printf "%s\n" "#define MPT_PACKAGE true" >>confdefs.h @@ -25798,7 +25798,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libopenmpt $as_me 0.7.5+release.autotools, which was +This file was extended by libopenmpt $as_me 0.7.6+release.autotools, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -25858,7 +25858,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -libopenmpt config.status 0.7.5+release.autotools +libopenmpt config.status 0.7.6+release.autotools configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/configure.ac new/libopenmpt-0.7.6+release.autotools/configure.ac --- old/libopenmpt-0.7.5+release.autotools/configure.ac 2024-03-17 09:49:19.000000000 +0100 +++ new/libopenmpt-0.7.6+release.autotools/configure.ac 2024-03-24 14:26:21.000000000 +0100 @@ -1,4 +1,4 @@ -AC_INIT([libopenmpt], [0.7.5+release.autotools], [https://bugs.openmpt.org/], [libopenmpt], [https://lib.openmpt.org/]) +AC_INIT([libopenmpt], [0.7.6+release.autotools], [https://bugs.openmpt.org/], [libopenmpt], [https://lib.openmpt.org/]) AC_PREREQ([2.69]) # we do want 2.70, but distributions are not ready yet #AC_PREREQ([2.70]) @@ -62,9 +62,9 @@ AC_SUBST([LIBOPENMPT_LTVER_REVISION]) AC_SUBST([LIBOPENMPT_LTVER_AGE]) -AC_DEFINE([MPT_SVNURL], ["https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.7.5"], [svn version]) -AC_DEFINE([MPT_SVNVERSION], ["20388"], [svn version]) -AC_DEFINE([MPT_SVNDATE], ["2024-03-17T07:44:31.885993Z"], [svn date]) +AC_DEFINE([MPT_SVNURL], ["https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.7.6"], [svn version]) +AC_DEFINE([MPT_SVNVERSION], ["20445"], [svn version]) +AC_DEFINE([MPT_SVNDATE], ["2024-03-24T12:17:57.924136Z"], [svn date]) AC_DEFINE([MPT_PACKAGE], [true], [is package]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/doc/libopenmpt/changelog.md new/libopenmpt-0.7.6+release.autotools/doc/libopenmpt/changelog.md --- old/libopenmpt-0.7.5+release.autotools/doc/libopenmpt/changelog.md 2024-03-17 08:44:29.000000000 +0100 +++ new/libopenmpt-0.7.6+release.autotools/doc/libopenmpt/changelog.md 2024-03-24 13:17:56.000000000 +0100 @@ -5,6 +5,20 @@ For fully detailed change log, please see the source repository directly. This is just a high-level summary. +### libopenmpt 0.7.6 (2024-03-24) + + * [**Sec**] Potential heap out-of-bounds read or write past sample end with + malformed sustain loops in SymMOD files (r20420). + + * MED: Transposed samples were playing too low in some files (e.g. + mix94.mmd1). + * OKT: Some files with garbage at the end were rejected (e.g. + katharsis - piano lesson.okta). + * Compressor DMO: It was possible that the plugin would not behave as intended + at mix rates above 500 kHz. + * Avoid re-allocating the loop state map contents on every playthrough of the + module. + ### libopenmpt 0.7.5 (2024-03-17) * [**Sec**] Null-pointer write (32bit platforms) or excessive memory diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/libopenmpt/libopenmpt_version.h new/libopenmpt-0.7.6+release.autotools/libopenmpt/libopenmpt_version.h --- old/libopenmpt-0.7.5+release.autotools/libopenmpt/libopenmpt_version.h 2024-03-17 08:44:29.000000000 +0100 +++ new/libopenmpt-0.7.6+release.autotools/libopenmpt/libopenmpt_version.h 2024-03-24 13:17:56.000000000 +0100 @@ -21,7 +21,7 @@ /*! \brief libopenmpt minor version number */ #define OPENMPT_API_VERSION_MINOR 7 /*! \brief libopenmpt patch version number */ -#define OPENMPT_API_VERSION_PATCH 5 +#define OPENMPT_API_VERSION_PATCH 6 /*! \brief libopenmpt pre-release tag */ #define OPENMPT_API_VERSION_PREREL "" /*! \brief libopenmpt pre-release flag */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/libopenmpt/libopenmpt_version.mk new/libopenmpt-0.7.6+release.autotools/libopenmpt/libopenmpt_version.mk --- old/libopenmpt-0.7.5+release.autotools/libopenmpt/libopenmpt_version.mk 2024-03-17 08:44:29.000000000 +0100 +++ new/libopenmpt-0.7.6+release.autotools/libopenmpt/libopenmpt_version.mk 2024-03-24 13:17:56.000000000 +0100 @@ -1,8 +1,8 @@ LIBOPENMPT_VERSION_MAJOR=0 LIBOPENMPT_VERSION_MINOR=7 -LIBOPENMPT_VERSION_PATCH=5 +LIBOPENMPT_VERSION_PATCH=6 LIBOPENMPT_VERSION_PREREL= LIBOPENMPT_LTVER_CURRENT=4 -LIBOPENMPT_LTVER_REVISION=5 +LIBOPENMPT_LTVER_REVISION=6 LIBOPENMPT_LTVER_AGE=4 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/man/openmpt123.1 new/libopenmpt-0.7.6+release.autotools/man/openmpt123.1 --- old/libopenmpt-0.7.5+release.autotools/man/openmpt123.1 2024-03-17 09:49:16.000000000 +0100 +++ new/libopenmpt-0.7.6+release.autotools/man/openmpt123.1 2024-03-24 14:26:20.000000000 +0100 @@ -1,12 +1,12 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH OPENMPT123 "1" "March 2024" "openmpt123 v0.7.5" "User Commands" +.TH OPENMPT123 "1" "March 2024" "openmpt123 v0.7.6" "User Commands" .SH NAME openmpt123 - command line module music player based on libopenmpt .SH SYNOPSIS .B openmpt123 [\fI\,options\/\fR] [\fI\,--\/\fR] \fI\,file1 \/\fR[\fI\,file2\/\fR] ... .SH DESCRIPTION -openmpt123 v0.7.5, libopenmpt 0.7.5+r20388 (OpenMPT 1.31.05.02\-r20388 https://source.openmpt.org/svn/openmpt/tags/libopenmpt\-0.7.5@20388 (2024\-03\-17T07:44:31.885993Z) clean) +openmpt123 v0.7.6, libopenmpt 0.7.6+r20445 (OpenMPT 1.31.06.00 https://source.openmpt.org/svn/openmpt/tags/libopenmpt\-0.7.6@20445 (2024\-03\-24T12:17:57.924136Z) clean) Copyright \(co 2013\-2024 OpenMPT Project Developers and Contributors <https://lib.openmpt.org/> .PP openmpt123 plays module music files. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/soundlib/Load_med.cpp new/libopenmpt-0.7.6+release.autotools/soundlib/Load_med.cpp --- old/libopenmpt-0.7.5+release.autotools/soundlib/Load_med.cpp 2023-06-15 21:29:20.000000000 +0200 +++ new/libopenmpt-0.7.6+release.autotools/soundlib/Load_med.cpp 2024-03-17 13:34:44.000000000 +0100 @@ -818,6 +818,9 @@ instr.AssignSample(0); } + MMD0Sample sampleHeader; + sampleHeaderChunk.ReadStruct(sampleHeader); + uint8 numSamples = 1; static constexpr uint8 SamplesPerType[] = {1, 5, 3, 2, 4, 6, 7}; if(!isSynth && maskedType < std::size(SamplesPerType)) @@ -850,10 +853,10 @@ // TODO: Move octaves so that they align better (C-4 = lowest, we don't have access to the highest four octaves) for(int octave = 4; octave < 10; octave++) { - for(int note = 0; note < 12; note++) + for(int note = 0, i = 12 * octave; note < 12; note++, i++) { - instr.Keyboard[12 * octave + note] = smp + OctSampleMap[numSamples - 2][octave - 4]; - instr.NoteMap[12 * octave + note] += OctTransposeMap[numSamples - 2][octave - 4]; + instr.Keyboard[i] = smp + OctSampleMap[numSamples - 2][octave - 4]; + instr.NoteMap[i] = static_cast<uint8>(instr.NoteMap[i] + OctTransposeMap[numSamples - 2][octave - 4]); } } } else if(maskedType == MMDInstrHeader::EXTSAMPLE) @@ -862,18 +865,14 @@ instr.Transpose(-24); } else if(!isSynth && hardwareMixSamples) { - for(int octave = 7; octave < 10; octave++) + for(auto ¬e : instr.NoteMap) { - for(int note = 0; note < 12; note++) - { - instr.NoteMap[12 * octave + note] -= static_cast<uint8>((octave - 6) * 12); - } + int realNote = note + sampleHeader.sampleTranspose; + if(realNote >= NOTE_MIDDLEC + 24) + note -= static_cast<uint8>(mpt::align_down(realNote - NOTE_MIDDLEC - 12, 12)); } } - MMD0Sample sampleHeader; - sampleHeaderChunk.ReadStruct(sampleHeader); - // midiChannel = 0xFF == midi instrument but with invalid channel, midiChannel = 0x00 == sample-based instrument? if(sampleHeader.midiChannel > 0 && sampleHeader.midiChannel <= 16) { @@ -1153,12 +1152,12 @@ if(!order.empty()) order.push_back(order.GetIgnoreIndex()); + const size_t orderStart = order.size(); size_t readOrders = playSeq.length; if(!file.CanRead(readOrders)) LimitMax(readOrders, file.BytesLeft()); LimitMax(readOrders, ORDERINDEX_MAX); - size_t orderStart = order.size(); order.reserve(orderStart + readOrders); for(size_t ord = 0; ord < readOrders; ord++) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/soundlib/Load_okt.cpp new/libopenmpt-0.7.6+release.autotools/soundlib/Load_okt.cpp --- old/libopenmpt-0.7.5+release.autotools/soundlib/Load_okt.cpp 2024-01-10 21:17:58.000000000 +0100 +++ new/libopenmpt-0.7.6+release.autotools/soundlib/Load_okt.cpp 2024-03-17 17:33:20.000000000 +0100 @@ -29,8 +29,8 @@ idSBOD = MagicBE("SBOD"), }; - uint32be signature; // IFF chunk name - uint32be chunksize; // chunk size without header + uint32be signature; // IFF chunk name + uint32be chunksize; // chunk size without header }; MPT_BINARY_STRUCT(OktIffChunk, 8) @@ -328,19 +328,6 @@ { return ProbeFailure; } - OktIffChunk iffHead; - if(!file.ReadStruct(iffHead)) - { - return ProbeWantMoreData; - } - if(iffHead.chunksize == 0) - { - return ProbeFailure; - } - if((iffHead.signature & 0x80808080u) != 0) // ASCII? - { - return ProbeFailure; - } MPT_UNREFERENCED_PARAMETER(pfilesize); return ProbeSuccess; } @@ -354,7 +341,6 @@ return false; } - // prepare some arrays to store offsets etc. std::vector<FileReader> patternChunks; std::vector<FileReader> sampleChunks; std::array<int8, 8> pairedChn{{}}; @@ -371,15 +357,11 @@ { OktIffChunk iffHead; if(!file.ReadStruct(iffHead)) - { break; - } FileReader chunk = file.ReadChunk(iffHead.chunksize); if(!chunk.IsValid()) - { - break; - } + continue; switch(iffHead.signature) { @@ -457,12 +439,6 @@ sampleChunks.push_back(chunk); } break; - - default: - // Non-ASCII chunk ID? - if(iffHead.signature & 0x80808080) - return false; - break; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/soundlib/Load_symmod.cpp new/libopenmpt-0.7.6+release.autotools/soundlib/Load_symmod.cpp --- old/libopenmpt-0.7.5+release.autotools/soundlib/Load_symmod.cpp 2023-03-19 13:01:38.000000000 +0100 +++ new/libopenmpt-0.7.6+release.autotools/soundlib/Load_symmod.cpp 2024-03-21 21:52:11.000000000 +0100 @@ -665,7 +665,7 @@ loopLen = (loopLen << 16) + loopLenFine; const double loopScale = static_cast<double>(mptSmp.nLength) / (100 << 16); - loopStart = mpt::saturate_cast<SmpLength>(loopStart * loopScale); + loopStart = std::min(mptSmp.nLength, mpt::saturate_cast<SmpLength>(loopStart * loopScale)); loopLen = std::min(mptSmp.nLength - loopStart, mpt::saturate_cast<SmpLength>(loopLen * loopScale)); } else if(mptSmp.HasSampleData()) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/soundlib/RowVisitor.cpp new/libopenmpt-0.7.6+release.autotools/soundlib/RowVisitor.cpp --- old/libopenmpt-0.7.5+release.autotools/soundlib/RowVisitor.cpp 2023-03-04 00:58:04.000000000 +0100 +++ new/libopenmpt-0.7.6+release.autotools/soundlib/RowVisitor.cpp 2024-03-23 15:09:39.000000000 +0100 @@ -23,7 +23,7 @@ RowVisitor::LoopState::LoopState(const ChannelStates &chnState, const bool ignoreRow) { - // Rather than storing the exact loop count vector, we compute a FNV-1a 64-bit hash of it. + // Rather than storing the exact loop count vector, we compute an FNV-1a 64-bit hash of it. // This means we can store the loop state in a small and fixed amount of memory. // In theory there is the possibility of hash collisions for different loop states, but in practice, // the relevant inputs for the hashing algorithm are extremely unlikely to produce collisions. @@ -84,10 +84,15 @@ { auto &order = Order(); const ORDERINDEX endOrder = order.GetLengthTailTrimmed(); + bool reserveLoopStates = true; m_visitedRows.resize(endOrder); if(reset) { - m_visitedLoopStates.clear(); + reserveLoopStates = m_visitedLoopStates.empty(); + for(auto &loopState : m_visitedLoopStates) + { + loopState.second.clear(); + } m_rowsSpentInLoops = 0; } @@ -104,7 +109,7 @@ else visitedRows.resize(numRows, false); - if(!order.IsValidPat(ord)) + if(!reserveLoopStates || !order.IsValidPat(ord)) continue; const ROWINDEX startRow = std::min(static_cast<ROWINDEX>(reset ? 0 : visitedRows.size()), numRows); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.7.5+release.autotools/soundlib/plugins/dmo/Compressor.cpp new/libopenmpt-0.7.6+release.autotools/soundlib/plugins/dmo/Compressor.cpp --- old/libopenmpt-0.7.5+release.autotools/soundlib/plugins/dmo/Compressor.cpp 2023-01-21 09:08:51.000000000 +0100 +++ new/libopenmpt-0.7.6+release.autotools/soundlib/plugins/dmo/Compressor.cpp 2024-03-17 13:34:44.000000000 +0100 @@ -88,10 +88,10 @@ } compGainPow >>= (31 - compGainInt); - int32 readOffset = m_predelay + m_bufPos * 4096 + m_bufSize - 1; + int32 readOffset = m_predelay + m_bufSize - 1; readOffset /= 4096; - readOffset %= m_bufSize; - + readOffset = (readOffset + m_bufPos) % m_bufSize; + float outGain = (static_cast<float>(compGainPow) * (1.0f / 2147483648.0f)) * m_gain; *(out[0])++ = m_buffer[readOffset * 2] * outGain; *(out[1])++ = m_buffer[readOffset * 2 + 1] * outGain;
participants (1)
-
Source-Sync