Merge branch 'rochade' master 3.2.3+dfsg2-11
authormirabilos <tg@debian.org>
Sat, 5 Jun 2021 17:31:44 +0000 (19:31 +0200)
committermirabilos <mirabilos@evolvis.org>
Sat, 5 Jun 2021 17:31:44 +0000 (19:31 +0200)
1  2 
debian/patches/experiments/valid-soundfont.diff

@@@ -18,7 -18,7 +18,7 @@@ Forwarded: https://github.com/musescore
  
  --- a/fluid/sfont.cpp
  +++ b/fluid/sfont.cpp
 -@@ -589,6 +589,7 @@ Sample::Sample(SFont* s)
 +@@ -610,6 +610,7 @@ Sample::Sample(SFont* s)
         data        = 0;
         amplitude_that_reaches_noise_floor_is_valid = false;
         amplitude_that_reaches_noise_floor = 0.0;
         }
   
   //---------------------------------------------------------
 -@@ -625,11 +626,12 @@ void Sample::load()
 - #ifdef SOUNDFONT3
 -             char* p = new char[size];
 -             if (fd.read(p, size) != size) {
 --                  printf("  read %d failed\n", size);
 -                   delete[] p;
 +@@ -647,18 +648,22 @@ void Sample::load()
 +             std::vector<char> p;
 +             p.resize(size);
 +             if (fd.read(p.data(), size) != size) {
 +-                  qDebug("read %d failed", size);
  +                  qWarning("SoundFont(%s) Sample(%s) read %u bytes failed", qPrintable(sf->get_name()), name, size);
  +                  setValid(false);
                     return;
                     }
 --            decompressOggVorbis(p, size);
 -+            setValid(decompressOggVorbis(p, size));
 -             delete[] p;
 +-            decompressOggVorbis(p.data(), size);
 ++            setValid(decompressOggVorbis(p.data(), size));
   #endif
               }
 -@@ -637,8 +639,11 @@ void Sample::load()
 +       else {
               data = new short[size];
               size *= sizeof(short);
   
@@@ -52,7 -54,7 +52,7 @@@
   
               if (QSysInfo::ByteOrder == QSysInfo::BigEndian) {
                     unsigned char hi, lo;
 -@@ -652,11 +657,34 @@ void Sample::load()
 +@@ -672,11 +677,34 @@ void Sample::load()
                           data[i] = s;
                           }
                     }
@@@ -88,7 -90,7 +88,7 @@@
         optimize();
         }
   
 -@@ -725,6 +753,8 @@ bool SFont::load()
 +@@ -745,6 +773,8 @@ bool SFont::load()
               }
         SFChunk chunk;
   
