| @@ -16629,6 +16629,12 @@ ValueTree ValueTree::readFromStream (InputStream& input) | |||
| return v; | |||
| } | |||
| ValueTree ValueTree::readFromData (const void* const data, const size_t numBytes) | |||
| { | |||
| MemoryInputStream in (data, numBytes, false); | |||
| return readFromStream (in); | |||
| } | |||
| END_JUCE_NAMESPACE | |||
| /*** End of inlined file: juce_ValueTree.cpp ***/ | |||
| @@ -30392,6 +30398,27 @@ void AudioUnitPluginInstance::initialise() | |||
| void AudioUnitPluginInstance::prepareToPlay (double sampleRate_, | |||
| int samplesPerBlockExpected) | |||
| { | |||
| if (audioUnit != 0) | |||
| { | |||
| Float64 sampleRateIn = 0, sampleRateOut = 0; | |||
| UInt32 sampleRateSize = sizeof (sampleRateIn); | |||
| AudioUnitGetProperty (audioUnit, kAudioUnitProperty_SampleRate, kAudioUnitScope_Input, 0, &sampleRateIn, &sampleRateSize); | |||
| AudioUnitGetProperty (audioUnit, kAudioUnitProperty_SampleRate, kAudioUnitScope_Output, 0, &sampleRateOut, &sampleRateSize); | |||
| if (sampleRateIn != sampleRate_ || sampleRateOut != sampleRate_) | |||
| { | |||
| if (initialised) | |||
| { | |||
| AudioUnitUninitialize (audioUnit); | |||
| initialised = false; | |||
| } | |||
| Float64 sr = sampleRate_; | |||
| AudioUnitSetProperty (audioUnit, kAudioUnitProperty_SampleRate, kAudioUnitScope_Input, 0, &sr, sizeof (Float64)); | |||
| AudioUnitSetProperty (audioUnit, kAudioUnitProperty_SampleRate, kAudioUnitScope_Output, 0, &sr, sizeof (Float64)); | |||
| } | |||
| } | |||
| initialise(); | |||
| if (initialised) | |||
| @@ -30423,16 +30450,12 @@ void AudioUnitPluginInstance::prepareToPlay (double sampleRate_, | |||
| stream.mBitsPerChannel = 32; | |||
| stream.mChannelsPerFrame = numIns; | |||
| OSStatus err = AudioUnitSetProperty (audioUnit, | |||
| kAudioUnitProperty_StreamFormat, | |||
| kAudioUnitScope_Input, | |||
| OSStatus err = AudioUnitSetProperty (audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, | |||
| 0, &stream, sizeof (stream)); | |||
| stream.mChannelsPerFrame = numOuts; | |||
| err = AudioUnitSetProperty (audioUnit, | |||
| kAudioUnitProperty_StreamFormat, | |||
| kAudioUnitScope_Output, | |||
| err = AudioUnitSetProperty (audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, | |||
| 0, &stream, sizeof (stream)); | |||
| outputBufferList.calloc (sizeof (AudioBufferList) + sizeof (AudioBuffer) * (numOuts + 1), 1); | |||
| @@ -86184,6 +86207,53 @@ void Font::findFonts (Array<Font>& destArray) throw() | |||
| destArray.add (Font (names[i], FontValues::defaultFontHeight, Font::plain)); | |||
| } | |||
| const String Font::toString() const | |||
| { | |||
| String s (getTypefaceName()); | |||
| if (s == getDefaultSansSerifFontName()) | |||
| s = String::empty; | |||
| else | |||
| s += "; "; | |||
| s += String (getHeight(), 1); | |||
| if (isBold()) | |||
| s += " bold"; | |||
| if (isItalic()) | |||
| s += " italic"; | |||
| return s; | |||
| } | |||
| const Font Font::fromString (const String& fontDescription) | |||
| { | |||
| String name; | |||
| const int separator = fontDescription.indexOfChar (';'); | |||
| if (separator > 0) | |||
| name = fontDescription.substring (0, separator).trim(); | |||
| if (name.isEmpty()) | |||
| name = getDefaultSansSerifFontName(); | |||
| String sizeAndStyle (fontDescription.substring (separator + 1)); | |||
| float height = sizeAndStyle.getFloatValue(); | |||
| if (height <= 0) | |||
| height = 10.0f; | |||
| int flags = Font::plain; | |||
| if (sizeAndStyle.containsIgnoreCase ("bold")) | |||
| flags |= Font::bold; | |||
| if (sizeAndStyle.containsIgnoreCase ("italic")) | |||
| flags |= Font::italic; | |||
| return Font (name, height, flags); | |||
| } | |||
| class TypefaceCache : public DeletedAtShutdown | |||
| { | |||
| public: | |||
| @@ -13086,10 +13086,12 @@ public: | |||
| */ | |||
| void writeToStream (OutputStream& output); | |||
| /** Reloads a tree from a stream that was written with writeToStream(). | |||
| */ | |||
| /** Reloads a tree from a stream that was written with writeToStream(). */ | |||
| static ValueTree readFromStream (InputStream& input); | |||
| /** Reloads a tree from a data block that was written with writeToStream(). */ | |||
| static ValueTree readFromData (const void* data, size_t numBytes); | |||
| /** Listener class for events that happen to a ValueTree. | |||
| To get events from a ValueTree, make your class implement this interface, and use | |||
| @@ -21782,6 +21784,18 @@ public: | |||
| */ | |||
| static void setFallbackFontName (const String& name) throw(); | |||
| /** Creates a string to describe this font. | |||
| The string will contain information to describe the font's typeface, size, and | |||
| style. To recreate the font from this string, use fromString(). | |||
| */ | |||
| const String toString() const; | |||
| /** Recreates a font from its stringified encoding. | |||
| This method takes a string that was created by toString(), and recreates the | |||
| original font. | |||
| */ | |||
| static const Font fromString (const String& fontDescription); | |||
| juce_UseDebuggingNewOperator | |||
| private: | |||
| @@ -35113,8 +35127,8 @@ public: | |||
| @param componentName the name to give the component | |||
| @param labelText the text to show in the label | |||
| */ | |||
| Label (const String& componentName, | |||
| const String& labelText); | |||
| Label (const String& componentName = String::empty, | |||
| const String& labelText = String::empty); | |||
| /** Destructor. */ | |||
| ~Label(); | |||
| @@ -35430,7 +35444,7 @@ public: | |||
| @param componentName the name to set for the component (see Component::setName()) | |||
| */ | |||
| explicit ComboBox (const String& componentName); | |||
| explicit ComboBox (const String& componentName = String::empty); | |||
| /** Destructor. */ | |||
| ~ComboBox(); | |||
| @@ -39198,7 +39212,7 @@ public: | |||
| @see Button | |||
| */ | |||
| TextButton (const String& buttonName, | |||
| TextButton (const String& buttonName = String::empty, | |||
| const String& toolTip = String::empty); | |||
| /** Destructor. */ | |||
| @@ -42267,7 +42281,7 @@ public: | |||
| initially set to this string, but these can be changed later | |||
| using the setName() and setButtonText() methods) | |||
| */ | |||
| ToggleButton (const String& buttonText); | |||
| explicit ToggleButton (const String& buttonText = String::empty); | |||
| /** Destructor. */ | |||
| ~ToggleButton(); | |||
| @@ -44162,7 +44176,7 @@ public: | |||
| When created, you'll need to set up the slider's style and range with setSliderStyle(), | |||
| setRange(), etc. | |||
| */ | |||
| explicit Slider (const String& componentName); | |||
| explicit Slider (const String& componentName = String::empty); | |||
| /** Destructor. */ | |||
| ~Slider(); | |||
| @@ -50002,8 +50016,8 @@ public: | |||
| @param componentName the name to give the component | |||
| @param labelText the text to show at the top of the outline | |||
| */ | |||
| GroupComponent (const String& componentName, | |||
| const String& labelText); | |||
| GroupComponent (const String& componentName = String::empty, | |||
| const String& labelText = String::empty); | |||
| /** Destructor. */ | |||
| ~GroupComponent(); | |||
| @@ -552,6 +552,27 @@ void AudioUnitPluginInstance::initialise() | |||
| void AudioUnitPluginInstance::prepareToPlay (double sampleRate_, | |||
| int samplesPerBlockExpected) | |||
| { | |||
| if (audioUnit != 0) | |||
| { | |||
| Float64 sampleRateIn = 0, sampleRateOut = 0; | |||
| UInt32 sampleRateSize = sizeof (sampleRateIn); | |||
| AudioUnitGetProperty (audioUnit, kAudioUnitProperty_SampleRate, kAudioUnitScope_Input, 0, &sampleRateIn, &sampleRateSize); | |||
| AudioUnitGetProperty (audioUnit, kAudioUnitProperty_SampleRate, kAudioUnitScope_Output, 0, &sampleRateOut, &sampleRateSize); | |||
| if (sampleRateIn != sampleRate_ || sampleRateOut != sampleRate_) | |||
| { | |||
| if (initialised) | |||
| { | |||
| AudioUnitUninitialize (audioUnit); | |||
| initialised = false; | |||
| } | |||
| Float64 sr = sampleRate_; | |||
| AudioUnitSetProperty (audioUnit, kAudioUnitProperty_SampleRate, kAudioUnitScope_Input, 0, &sr, sizeof (Float64)); | |||
| AudioUnitSetProperty (audioUnit, kAudioUnitProperty_SampleRate, kAudioUnitScope_Output, 0, &sr, sizeof (Float64)); | |||
| } | |||
| } | |||
| initialise(); | |||
| if (initialised) | |||
| @@ -583,16 +604,12 @@ void AudioUnitPluginInstance::prepareToPlay (double sampleRate_, | |||
| stream.mBitsPerChannel = 32; | |||
| stream.mChannelsPerFrame = numIns; | |||
| OSStatus err = AudioUnitSetProperty (audioUnit, | |||
| kAudioUnitProperty_StreamFormat, | |||
| kAudioUnitScope_Input, | |||
| OSStatus err = AudioUnitSetProperty (audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, | |||
| 0, &stream, sizeof (stream)); | |||
| stream.mChannelsPerFrame = numOuts; | |||
| err = AudioUnitSetProperty (audioUnit, | |||
| kAudioUnitProperty_StreamFormat, | |||
| kAudioUnitScope_Output, | |||
| err = AudioUnitSetProperty (audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, | |||
| 0, &stream, sizeof (stream)); | |||
| outputBufferList.calloc (sizeof (AudioBufferList) + sizeof (AudioBuffer) * (numOuts + 1), 1); | |||
| @@ -28,6 +28,7 @@ | |||
| BEGIN_JUCE_NAMESPACE | |||
| #include "juce_ValueTree.h" | |||
| #include "../io/streams/juce_MemoryInputStream.h" | |||
| //============================================================================== | |||
| @@ -860,4 +861,10 @@ ValueTree ValueTree::readFromStream (InputStream& input) | |||
| return v; | |||
| } | |||
| ValueTree ValueTree::readFromData (const void* const data, const size_t numBytes) | |||
| { | |||
| MemoryInputStream in (data, numBytes, false); | |||
| return readFromStream (in); | |||
| } | |||
| END_JUCE_NAMESPACE | |||
| @@ -310,10 +310,12 @@ public: | |||
| */ | |||
| void writeToStream (OutputStream& output); | |||
| /** Reloads a tree from a stream that was written with writeToStream(). | |||
| */ | |||
| /** Reloads a tree from a stream that was written with writeToStream(). */ | |||
| static ValueTree readFromStream (InputStream& input); | |||
| /** Reloads a tree from a data block that was written with writeToStream(). */ | |||
| static ValueTree readFromData (const void* data, size_t numBytes); | |||
| //============================================================================== | |||
| /** Listener class for events that happen to a ValueTree. | |||
| @@ -49,7 +49,7 @@ public: | |||
| @see Button | |||
| */ | |||
| TextButton (const String& buttonName, | |||
| TextButton (const String& buttonName = String::empty, | |||
| const String& toolTip = String::empty); | |||
| /** Destructor. */ | |||
| @@ -48,7 +48,7 @@ public: | |||
| initially set to this string, but these can be changed later | |||
| using the setName() and setButtonText() methods) | |||
| */ | |||
| ToggleButton (const String& buttonText); | |||
| explicit ToggleButton (const String& buttonText = String::empty); | |||
| /** Destructor. */ | |||
| ~ToggleButton(); | |||
| @@ -84,7 +84,7 @@ public: | |||
| @param componentName the name to set for the component (see Component::setName()) | |||
| */ | |||
| explicit ComboBox (const String& componentName); | |||
| explicit ComboBox (const String& componentName = String::empty); | |||
| /** Destructor. */ | |||
| ~ComboBox(); | |||
| @@ -71,8 +71,8 @@ public: | |||
| @param componentName the name to give the component | |||
| @param labelText the text to show in the label | |||
| */ | |||
| Label (const String& componentName, | |||
| const String& labelText); | |||
| Label (const String& componentName = String::empty, | |||
| const String& labelText = String::empty); | |||
| /** Destructor. */ | |||
| ~Label(); | |||
| @@ -68,7 +68,7 @@ public: | |||
| When created, you'll need to set up the slider's style and range with setSliderStyle(), | |||
| setRange(), etc. | |||
| */ | |||
| explicit Slider (const String& componentName); | |||
| explicit Slider (const String& componentName = String::empty); | |||
| /** Destructor. */ | |||
| ~Slider(); | |||
| @@ -44,8 +44,8 @@ public: | |||
| @param componentName the name to give the component | |||
| @param labelText the text to show at the top of the outline | |||
| */ | |||
| GroupComponent (const String& componentName, | |||
| const String& labelText); | |||
| GroupComponent (const String& componentName = String::empty, | |||
| const String& labelText = String::empty); | |||
| /** Destructor. */ | |||
| ~GroupComponent(); | |||
| @@ -338,6 +338,53 @@ void Font::findFonts (Array<Font>& destArray) throw() | |||
| destArray.add (Font (names[i], FontValues::defaultFontHeight, Font::plain)); | |||
| } | |||
| //============================================================================== | |||
| const String Font::toString() const | |||
| { | |||
| String s (getTypefaceName()); | |||
| if (s == getDefaultSansSerifFontName()) | |||
| s = String::empty; | |||
| else | |||
| s += "; "; | |||
| s += String (getHeight(), 1); | |||
| if (isBold()) | |||
| s += " bold"; | |||
| if (isItalic()) | |||
| s += " italic"; | |||
| return s; | |||
| } | |||
| const Font Font::fromString (const String& fontDescription) | |||
| { | |||
| String name; | |||
| const int separator = fontDescription.indexOfChar (';'); | |||
| if (separator > 0) | |||
| name = fontDescription.substring (0, separator).trim(); | |||
| if (name.isEmpty()) | |||
| name = getDefaultSansSerifFontName(); | |||
| String sizeAndStyle (fontDescription.substring (separator + 1)); | |||
| float height = sizeAndStyle.getFloatValue(); | |||
| if (height <= 0) | |||
| height = 10.0f; | |||
| int flags = Font::plain; | |||
| if (sizeAndStyle.containsIgnoreCase ("bold")) | |||
| flags |= Font::bold; | |||
| if (sizeAndStyle.containsIgnoreCase ("italic")) | |||
| flags |= Font::italic; | |||
| return Font (name, height, flags); | |||
| } | |||
| //============================================================================== | |||
| class TypefaceCache : public DeletedAtShutdown | |||
| @@ -344,6 +344,18 @@ public: | |||
| */ | |||
| static void setFallbackFontName (const String& name) throw(); | |||
| //============================================================================== | |||
| /** Creates a string to describe this font. | |||
| The string will contain information to describe the font's typeface, size, and | |||
| style. To recreate the font from this string, use fromString(). | |||
| */ | |||
| const String toString() const; | |||
| /** Recreates a font from its stringified encoding. | |||
| This method takes a string that was created by toString(), and recreates the | |||
| original font. | |||
| */ | |||
| static const Font fromString (const String& fontDescription); | |||
| //============================================================================== | |||
| juce_UseDebuggingNewOperator | |||