upgrade to JUCE 5.4.3. Remove (probably) unused JUCE modules. Remove VST2 target (it's been end-of-life'd by Steinberg and by JUCE)
This commit is contained in:
		@ -75,6 +75,27 @@ String AudioChannelSet::getChannelTypeName (AudioChannelSet::ChannelType type)
 | 
			
		||||
        case ambisonicZ:          return NEEDS_TRANS("Ambisonic Z");
 | 
			
		||||
        case topSideLeft:         return NEEDS_TRANS("Top Side Left");
 | 
			
		||||
        case topSideRight:        return NEEDS_TRANS("Top Side Right");
 | 
			
		||||
        case ambisonicACN4:       return NEEDS_TRANS("Ambisonic 4");
 | 
			
		||||
        case ambisonicACN5:       return NEEDS_TRANS("Ambisonic 5");
 | 
			
		||||
        case ambisonicACN6:       return NEEDS_TRANS("Ambisonic 6");
 | 
			
		||||
        case ambisonicACN7:       return NEEDS_TRANS("Ambisonic 7");
 | 
			
		||||
        case ambisonicACN8:       return NEEDS_TRANS("Ambisonic 8");
 | 
			
		||||
        case ambisonicACN9:       return NEEDS_TRANS("Ambisonic 9");
 | 
			
		||||
        case ambisonicACN10:      return NEEDS_TRANS("Ambisonic 10");
 | 
			
		||||
        case ambisonicACN11:      return NEEDS_TRANS("Ambisonic 11");
 | 
			
		||||
        case ambisonicACN12:      return NEEDS_TRANS("Ambisonic 12");
 | 
			
		||||
        case ambisonicACN13:      return NEEDS_TRANS("Ambisonic 13");
 | 
			
		||||
        case ambisonicACN14:      return NEEDS_TRANS("Ambisonic 14");
 | 
			
		||||
        case ambisonicACN15:      return NEEDS_TRANS("Ambisonic 15");
 | 
			
		||||
        case bottomFrontLeft:     return NEEDS_TRANS("Bottom Front Left");
 | 
			
		||||
        case bottomFrontCentre:   return NEEDS_TRANS("Bottom Front Centre");
 | 
			
		||||
        case bottomFrontRight:    return NEEDS_TRANS("Bottom Front Right");
 | 
			
		||||
        case bottomSideLeft:      return NEEDS_TRANS("Bottom Side Left");
 | 
			
		||||
        case bottomSideRight:     return NEEDS_TRANS("Bottom Side Right");
 | 
			
		||||
        case bottomRearLeft:      return NEEDS_TRANS("Bottom Rear Left");
 | 
			
		||||
        case bottomRearCentre:    return NEEDS_TRANS("Bottom Rear Centre");
 | 
			
		||||
        case bottomRearRight:     return NEEDS_TRANS("Bottom Rear Right");
 | 
			
		||||
        case discreteChannel0:    return NEEDS_TRANS("Discrete channel");
 | 
			
		||||
        default:                  break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -115,8 +136,28 @@ String AudioChannelSet::getAbbreviatedChannelTypeName (AudioChannelSet::ChannelT
 | 
			
		||||
        case ambisonicACN1:       return "ACN1";
 | 
			
		||||
        case ambisonicACN2:       return "ACN2";
 | 
			
		||||
        case ambisonicACN3:       return "ACN3";
 | 
			
		||||
        case ambisonicACN4:       return "ACN4";
 | 
			
		||||
        case ambisonicACN5:       return "ACN5";
 | 
			
		||||
        case ambisonicACN6:       return "ACN6";
 | 
			
		||||
        case ambisonicACN7:       return "ACN7";
 | 
			
		||||
        case ambisonicACN8:       return "ACN8";
 | 
			
		||||
        case ambisonicACN9:       return "ACN9";
 | 
			
		||||
        case ambisonicACN10:      return "ACN10";
 | 
			
		||||
        case ambisonicACN11:      return "ACN11";
 | 
			
		||||
        case ambisonicACN12:      return "ACN12";
 | 
			
		||||
        case ambisonicACN13:      return "ACN13";
 | 
			
		||||
        case ambisonicACN14:      return "ACN14";
 | 
			
		||||
        case ambisonicACN15:      return "ACN15";
 | 
			
		||||
        case topSideLeft:         return "Tsl";
 | 
			
		||||
        case topSideRight:        return "Tsr";
 | 
			
		||||
        case bottomFrontLeft:     return "Bfl";
 | 
			
		||||
        case bottomFrontCentre:   return "Bfc";
 | 
			
		||||
        case bottomFrontRight:    return "Bfr";
 | 
			
		||||
        case bottomSideLeft:      return "Bsl";
 | 
			
		||||
        case bottomSideRight:     return "Bsr";
 | 
			
		||||
        case bottomRearLeft:      return "Brl";
 | 
			
		||||
        case bottomRearCentre:    return "Brc";
 | 
			
		||||
        case bottomRearRight:     return "Brr";
 | 
			
		||||
        default:                  break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -130,38 +171,61 @@ AudioChannelSet::ChannelType AudioChannelSet::getChannelTypeFromAbbreviation (co
 | 
			
		||||
{
 | 
			
		||||
    if (abbr.length() > 0 && (abbr[0] >= '0' && abbr[0] <= '9'))
 | 
			
		||||
        return static_cast<AudioChannelSet::ChannelType> (static_cast<int> (discreteChannel0)
 | 
			
		||||
                                                               + abbr.getIntValue() + 1);
 | 
			
		||||
 | 
			
		||||
    if (abbr == "L")    return left;
 | 
			
		||||
    if (abbr == "R")    return right;
 | 
			
		||||
    if (abbr == "C")    return centre;
 | 
			
		||||
    if (abbr == "Lfe")  return LFE;
 | 
			
		||||
    if (abbr == "Ls")   return leftSurround;
 | 
			
		||||
    if (abbr == "Rs")   return rightSurround;
 | 
			
		||||
    if (abbr == "Lc")   return leftCentre;
 | 
			
		||||
    if (abbr == "Rc")   return rightCentre;
 | 
			
		||||
    if (abbr == "Cs")   return centreSurround;
 | 
			
		||||
    if (abbr == "Lrs")  return leftSurroundRear;
 | 
			
		||||
    if (abbr == "Rrs")  return rightSurroundRear;
 | 
			
		||||
    if (abbr == "Tm")   return topMiddle;
 | 
			
		||||
    if (abbr == "Tfl")  return topFrontLeft;
 | 
			
		||||
    if (abbr == "Tfc")  return topFrontCentre;
 | 
			
		||||
    if (abbr == "Tfr")  return topFrontRight;
 | 
			
		||||
    if (abbr == "Trl")  return topRearLeft;
 | 
			
		||||
    if (abbr == "Trc")  return topRearCentre;
 | 
			
		||||
    if (abbr == "Trr")  return topRearRight;
 | 
			
		||||
    if (abbr == "Wl")   return wideLeft;
 | 
			
		||||
    if (abbr == "Wr")   return wideRight;
 | 
			
		||||
    if (abbr == "Lfe2") return LFE2;
 | 
			
		||||
    if (abbr == "Lss")  return leftSurroundSide;
 | 
			
		||||
    if (abbr == "Rss")  return rightSurroundSide;
 | 
			
		||||
    if (abbr == "W")    return ambisonicW;
 | 
			
		||||
    if (abbr == "X")    return ambisonicX;
 | 
			
		||||
    if (abbr == "Y")    return ambisonicY;
 | 
			
		||||
    if (abbr == "Z")    return ambisonicZ;
 | 
			
		||||
    if (abbr == "Tsl")  return topSideLeft;
 | 
			
		||||
    if (abbr == "Tsr")  return topSideRight;
 | 
			
		||||
                                                               + abbr.getIntValue() - 1);
 | 
			
		||||
 | 
			
		||||
    if (abbr == "L")     return left;
 | 
			
		||||
    if (abbr == "R")     return right;
 | 
			
		||||
    if (abbr == "C")     return centre;
 | 
			
		||||
    if (abbr == "Lfe")   return LFE;
 | 
			
		||||
    if (abbr == "Ls")    return leftSurround;
 | 
			
		||||
    if (abbr == "Rs")    return rightSurround;
 | 
			
		||||
    if (abbr == "Lc")    return leftCentre;
 | 
			
		||||
    if (abbr == "Rc")    return rightCentre;
 | 
			
		||||
    if (abbr == "Cs")    return centreSurround;
 | 
			
		||||
    if (abbr == "Lrs")   return leftSurroundRear;
 | 
			
		||||
    if (abbr == "Rrs")   return rightSurroundRear;
 | 
			
		||||
    if (abbr == "Tm")    return topMiddle;
 | 
			
		||||
    if (abbr == "Tfl")   return topFrontLeft;
 | 
			
		||||
    if (abbr == "Tfc")   return topFrontCentre;
 | 
			
		||||
    if (abbr == "Tfr")   return topFrontRight;
 | 
			
		||||
    if (abbr == "Trl")   return topRearLeft;
 | 
			
		||||
    if (abbr == "Trc")   return topRearCentre;
 | 
			
		||||
    if (abbr == "Trr")   return topRearRight;
 | 
			
		||||
    if (abbr == "Wl")    return wideLeft;
 | 
			
		||||
    if (abbr == "Wr")    return wideRight;
 | 
			
		||||
    if (abbr == "Lfe2")  return LFE2;
 | 
			
		||||
    if (abbr == "Lss")   return leftSurroundSide;
 | 
			
		||||
    if (abbr == "Rss")   return rightSurroundSide;
 | 
			
		||||
    if (abbr == "W")     return ambisonicW;
 | 
			
		||||
    if (abbr == "X")     return ambisonicX;
 | 
			
		||||
    if (abbr == "Y")     return ambisonicY;
 | 
			
		||||
    if (abbr == "Z")     return ambisonicZ;
 | 
			
		||||
    if (abbr == "ACN0")  return ambisonicACN0;
 | 
			
		||||
    if (abbr == "ACN1")  return ambisonicACN1;
 | 
			
		||||
    if (abbr == "ACN2")  return ambisonicACN2;
 | 
			
		||||
    if (abbr == "ACN3")  return ambisonicACN3;
 | 
			
		||||
    if (abbr == "ACN4")  return ambisonicACN4;
 | 
			
		||||
    if (abbr == "ACN5")  return ambisonicACN5;
 | 
			
		||||
    if (abbr == "ACN6")  return ambisonicACN6;
 | 
			
		||||
    if (abbr == "ACN7")  return ambisonicACN7;
 | 
			
		||||
    if (abbr == "ACN8")  return ambisonicACN8;
 | 
			
		||||
    if (abbr == "ACN9")  return ambisonicACN9;
 | 
			
		||||
    if (abbr == "ACN10") return ambisonicACN10;
 | 
			
		||||
    if (abbr == "ACN11") return ambisonicACN11;
 | 
			
		||||
    if (abbr == "ACN12") return ambisonicACN12;
 | 
			
		||||
    if (abbr == "ACN13") return ambisonicACN13;
 | 
			
		||||
    if (abbr == "ACN14") return ambisonicACN14;
 | 
			
		||||
    if (abbr == "ACN15") return ambisonicACN15;
 | 
			
		||||
    if (abbr == "Tsl")   return topSideLeft;
 | 
			
		||||
    if (abbr == "Tsr")   return topSideRight;
 | 
			
		||||
    if (abbr == "Bfl")   return bottomFrontLeft;
 | 
			
		||||
    if (abbr == "Bfc")   return bottomFrontCentre;
 | 
			
		||||
    if (abbr == "Bfr")   return bottomFrontRight;
 | 
			
		||||
    if (abbr == "Bsl")   return bottomSideLeft;
 | 
			
		||||
    if (abbr == "Bsr")   return bottomSideRight;
 | 
			
		||||
    if (abbr == "Brl")   return bottomRearLeft;
 | 
			
		||||
    if (abbr == "Brc")   return bottomRearCentre;
 | 
			
		||||
    if (abbr == "Brr")   return bottomRearRight;
 | 
			
		||||
    return unknown;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -49,7 +49,7 @@ public:
 | 
			
		||||
    /** Creates an empty channel set.
 | 
			
		||||
        You can call addChannel to add channels to the set.
 | 
			
		||||
    */
 | 
			
		||||
    AudioChannelSet() noexcept  {}
 | 
			
		||||
    AudioChannelSet() = default;
 | 
			
		||||
 | 
			
		||||
    /** Creates a zero-channel set which can be used to indicate that a
 | 
			
		||||
        bus is disabled. */
 | 
			
		||||
@ -365,7 +365,21 @@ public:
 | 
			
		||||
        ambisonicZ          = ambisonicACN2, /**< Same as first-order ambisonic channel number 2. */
 | 
			
		||||
 | 
			
		||||
        //==============================================================================
 | 
			
		||||
        discreteChannel0    = 64  /**< Non-typed individual channels are indexed upwards from this value. */
 | 
			
		||||
        bottomFrontLeft     = 62, /**< Bottom Front Left (Bfl)   */
 | 
			
		||||
        bottomFrontCentre   = 63, /**< Bottom Front Centre (Bfc) */
 | 
			
		||||
        bottomFrontRight    = 64, /**< Bottom Front Right (Bfr)  */
 | 
			
		||||
 | 
			
		||||
        proxymityLeft       = 65, /**< Proximity Left (Pl)  */
 | 
			
		||||
        proximityRight      = 66, /**< Proximity Right (Pr) */
 | 
			
		||||
 | 
			
		||||
        bottomSideLeft      = 67, /**< Bottom Side Left (Bsl)   */
 | 
			
		||||
        bottomSideRight     = 68, /**< Bottom Side Right (Bsr)  */
 | 
			
		||||
        bottomRearLeft      = 69, /**< Bottom Rear Left (Brl)  */
 | 
			
		||||
        bottomRearCentre    = 70, /**< Bottom Rear Center (Brc)  */
 | 
			
		||||
        bottomRearRight     = 71, /**< Bottom Rear Right (Brr)  */
 | 
			
		||||
 | 
			
		||||
        //==============================================================================
 | 
			
		||||
        discreteChannel0    = 128  /**< Non-typed individual channels are indexed upwards from this value. */
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /** Returns the name of a given channel type. For example, this method may return "Surround Left". */
 | 
			
		||||
 | 
			
		||||
@ -23,16 +23,16 @@
 | 
			
		||||
namespace juce
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::convertFloatToInt16LE (const float* source, void* dest, int numSamples, const int destBytesPerSample)
 | 
			
		||||
void AudioDataConverters::convertFloatToInt16LE (const float* source, void* dest, int numSamples, int destBytesPerSample)
 | 
			
		||||
{
 | 
			
		||||
    const double maxVal = (double) 0x7fff;
 | 
			
		||||
    char* intData = static_cast<char*> (dest);
 | 
			
		||||
    auto maxVal = (double) 0x7fff;
 | 
			
		||||
    auto intData = static_cast<char*> (dest);
 | 
			
		||||
 | 
			
		||||
    if (dest != (void*) source || destBytesPerSample <= 4)
 | 
			
		||||
    {
 | 
			
		||||
        for (int i = 0; i < numSamples; ++i)
 | 
			
		||||
        {
 | 
			
		||||
            *(uint16*) intData = ByteOrder::swapIfBigEndian ((uint16) (short) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])));
 | 
			
		||||
            *reinterpret_cast<uint16*> (intData) = ByteOrder::swapIfBigEndian ((uint16) (short) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])));
 | 
			
		||||
            intData += destBytesPerSample;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@ -43,21 +43,21 @@ void AudioDataConverters::convertFloatToInt16LE (const float* source, void* dest
 | 
			
		||||
        for (int i = numSamples; --i >= 0;)
 | 
			
		||||
        {
 | 
			
		||||
            intData -= destBytesPerSample;
 | 
			
		||||
            *(uint16*) intData = ByteOrder::swapIfBigEndian ((uint16) (short) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])));
 | 
			
		||||
            *reinterpret_cast<uint16*> (intData) = ByteOrder::swapIfBigEndian ((uint16) (short) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::convertFloatToInt16BE (const float* source, void* dest, int numSamples, const int destBytesPerSample)
 | 
			
		||||
void AudioDataConverters::convertFloatToInt16BE (const float* source, void* dest, int numSamples, int destBytesPerSample)
 | 
			
		||||
{
 | 
			
		||||
    const double maxVal = (double) 0x7fff;
 | 
			
		||||
    char* intData = static_cast<char*> (dest);
 | 
			
		||||
    auto maxVal = (double) 0x7fff;
 | 
			
		||||
    auto intData = static_cast<char*> (dest);
 | 
			
		||||
 | 
			
		||||
    if (dest != (void*) source || destBytesPerSample <= 4)
 | 
			
		||||
    {
 | 
			
		||||
        for (int i = 0; i < numSamples; ++i)
 | 
			
		||||
        {
 | 
			
		||||
            *(uint16*) intData = ByteOrder::swapIfLittleEndian ((uint16) (short) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])));
 | 
			
		||||
            *reinterpret_cast<uint16*> (intData) = ByteOrder::swapIfLittleEndian ((uint16) (short) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])));
 | 
			
		||||
            intData += destBytesPerSample;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@ -68,15 +68,15 @@ void AudioDataConverters::convertFloatToInt16BE (const float* source, void* dest
 | 
			
		||||
        for (int i = numSamples; --i >= 0;)
 | 
			
		||||
        {
 | 
			
		||||
            intData -= destBytesPerSample;
 | 
			
		||||
            *(uint16*) intData = ByteOrder::swapIfLittleEndian ((uint16) (short) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])));
 | 
			
		||||
            *reinterpret_cast<uint16*> (intData) = ByteOrder::swapIfLittleEndian ((uint16) (short) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::convertFloatToInt24LE (const float* source, void* dest, int numSamples, const int destBytesPerSample)
 | 
			
		||||
void AudioDataConverters::convertFloatToInt24LE (const float* source, void* dest, int numSamples, int destBytesPerSample)
 | 
			
		||||
{
 | 
			
		||||
    const double maxVal = (double) 0x7fffff;
 | 
			
		||||
    char* intData = static_cast<char*> (dest);
 | 
			
		||||
    auto maxVal = (double) 0x7fffff;
 | 
			
		||||
    auto intData = static_cast<char*> (dest);
 | 
			
		||||
 | 
			
		||||
    if (dest != (void*) source || destBytesPerSample <= 4)
 | 
			
		||||
    {
 | 
			
		||||
@ -98,10 +98,10 @@ void AudioDataConverters::convertFloatToInt24LE (const float* source, void* dest
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::convertFloatToInt24BE (const float* source, void* dest, int numSamples, const int destBytesPerSample)
 | 
			
		||||
void AudioDataConverters::convertFloatToInt24BE (const float* source, void* dest, int numSamples, int destBytesPerSample)
 | 
			
		||||
{
 | 
			
		||||
    const double maxVal = (double) 0x7fffff;
 | 
			
		||||
    char* intData = static_cast<char*> (dest);
 | 
			
		||||
    auto maxVal = (double) 0x7fffff;
 | 
			
		||||
    auto intData = static_cast<char*> (dest);
 | 
			
		||||
 | 
			
		||||
    if (dest != (void*) source || destBytesPerSample <= 4)
 | 
			
		||||
    {
 | 
			
		||||
@ -123,16 +123,16 @@ void AudioDataConverters::convertFloatToInt24BE (const float* source, void* dest
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::convertFloatToInt32LE (const float* source, void* dest, int numSamples, const int destBytesPerSample)
 | 
			
		||||
void AudioDataConverters::convertFloatToInt32LE (const float* source, void* dest, int numSamples, int destBytesPerSample)
 | 
			
		||||
{
 | 
			
		||||
    const double maxVal = (double) 0x7fffffff;
 | 
			
		||||
    char* intData = static_cast<char*> (dest);
 | 
			
		||||
    auto maxVal = (double) 0x7fffffff;
 | 
			
		||||
    auto intData = static_cast<char*> (dest);
 | 
			
		||||
 | 
			
		||||
    if (dest != (void*) source || destBytesPerSample <= 4)
 | 
			
		||||
    {
 | 
			
		||||
        for (int i = 0; i < numSamples; ++i)
 | 
			
		||||
        {
 | 
			
		||||
            *(uint32*)intData = ByteOrder::swapIfBigEndian ((uint32) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])));
 | 
			
		||||
            *reinterpret_cast<uint32*> (intData) = ByteOrder::swapIfBigEndian ((uint32) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])));
 | 
			
		||||
            intData += destBytesPerSample;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@ -143,21 +143,21 @@ void AudioDataConverters::convertFloatToInt32LE (const float* source, void* dest
 | 
			
		||||
        for (int i = numSamples; --i >= 0;)
 | 
			
		||||
        {
 | 
			
		||||
            intData -= destBytesPerSample;
 | 
			
		||||
            *(uint32*)intData = ByteOrder::swapIfBigEndian ((uint32) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])));
 | 
			
		||||
            *reinterpret_cast<uint32*> (intData) = ByteOrder::swapIfBigEndian ((uint32) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::convertFloatToInt32BE (const float* source, void* dest, int numSamples, const int destBytesPerSample)
 | 
			
		||||
void AudioDataConverters::convertFloatToInt32BE (const float* source, void* dest, int numSamples, int destBytesPerSample)
 | 
			
		||||
{
 | 
			
		||||
    const double maxVal = (double) 0x7fffffff;
 | 
			
		||||
    char* intData = static_cast<char*> (dest);
 | 
			
		||||
    auto maxVal = (double) 0x7fffffff;
 | 
			
		||||
    auto intData = static_cast<char*> (dest);
 | 
			
		||||
 | 
			
		||||
    if (dest != (void*) source || destBytesPerSample <= 4)
 | 
			
		||||
    {
 | 
			
		||||
        for (int i = 0; i < numSamples; ++i)
 | 
			
		||||
        {
 | 
			
		||||
            *(uint32*)intData = ByteOrder::swapIfLittleEndian ((uint32) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])));
 | 
			
		||||
            *reinterpret_cast<uint32*> (intData) = ByteOrder::swapIfLittleEndian ((uint32) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])));
 | 
			
		||||
            intData += destBytesPerSample;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@ -168,12 +168,12 @@ void AudioDataConverters::convertFloatToInt32BE (const float* source, void* dest
 | 
			
		||||
        for (int i = numSamples; --i >= 0;)
 | 
			
		||||
        {
 | 
			
		||||
            intData -= destBytesPerSample;
 | 
			
		||||
            *(uint32*)intData = ByteOrder::swapIfLittleEndian ((uint32) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])));
 | 
			
		||||
            *reinterpret_cast<uint32*> (intData) = ByteOrder::swapIfLittleEndian ((uint32) roundToInt (jlimit (-maxVal, maxVal, maxVal * source[i])));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::convertFloatToFloat32LE (const float* source, void* dest, int numSamples, const int destBytesPerSample)
 | 
			
		||||