@@@ -97,7 -99,7 +97,7 @@@
         try {
               readchunk(&chunk);
               if (chunkid(chunk.id) != RIFF_ID)
 -@@ -1599,9 +1629,7 @@ void SFont::load_shdr (int size)
 +@@ -1624,9 +1654,7 @@ void SFont::load_shdr (int size)
         for (int i = 0; i < size; i++) {
               Sample* p = new Sample(this);
               sample.append(p);
               READD (p->start);
               READD (p->end);        /* - end, loopstart and loopend */
               READD (p->loopstart);    /* - will be checked and turned into */
 -@@ -1616,28 +1644,47 @@ void SFont::load_shdr (int size)
 +@@ -1641,28 +1669,47 @@ void SFont::load_shdr (int size)
                     continue;
                     }
               if ((p->end > getSamplesize()) || (p->start > (p->end - 4))) {
  +                        p->loopstart = p->loopend = p->start;
                           }
  -                  if ((p->end - p->start) < 8)
- +                  else if (p->loopstart < p->loopend) {
+ +                  else if (p->loopstart > p->loopend) {
  +                        unsigned int looptmp;
  +
  +                        qWarning("Sample(%s) swapping reversed loopstart<=>loopend",
         FSKIP (SFSHDRSIZE);    /* skip terminal shdr */
  --- a/fluid/sfont.h
  +++ b/fluid/sfont.h
 -@@ -147,8 +147,10 @@ class Sample {
 +@@ -150,8 +150,10 @@ class Sample {
             filled out automatically */
         /* Set this to zero, when submitting a new sample. */
   
   
         Sample(SFont*);
         ~Sample();
 -@@ -159,7 +161,7 @@ class Sample {
 +@@ -162,7 +164,7 @@ class Sample {
         bool valid() const    { return _valid; }
         void setValid(bool v) { _valid = v; }
   #ifdef SOUNDFONT3
  +            loopstart = loopend = start;
               }
  -      end = frames - 1;
- +      else if (loopstart < loopend) {
+ +      else if (loopstart > loopend) {
  +            unsigned int looptmp;
   
  -      if (loopend > end ||loopstart >= loopend || loopstart <= start) {
         return true;
  --- a/fluid/voice.cpp
  +++ b/fluid/voice.cpp
 -@@ -1170,8 +1170,8 @@ void Voice::update_param(int _gen)
 +@@ -1171,8 +1171,8 @@ void Voice::update_param(int _gen)
               case GEN_STARTADDRCOARSEOFS:        /* SF2.01 section 8.1.3 # 4 */
                     if (sample != 0) {
                           start = (sample->start
                           check_sample_sanity_flag = FLUID_SAMPLESANITY_CHECK;
                           }
                     break;
 -@@ -1180,8 +1180,8 @@ void Voice::update_param(int _gen)
 +@@ -1181,8 +1181,8 @@ void Voice::update_param(int _gen)
               case GEN_ENDADDRCOARSEOFS:           /* SF2.01 section 8.1.3 # 12 */
                     if (sample != 0) {
                           end = (sample->end
                           check_sample_sanity_flag = FLUID_SAMPLESANITY_CHECK;
                           }
                     break;
 -@@ -1190,8 +1190,8 @@ void Voice::update_param(int _gen)
 +@@ -1191,8 +1191,8 @@ void Voice::update_param(int _gen)
               case GEN_STARTLOOPADDRCOARSEOFS:     /* SF2.01 section 8.1.3 # 45 */
                     if (sample != 0) {
                           loopstart = (sample->loopstart
                           check_sample_sanity_flag = FLUID_SAMPLESANITY_CHECK;
                           }
                     break;
 -@@ -1200,8 +1200,8 @@ void Voice::update_param(int _gen)
 +@@ -1201,8 +1201,8 @@ void Voice::update_param(int _gen)
               case GEN_ENDLOOPADDRCOARSEOFS:       /* SF2.01 section 8.1.3 # 50 */
                     if (sample != 0) {
                           loopend = (sample->loopend
                           check_sample_sanity_flag = FLUID_SAMPLESANITY_CHECK;
                           }
                     break;
 -@@ -1636,22 +1636,22 @@ float Voice::get_lower_boundary_for_atte
 +@@ -1646,22 +1646,22 @@ float Voice::get_lower_boundary_for_atte
    */
   void Voice::check_sample_sanity()
         {
              return;
   
   #if 0
 --      printf("Sample from %i to %i\n", sample->start, sample->end);
 --      printf("Sample loop from %i %i\n", sample->loopstart, sample->loopend);
 --      printf("Playback from %i to %i\n", start, end);
 --      printf("Playback loop from %i to %i\n", loopstart, loopend);
 -+      printf("Sample from %u to %u\n", sample->start, sample->end);
 -+      printf("Sample loop from %u to %u\n", sample->loopstart, sample->loopend);
 -+      printf("Playback from %u to %u\n", start, end);
 -+      printf("Playback loop from %u to %u\n", loopstart, loopend);
 +-printf("Sample from %i to %i\n", sample->start, sample->end);
 +-printf("Sample loop from %i %i\n", sample->loopstart, sample->loopend);
 +-printf("Playback from %i to %i\n", start, end);
 +-printf("Playback loop from %i to %i\n", loopstart, loopend);
 ++printf("Sample from %u to %u\n", sample->start, sample->end);
 ++printf("Sample loop from %u to %u\n", sample->loopstart, sample->loopend);
 ++printf("Playback from %u to %u\n", start, end);
 ++printf("Playback loop from %u to %u\n", loopstart, loopend);
   #endif
   
         /* Keep the start point within the sample data */
 -@@ -1668,7 +1668,7 @@ void Voice::check_sample_sanity()
 +@@ -1678,7 +1678,7 @@ printf("Playback loop from %i to %i\n",
   
         /* Keep start and end point in the right order */
         if (start > end) {
               start    = end;
               end      = temp;
               }
 -@@ -1694,7 +1694,7 @@ void Voice::check_sample_sanity()
 +@@ -1704,7 +1704,7 @@ printf("Playback loop from %i to %i\n",
   
               /* Keep loop start and end point in the right order */
               if (loopstart > loopend){
                    loopstart = loopend;
                    loopend   = temp;
                     }
 -@@ -1706,7 +1706,7 @@ void Voice::check_sample_sanity()
 +@@ -1716,7 +1716,7 @@ printf("Playback loop from %i to %i\n",
               /* The loop points may have changed. Obtain a new estimate for the loop volume. */
               /* Is the voice loop within the sample loop?
                */
                    /* Is there a valid peak amplitude available for the loop? */
                    if (sample->amplitude_that_reaches_noise_floor_is_valid) {
                          amplitude_that_reaches_noise_floor_loop = sample->amplitude_that_reaches_noise_floor;
 -@@ -1745,13 +1745,13 @@ void Voice::check_sample_sanity()
 +@@ -1755,13 +1755,13 @@ printf("Playback loop from %i to %i\n",
               * the sample, enter the loop and proceed as expected => no
               * actions required.
               */
   
       /* Sample sanity has been assured. Don't check again, until some
          sample parameter is changed by modulation.
 -@@ -1795,7 +1795,6 @@ void Sample::optimize()
 +@@ -1805,7 +1805,6 @@ void Sample::optimize()
         signed short peak;
         float normalized_amplitude_during_loop;
         double result;
   
         /* ignore ROM and other(?) invalid samples */
         if (!s->valid())
 -@@ -1803,7 +1802,7 @@ void Sample::optimize()
 +@@ -1813,7 +1812,7 @@ void Sample::optimize()
   
         if (!s->amplitude_that_reaches_noise_floor_is_valid) { /* Only once */
               /* Scan the loop */