void AudioDataConverters::convertFloatToFloat32LE (const float* source, void* dest, int numSamples, int destBytesPerSample)
 | 
			
		||||
{
 | 
			
		||||
    jassert (dest != (void*) source || destBytesPerSample <= 4); // This op can't be performed on in-place data!
 | 
			
		||||
 | 
			
		||||
@ -181,28 +181,28 @@ void AudioDataConverters::convertFloatToFloat32LE (const float* source, void* de
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < numSamples; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        *(float*) d = source[i];
 | 
			
		||||
        *reinterpret_cast<float*> (d) = source[i];
 | 
			
		||||
 | 
			
		||||
       #if JUCE_BIG_ENDIAN
 | 
			
		||||
        *(uint32*) d = ByteOrder::swap (*(uint32*) d);
 | 
			
		||||
        *reinterpret_cast<uint32*> (d) = ByteOrder::swap (*reinterpret_cast<uint32*> (d));
 | 
			
		||||
       #endif
 | 
			
		||||
 | 
			
		||||
        d += destBytesPerSample;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::convertFloatToFloat32BE (const float* source, void* dest, int numSamples, const int destBytesPerSample)
 | 
			
		||||
void AudioDataConverters::convertFloatToFloat32BE (const float* source, void* dest, int numSamples, int destBytesPerSample)
 | 
			
		||||
{
 | 
			
		||||
    jassert (dest != (void*) source || destBytesPerSample <= 4); // This op can't be performed on in-place data!
 | 
			
		||||
 | 
			
		||||
    char* d = static_cast<char*> (dest);
 | 
			
		||||
    auto d = static_cast<char*> (dest);
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < numSamples; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        *(float*) d = source[i];
 | 
			
		||||
        *reinterpret_cast<float*> (d) = source[i];
 | 
			
		||||
 | 
			
		||||
       #if JUCE_LITTLE_ENDIAN
 | 
			
		||||
        *(uint32*) d = ByteOrder::swap (*(uint32*) d);
 | 
			
		||||
        *reinterpret_cast<uint32*> (d) = ByteOrder::swap (*reinterpret_cast<uint32*> (d));
 | 
			
		||||
       #endif
 | 
			
		||||
 | 
			
		||||
        d += destBytesPerSample;
 | 
			
		||||
@ -210,16 +210,16 @@ void AudioDataConverters::convertFloatToFloat32BE (const float* source, void* de
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//==============================================================================
 | 
			
		||||
void AudioDataConverters::convertInt16LEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample)
 | 
			
		||||
void AudioDataConverters::convertInt16LEToFloat (const void* source, float* dest, int numSamples, int srcBytesPerSample)
 | 
			
		||||
{
 | 
			
		||||
    const float scale = 1.0f / 0x7fff;
 | 
			
		||||
    const char* intData = static_cast<const char*> (source);
 | 
			
		||||
    auto intData = static_cast<const char*> (source);
 | 
			
		||||
 | 
			
		||||
    if (source != (void*) dest || srcBytesPerSample >= 4)
 | 
			
		||||
    {
 | 
			
		||||
        for (int i = 0; i < numSamples; ++i)
 | 
			
		||||
        {
 | 
			
		||||
            dest[i] = scale * (short) ByteOrder::swapIfBigEndian (*(uint16*)intData);
 | 
			
		||||
            dest[i] = scale * (short) ByteOrder::swapIfBigEndian (*reinterpret_cast<const uint16*> (intData));
 | 
			
		||||
            intData += srcBytesPerSample;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@ -230,21 +230,21 @@ void AudioDataConverters::convertInt16LEToFloat (const void* const source, float
 | 
			
		||||
        for (int i = numSamples; --i >= 0;)
 | 
			
		||||
        {
 | 
			
		||||
            intData -= srcBytesPerSample;
 | 
			
		||||
            dest[i] = scale * (short) ByteOrder::swapIfBigEndian (*(uint16*)intData);
 | 
			
		||||
            dest[i] = scale * (short) ByteOrder::swapIfBigEndian (*reinterpret_cast<const uint16*> (intData));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::convertInt16BEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample)
 | 
			
		||||
void AudioDataConverters::convertInt16BEToFloat (const void* source, float* dest, int numSamples, int srcBytesPerSample)
 | 
			
		||||
{
 | 
			
		||||
    const float scale = 1.0f / 0x7fff;
 | 
			
		||||
    const char* intData = static_cast<const char*> (source);
 | 
			
		||||
    auto intData = static_cast<const char*> (source);
 | 
			
		||||
 | 
			
		||||
    if (source != (void*) dest || srcBytesPerSample >= 4)
 | 
			
		||||
    {
 | 
			
		||||
        for (int i = 0; i < numSamples; ++i)
 | 
			
		||||
        {
 | 
			
		||||
            dest[i] = scale * (short) ByteOrder::swapIfLittleEndian (*(uint16*)intData);
 | 
			
		||||
            dest[i] = scale * (short) ByteOrder::swapIfLittleEndian (*reinterpret_cast<const uint16*> (intData));
 | 
			
		||||
            intData += srcBytesPerSample;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@ -255,15 +255,15 @@ void AudioDataConverters::convertInt16BEToFloat (const void* const source, float
 | 
			
		||||
        for (int i = numSamples; --i >= 0;)
 | 
			
		||||
        {
 | 
			
		||||
            intData -= srcBytesPerSample;
 | 
			
		||||
            dest[i] = scale * (short) ByteOrder::swapIfLittleEndian (*(uint16*)intData);
 | 
			
		||||
            dest[i] = scale * (short) ByteOrder::swapIfLittleEndian (*reinterpret_cast<const uint16*> (intData));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::convertInt24LEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample)
 | 
			
		||||
void AudioDataConverters::convertInt24LEToFloat (const void* source, float* dest, int numSamples, int srcBytesPerSample)
 | 
			
		||||
{
 | 
			
		||||
    const float scale = 1.0f / 0x7fffff;
 | 
			
		||||
    const char* intData = static_cast<const char*> (source);
 | 
			
		||||
    auto intData = static_cast<const char*> (source);
 | 
			
		||||
 | 
			
		||||
    if (source != (void*) dest || srcBytesPerSample >= 4)
 | 
			
		||||
    {
 | 
			
		||||
@ -285,10 +285,10 @@ void AudioDataConverters::convertInt24LEToFloat (const void* const source, float
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::convertInt24BEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample)
 | 
			
		||||
void AudioDataConverters::convertInt24BEToFloat (const void* source, float* dest, int numSamples, int srcBytesPerSample)
 | 
			
		||||
{
 | 
			
		||||
    const float scale = 1.0f / 0x7fffff;
 | 
			
		||||
    const char* intData = static_cast<const char*> (source);
 | 
			
		||||
    auto intData = static_cast<const char*> (source);
 | 
			
		||||
 | 
			
		||||
    if (source != (void*) dest || srcBytesPerSample >= 4)
 | 
			
		||||
    {
 | 
			
		||||
@ -310,16 +310,16 @@ void AudioDataConverters::convertInt24BEToFloat (const void* const source, float
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::convertInt32LEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample)
 | 
			
		||||
void AudioDataConverters::convertInt32LEToFloat (const void* source, float* dest, int numSamples, int srcBytesPerSample)
 | 
			
		||||
{
 | 
			
		||||
    const auto scale = 1.0f / (float) 0x7fffffff;
 | 
			
		||||
    const char* intData = static_cast<const char*> (source);
 | 
			
		||||
    const float scale = 1.0f / (float) 0x7fffffff;
 | 
			
		||||
    auto intData = static_cast<const char*> (source);
 | 
			
		||||
 | 
			
		||||
    if (source != (void*) dest || srcBytesPerSample >= 4)
 | 
			
		||||
    {
 | 
			
		||||
        for (int i = 0; i < numSamples; ++i)
 | 
			
		||||
        {
 | 
			
		||||
            dest[i] = scale * (int) ByteOrder::swapIfBigEndian (*(uint32*) intData);
 | 
			
		||||
            dest[i] = scale * (int) ByteOrder::swapIfBigEndian (*reinterpret_cast<const uint32*> (intData));
 | 
			
		||||
            intData += srcBytesPerSample;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@ -330,21 +330,21 @@ void AudioDataConverters::convertInt32LEToFloat (const void* const source, float
 | 
			
		||||
        for (int i = numSamples; --i >= 0;)
 | 
			
		||||
        {
 | 
			
		||||
            intData -= srcBytesPerSample;
 | 
			
		||||
            dest[i] = scale * (int) ByteOrder::swapIfBigEndian (*(uint32*) intData);
 | 
			
		||||
            dest[i] = scale * (int) ByteOrder::swapIfBigEndian (*reinterpret_cast<const uint32*> (intData));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::convertInt32BEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample)
 | 
			
		||||
void AudioDataConverters::convertInt32BEToFloat (const void* source, float* dest, int numSamples, int srcBytesPerSample)
 | 
			
		||||
{
 | 
			
		||||
    const auto scale = 1.0f / (float) 0x7fffffff;
 | 
			
		||||
    const char* intData = static_cast<const char*> (source);
 | 
			
		||||
    const float scale = 1.0f / (float) 0x7fffffff;
 | 
			
		||||
    auto intData = static_cast<const char*> (source);
 | 
			
		||||
 | 
			
		||||
    if (source != (void*) dest || srcBytesPerSample >= 4)
 | 
			
		||||
    {
 | 
			
		||||
        for (int i = 0; i < numSamples; ++i)
 | 
			
		||||
        {
 | 
			
		||||
            dest[i] = scale * (int) ByteOrder::swapIfLittleEndian (*(uint32*) intData);
 | 
			
		||||
            dest[i] = scale * (int) ByteOrder::swapIfLittleEndian (*reinterpret_cast<const uint32*> (intData));
 | 
			
		||||
            intData += srcBytesPerSample;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@ -355,21 +355,21 @@ void AudioDataConverters::convertInt32BEToFloat (const void* const source, float
 | 
			
		||||
        for (int i = numSamples; --i >= 0;)
 | 
			
		||||
        {
 | 
			
		||||
            intData -= srcBytesPerSample;
 | 
			
		||||
            dest[i] = scale * (int) ByteOrder::swapIfLittleEndian (*(uint32*) intData);
 | 
			
		||||
            dest[i] = scale * (int) ByteOrder::swapIfLittleEndian (*reinterpret_cast<const uint32*> (intData));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::convertFloat32LEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample)
 | 
			
		||||
void AudioDataConverters::convertFloat32LEToFloat (const void* source, float* dest, int numSamples, int srcBytesPerSample)
 | 
			
		||||
{
 | 
			
		||||
    const char* s = static_cast<const char*> (source);
 | 
			
		||||
    auto s = static_cast<const char*> (source);
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < numSamples; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        dest[i] = *(float*)s;
 | 
			
		||||
        dest[i] = *reinterpret_cast<const float*> (s);
 | 
			
		||||
 | 
			
		||||
       #if JUCE_BIG_ENDIAN
 | 
			
		||||
        uint32* const d = (uint32*) (dest + i);
 | 
			
		||||
        auto d = reinterpret_cast<uint32*> (dest + i);
 | 
			
		||||
        *d = ByteOrder::swap (*d);
 | 
			
		||||
       #endif
 | 
			
		||||
 | 
			
		||||
@ -377,16 +377,16 @@ void AudioDataConverters::convertFloat32LEToFloat (const void* const source, flo
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::convertFloat32BEToFloat (const void* const source, float* const dest, int numSamples, const int srcBytesPerSample)
 | 
			
		||||
void AudioDataConverters::convertFloat32BEToFloat (const void* source, float* dest, int numSamples, int srcBytesPerSample)
 | 
			
		||||
{
 | 
			
		||||
    const char* s = static_cast<const char*> (source);
 | 
			
		||||
    auto s = static_cast<const char*> (source);
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < numSamples; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        dest[i] = *(float*)s;
 | 
			
		||||
        dest[i] = *reinterpret_cast<const float*> (s);
 | 
			
		||||
 | 
			
		||||
       #if JUCE_LITTLE_ENDIAN
 | 
			
		||||
        uint32* const d = (uint32*) (dest + i);
 | 
			
		||||
        auto d = reinterpret_cast<uint32*> (dest + i);
 | 
			
		||||
        *d = ByteOrder::swap (*d);
 | 
			
		||||
       #endif
 | 
			
		||||
 | 
			
		||||
@ -396,10 +396,7 @@ void AudioDataConverters::convertFloat32BEToFloat (const void* const source, flo
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//==============================================================================
 | 
			
		||||
void AudioDataConverters::convertFloatToFormat (const DataFormat destFormat,
 | 
			
		||||
                                                const float* const source,
 | 
			
		||||
                                                void* const dest,
 | 
			
		||||
                                                const int numSamples)
 | 
			
		||||
void AudioDataConverters::convertFloatToFormat (DataFormat destFormat, const float* source, void* dest, int numSamples)
 | 
			
		||||
{
 | 
			
		||||
    switch (destFormat)
 | 
			
		||||
    {
 | 
			
		||||
@ -415,10 +412,7 @@ void AudioDataConverters::convertFloatToFormat (const DataFormat destFormat,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::convertFormatToFloat (const DataFormat sourceFormat,
 | 
			
		||||
                                                const void* const source,
 | 
			
		||||
                                                float* const dest,
 | 
			
		||||
                                                const int numSamples)
 | 
			
		||||
void AudioDataConverters::convertFormatToFloat (DataFormat sourceFormat, const void* source, float* dest, int numSamples)
 | 
			
		||||
{
 | 
			
		||||
    switch (sourceFormat)
 | 
			
		||||
    {
 | 
			
		||||
@ -435,15 +429,12 @@ void AudioDataConverters::convertFormatToFloat (const DataFormat sourceFormat,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//==============================================================================
 | 
			
		||||
void AudioDataConverters::interleaveSamples (const float** const source,
 | 
			
		||||
                                             float* const dest,
 | 
			
		||||
                                             const int numSamples,
 | 
			
		||||
                                             const int numChannels)
 | 
			
		||||
void AudioDataConverters::interleaveSamples (const float** source, float* dest, int numSamples, int numChannels)
 | 
			
		||||
{
 | 
			
		||||
    for (int chan = 0; chan < numChannels; ++chan)
 | 
			
		||||
    {
 | 
			
		||||
        int i = chan;
 | 
			
		||||
        const float* src = source [chan];
 | 
			
		||||
        auto i = chan;
 | 
			
		||||
        auto src = source [chan];
 | 
			
		||||
 | 
			
		||||
        for (int j = 0; j < numSamples; ++j)
 | 
			
		||||
        {
 | 
			
		||||
@ -453,15 +444,12 @@ void AudioDataConverters::interleaveSamples (const float** const source,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioDataConverters::deinterleaveSamples (const float* const source,
 | 
			
		||||
                                               float** const dest,
 | 
			
		||||
                                               const int numSamples,
 | 
			
		||||
                                               const int numChannels)
 | 
			
		||||
void AudioDataConverters::deinterleaveSamples (const float* source, float** dest, int numSamples, int numChannels)
 | 
			
		||||
{
 | 
			
		||||
    for (int chan = 0; chan < numChannels; ++chan)
 | 
			
		||||
    {
 | 
			
		||||
        int i = chan;
 | 
			
		||||
        float* dst = dest [chan];
 | 
			
		||||
        auto i = chan;
 | 
			
		||||
        auto dst = dest [chan];
 | 
			
		||||
 | 
			
		||||
        for (int j = 0; j < numSamples; ++j)
 | 
			
		||||
        {
 | 
			
		||||
@ -492,7 +480,7 @@ public:
 | 
			
		||||
        static void test (UnitTest& unitTest, bool inPlace, Random& r)
 | 
			
		||||
        {
 | 
			
		||||
            const int numSamples = 2048;
 | 
			
		||||
            int32 original [numSamples], converted [numSamples], reversed [numSamples];
 | 
			
		||||
            int32 original[numSamples], converted[numSamples], reversed[numSamples];
 | 
			
		||||
 | 
			
		||||
            {
 | 
			
		||||
                AudioData::Pointer<F1, E1, AudioData::NonInterleaved, AudioData::NonConst> d (original);
 | 
			
		||||
@ -514,13 +502,13 @@ public:
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // convert data from the source to dest format..
 | 
			
		||||
            std::unique_ptr<AudioData::Converter> conv (new AudioData::ConverterInstance <AudioData::Pointer<F1, E1, AudioData::NonInterleaved, AudioData::Const>,
 | 
			
		||||
                                                                                          AudioData::Pointer<F2, E2, AudioData::NonInterleaved, AudioData::NonConst>>());
 | 
			
		||||
            std::unique_ptr<AudioData::Converter> conv (new AudioData::ConverterInstance<AudioData::Pointer<F1, E1, AudioData::NonInterleaved, AudioData::Const>,
 | 
			
		||||
                                                                                         AudioData::Pointer<F2, E2, AudioData::NonInterleaved, AudioData::NonConst>>());
 | 
			
		||||
            conv->convertSamples (inPlace ? reversed : converted, original, numSamples);
 | 
			
		||||
 | 
			
		||||
            // ..and back again..
 | 
			
		||||
            conv.reset (new AudioData::ConverterInstance <AudioData::Pointer<F2, E2, AudioData::NonInterleaved, AudioData::Const>,
 | 
			
		||||
                                                          AudioData::Pointer<F1, E1, AudioData::NonInterleaved, AudioData::NonConst>>());
 | 
			
		||||
            conv.reset (new AudioData::ConverterInstance<AudioData::Pointer<F2, E2, AudioData::NonInterleaved, AudioData::Const>,
 | 
			
		||||
                                                         AudioData::Pointer<F1, E1, AudioData::NonInterleaved, AudioData::NonConst>>());
 | 
			
		||||
            if (! inPlace)
 | 
			
		||||
                zeromem (reversed, sizeof (reversed));
 | 
			
		||||
 | 
			
		||||
@ -582,7 +570,7 @@ public:
 | 
			
		||||
 | 
			
		||||
    void runTest() override
 | 
			
		||||
    {
 | 
			
		||||
        Random r = getRandom();
 | 
			
		||||
        auto r = getRandom();
 | 
			
		||||
        beginTest ("Round-trip conversion: Int8");
 | 
			
		||||
        Test1 <AudioData::Int8>::test (*this, r);
 | 
			
		||||
        beginTest ("Round-trip conversion: Int16");
 | 
			
		||||
 | 
			
		||||
@ -277,8 +277,8 @@ public:
 | 
			
		||||
    class NonInterleaved
 | 
			
		||||
    {
 | 
			
		||||
    public:
 | 
			
		||||
        inline NonInterleaved() noexcept {}
 | 
			
		||||
        inline NonInterleaved (const NonInterleaved&) noexcept {}
 | 
			
		||||
        inline NonInterleaved() = default;
 | 
			
		||||
        inline NonInterleaved (const NonInterleaved&) = default;
 | 
			
		||||
        inline NonInterleaved (const int) noexcept {}
 | 
			
		||||
        inline void copyFrom (const NonInterleaved&) noexcept {}
 | 
			
		||||
        template <class SampleFormatType> inline void advanceData (SampleFormatType& s) noexcept                    { s.advance(); }
 | 
			
		||||
@ -292,15 +292,15 @@ public:
 | 
			
		||||
    class Interleaved
 | 
			
		||||
    {
 | 
			
		||||
    public:
 | 
			
		||||
        inline Interleaved() noexcept : numInterleavedChannels (1) {}
 | 
			
		||||
        inline Interleaved (const Interleaved& other) noexcept : numInterleavedChannels (other.numInterleavedChannels) {}
 | 
			
		||||
        inline Interleaved() noexcept  {}
 | 
			
		||||
        inline Interleaved (const Interleaved& other) = default;
 | 
			
		||||
        inline Interleaved (const int numInterleavedChans) noexcept : numInterleavedChannels (numInterleavedChans) {}
 | 
			
		||||
        inline void copyFrom (const Interleaved& other) noexcept { numInterleavedChannels = other.numInterleavedChannels; }
 | 
			
		||||
        template <class SampleFormatType> inline void advanceData (SampleFormatType& s) noexcept                    { s.skip (numInterleavedChannels); }
 | 
			
		||||
        template <class SampleFormatType> inline void advanceDataBy (SampleFormatType& s, int numSamples) noexcept  { s.skip (numInterleavedChannels * numSamples); }
 | 
			
		||||
        template <class SampleFormatType> inline void clear (SampleFormatType& s, int numSamples) noexcept          { while (--numSamples >= 0) { s.clear(); s.skip (numInterleavedChannels); } }
 | 
			
		||||
        template <class SampleFormatType> inline int getNumBytesBetweenSamples (const SampleFormatType&) const noexcept { return numInterleavedChannels * SampleFormatType::bytesPerSample; }
 | 
			
		||||
        int numInterleavedChannels;
 | 
			
		||||
        int numInterleavedChannels = 1;
 | 
			
		||||
        enum { isInterleavedType = 1 };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
@ -587,7 +587,7 @@ public:
 | 
			
		||||
    class Converter
 | 
			
		||||
    {
 | 
			
		||||
    public:
 | 
			
		||||
        virtual ~Converter() {}
 | 
			
		||||
        virtual ~Converter() = default;
 | 
			
		||||
 | 
			
		||||
        /** Converts a sequence of samples from the converter's source format into the dest format. */
 | 
			
		||||
        virtual void convertSamples (void* destSamples, const void* sourceSamples, int numSamples) const = 0;
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,79 @@
 | 
			
		||||
/*
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
 | 
			
		||||
   This file is part of the JUCE library.
 | 
			
		||||
   Copyright (c) 2017 - ROLI Ltd.
 | 
			
		||||
 | 
			
		||||
   JUCE is an open source library subject to commercial or open-source
 | 
			
		||||
   licensing.
 | 
			
		||||
 | 
			
		||||
   By using JUCE, you agree to the terms of both the JUCE 5 End-User License
 | 
			
		||||
   Agreement and JUCE 5 Privacy Policy (both updated and effective as of the
 | 
			
		||||
   27th April 2017).
 | 
			
		||||
 | 
			
		||||
   End User License Agreement: www.juce.com/juce-5-licence
 | 
			
		||||
   Privacy Policy: www.juce.com/juce-5-privacy-policy
 | 
			
		||||
 | 
			
		||||
   Or: You may also use this code under the terms of the GPL v3 (see
 | 
			
		||||
   www.gnu.org/licenses).
 | 
			
		||||
 | 
			
		||||
   JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
 | 
			
		||||
   EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
 | 
			
		||||
   DISCLAIMED.
 | 
			
		||||
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
namespace juce
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
AudioProcessLoadMeasurer::AudioProcessLoadMeasurer() {}
 | 
			
		||||
AudioProcessLoadMeasurer::~AudioProcessLoadMeasurer() {}
 | 
			
		||||
 | 
			
		||||
void AudioProcessLoadMeasurer::reset()
 | 
			
		||||
{
 | 
			
		||||
    reset (0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioProcessLoadMeasurer::reset (double sampleRate, int blockSize)
 | 
			
		||||
{
 | 
			
		||||
    cpuUsageMs = 0;
 | 
			
		||||
    xruns = 0;
 | 
			
		||||
 | 
			
		||||
    if (sampleRate > 0.0 && blockSize > 0)
 | 
			
		||||
    {
 | 
			
		||||
        msPerBlock = 1000.0 * blockSize / sampleRate;
 | 
			
		||||
        timeToCpuScale = (msPerBlock > 0.0) ? (1.0 / msPerBlock) : 0.0;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        msPerBlock = 0;
 | 
			
		||||
        timeToCpuScale = 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AudioProcessLoadMeasurer::registerBlockRenderTime (double milliseconds)
 | 
			
		||||
{
 | 
			
		||||
    const double filterAmount = 0.2;
 | 
			
		||||
    cpuUsageMs += filterAmount * (milliseconds - cpuUsageMs);
 | 
			
		||||
 | 
			
		||||
    if (milliseconds > msPerBlock)
 | 
			
		||||
        ++xruns;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
double AudioProcessLoadMeasurer::getLoadAsProportion() const   { return jlimit (0.0, 1.0, timeToCpuScale * cpuUsageMs); }
 | 
			
		||||
double AudioProcessLoadMeasurer::getLoadAsPercentage() const   { return 100.0 * getLoadAsProportion(); }
 | 
			
		||||
 | 
			
		||||
int AudioProcessLoadMeasurer::getXRunCount() const             { return xruns; }
 | 
			
		||||
 | 
			
		||||
AudioProcessLoadMeasurer::ScopedTimer::ScopedTimer (AudioProcessLoadMeasurer& p)
 | 
			
		||||
   : owner (p), startTime (Time::getMillisecondCounterHiRes())
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AudioProcessLoadMeasurer::ScopedTimer::~ScopedTimer()
 | 
			
		||||
{
 | 
			
		||||
    owner.registerBlockRenderTime (Time::getMillisecondCounterHiRes() - startTime);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace juce
 | 
			
		||||
@ -0,0 +1,96 @@
 | 
			
		||||
/*
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
 | 
			
		||||
   This file is part of the JUCE library.
 | 
			
		||||
   Copyright (c) 2017 - ROLI Ltd.
 | 
			
		||||
 | 
			
		||||
   JUCE is an open source library subject to commercial or open-source
 | 
			
		||||
   licensing.
 | 
			
		||||
 | 
			
		||||
   By using JUCE, you agree to the terms of both the JUCE 5 End-User License
 | 
			
		||||
   Agreement and JUCE 5 Privacy Policy (both updated and effective as of the
 | 
			
		||||
   27th April 2017).
 | 
			
		||||
 | 
			
		||||
   End User License Agreement: www.juce.com/juce-5-licence
 | 
			
		||||
   Privacy Policy: www.juce.com/juce-5-privacy-policy
 | 
			
		||||
 | 
			
		||||
   Or: You may also use this code under the terms of the GPL v3 (see
 | 
			
		||||
   www.gnu.org/licenses).
 | 
			
		||||
 | 
			
		||||
   JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
 | 
			
		||||
   EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
 | 
			
		||||
   DISCLAIMED.
 | 
			
		||||
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
namespace juce
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
//==============================================================================
 | 
			
		||||
/**
 | 
			
		||||
    Maintains an ongoing measurement of the proportion of time which is being
 | 
			
		||||
    spent inside an audio callback.
 | 
			
		||||
*/
 | 
			
		||||
class JUCE_API  AudioProcessLoadMeasurer
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    /** */
 | 
			
		||||
    AudioProcessLoadMeasurer();
 | 
			
		||||
 | 
			
		||||
    /** Destructor. */
 | 
			
		||||
    ~AudioProcessLoadMeasurer();
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    /** Resets the state. */
 | 
			
		||||
    void reset();
 | 
			
		||||
 | 
			
		||||
    /** Resets the counter, in preparation for use with the given sample rate and block size. */
 | 
			
		||||
    void reset (double sampleRate, int blockSize);
 | 
			
		||||
 | 
			
		||||
    /** Returns the current load as a proportion 0 to 1.0 */
 | 
			
		||||
    double getLoadAsProportion() const;
 | 
			
		||||
 | 
			
		||||
    /** Returns the current load as a percentage 0 to 100.0 */
 | 
			
		||||
    double getLoadAsPercentage() const;
 | 
			
		||||
 | 
			
		||||
    /** Returns the number of over- (or under-) runs recorded since the state was reset. */
 | 
			
		||||
    int getXRunCount() const;
 | 
			
		||||
 | 
			
		||||
    //==============================================================================
 | 
			
		||||
    /** This class measures the time between its construction and destruction and
 | 
			
		||||
        adds it to an AudioProcessLoadMeasurer.
 | 
			
		||||
 | 
			
		||||
        e.g.
 | 
			
		||||
        @code
 | 
			
		||||
        {
 | 
			
		||||
            AudioProcessLoadMeasurer::ScopedTimer timer (myProcessLoadMeasurer);
 | 
			
		||||
            myCallback->doTheCallback();
 | 
			
		||||
        }
 | 
			
		||||
        @endcode
 | 
			
		||||
    */
 | 
			
		||||
    struct JUCE_API  ScopedTimer
 | 
			
		||||
    {
 | 
			
		||||
        ScopedTimer (AudioProcessLoadMeasurer&);
 | 
			
		||||
        ~ScopedTimer();
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        AudioProcessLoadMeasurer& owner;
 | 
			
		||||
        double startTime;
 | 
			
		||||
 | 
			
		||||
        JUCE_DECLARE_NON_COPYABLE (ScopedTimer)
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /** Can be called manually to add the time of a callback to the stats.
 | 
			
		||||
        Normally you probably would never call this - it's simpler and more robust to
 | 
			
		||||
        use a ScopedTimer to measure the time using an RAII pattern.
 | 
			
		||||
    */
 | 
			
		||||
    void registerBlockRenderTime (double millisecondsTaken);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    double cpuUsageMs = 0, timeToCpuScale = 0, msPerBlock = 0;
 | 
			
		||||
    int xruns = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // namespace juce
 | 
			
		||||
@ -172,14 +172,14 @@ public:
 | 
			
		||||
    /** Destructor.
 | 
			
		||||
        This will free any memory allocated by the buffer.
 | 
			
		||||
    */
 | 
			
		||||
    ~AudioBuffer() noexcept {}
 | 
			
		||||
    ~AudioBuffer() = default;
 | 
			
		||||
 | 
			
		||||
    /** Move constructor */
 | 
			
		||||
    AudioBuffer (AudioBuffer&& other) noexcept
 | 
			
		||||
        : numChannels (other.numChannels),
 | 
			
		||||
          size (other.size),
 | 
			
		||||
          allocatedBytes (other.allocatedBytes),
 | 
			
		||||
          allocatedData (static_cast<HeapBlock<char, true>&&> (other.allocatedData)),
 | 
			
		||||
          allocatedData (std::move (other.allocatedData)),
 | 
			
		||||
          isClear (other.isClear)
 | 
			
		||||
    {
 | 
			
		||||
        if (numChannels < (int) numElementsInArray (preallocatedChannelSpace))
 | 
			
		||||
@ -205,7 +205,7 @@ public:
 | 
			
		||||
        numChannels = other.numChannels;
 | 
			
		||||
        size = other.size;
 | 
			
		||||
        allocatedBytes = other.allocatedBytes;
 | 
			
		||||
        allocatedData = static_cast<HeapBlock<char, true>&&> (other.allocatedData);
 | 
			
		||||
        allocatedData = std::move (other.allocatedData);
 | 
			
		||||
        isClear = other.isClear;
 | 
			
		||||
 | 
			
		||||
        if (numChannels < (int) numElementsInArray (preallocatedChannelSpace))
 | 
			
		||||
@ -1080,7 +1080,7 @@ private:
 | 
			
		||||
        allocatedBytes = (size_t) numChannels * (size_t) size * sizeof (Type) + channelListSize + 32;
 | 
			
		||||
        allocatedData.malloc (allocatedBytes);
 | 
			
		||||
        channels = reinterpret_cast<Type**> (allocatedData.get());
 | 
			
		||||
        auto* chan = (Type*) (allocatedData + channelListSize);
 | 
			
		||||
        auto chan = reinterpret_cast<Type*> (allocatedData + channelListSize);
 | 
			
		||||
 | 
			
		||||
        for (int i = 0; i < numChannels; ++i)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
@ -878,7 +878,7 @@ void JUCE_CALLTYPE FloatVectorOperations::convertFixedToFloat (float* dest, cons
 | 
			
		||||
                                  JUCE_LOAD_NONE, JUCE_INCREMENT_SRC_DEST, )
 | 
			
		||||
   #else
 | 
			
		||||
    JUCE_PERFORM_VEC_OP_SRC_DEST (dest[i] = (float) src[i] * multiplier,
 | 
			
		||||
                                  Mode::mul (mult, _mm_cvtepi32_ps (_mm_loadu_si128 ((const __m128i*) src))),
 | 
			
		||||
                                  Mode::mul (mult, _mm_cvtepi32_ps (_mm_loadu_si128 (reinterpret_cast<const __m128i*> (src)))),
 | 
			
		||||
                                  JUCE_LOAD_NONE, JUCE_INCREMENT_SRC_DEST,
 | 
			
		||||
                                  const Mode::ParallelType mult = Mode::load1 (multiplier);)
 | 
			
		||||
   #endif
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user