diff --git a/examples/AUv3Synth/AUv3Synth.jucer b/examples/AUv3Synth/AUv3Synth.jucer index 453d9466c2..a0e495dd08 100644 --- a/examples/AUv3Synth/AUv3Synth.jucer +++ b/examples/AUv3Synth/AUv3Synth.jucer @@ -5,10 +5,9 @@ buildVST="1" buildVST3="1" buildAU="0" buildAUv3="1" buildRTAS="0" buildAAX="0" pluginName="AUv3 Synth" pluginDesc="AUv3 Synth" pluginManufacturer="ROLI Ltd." pluginManufacturerCode="ROLI" - pluginCode="AUv3" pluginChannelConfigs="{0,2}" pluginIsSynth="1" - pluginWantsMidiIn="1" pluginProducesMidiOut="0" pluginIsMidiEffectPlugin="0" - pluginEditorRequiresKeys="0" pluginAUExportPrefix="AUv3SynthAU" - pluginRTASCategory="" aaxIdentifier="com.roli.development.AUv3Synth" + pluginCode="AUv3" pluginChannelConfigs="" pluginIsSynth="1" pluginWantsMidiIn="1" + pluginProducesMidiOut="0" pluginIsMidiEffectPlugin="0" pluginEditorRequiresKeys="0" + pluginAUExportPrefix="AUv3SynthAU" pluginRTASCategory="" aaxIdentifier="com.roli.development.AUv3Synth" pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.4" buildStandalone="1"> diff --git a/examples/AUv3Synth/Builds/MacOSX/AUv3Synth.xcodeproj/project.pbxproj b/examples/AUv3Synth/Builds/MacOSX/AUv3Synth.xcodeproj/project.pbxproj index f0b16f1e2c..c6a9e4503a 100644 --- a/examples/AUv3Synth/Builds/MacOSX/AUv3Synth.xcodeproj/project.pbxproj +++ b/examples/AUv3Synth/Builds/MacOSX/AUv3Synth.xcodeproj/project.pbxproj @@ -71,14 +71,12 @@ 0470F8A85B927F530A374CDB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; 04AD581DA72D441C50F4D53D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleComponent.h"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.h"; sourceTree = "SOURCE_ROOT"; }; 04CDFCB4FF06CA7E1B0CC260 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; - 05206E536544288B1DFC3EC7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 0527F8D9C84F850B9E2F794C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorListener.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h"; sourceTree = "SOURCE_ROOT"; }; 053838409E82E7D7722F7404 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = vorbisenc.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/vorbisenc.h"; sourceTree = "SOURCE_ROOT"; }; 0589532FD9A73AE783AEAFF9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; }; 05C14DEEE0E3BDC4049484B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_DigiCode1.cpp"; path = "../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode1.cpp"; sourceTree = "SOURCE_ROOT"; }; 06580FB07A43DEC6C8295BA6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_VST_utils.mm"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_VST_utils.mm"; sourceTree = "SOURCE_ROOT"; }; 066F37651C7F3792917C2F8E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; }; - 068109EA4981DB342942D174 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginBusUtilities.h"; path = "../../../../modules/juce_audio_plugin_client/utility/juce_PluginBusUtilities.h"; sourceTree = "SOURCE_ROOT"; }; 0737F61AF723FA62458B92BF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandTarget.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp"; sourceTree = "SOURCE_ROOT"; }; 0762DCD2200EC064A17AC77F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FloatVectorOperations.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h"; sourceTree = "SOURCE_ROOT"; }; 07731AE3B779E9D7B560C394 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -160,7 +158,6 @@ 16F4A8C0228D84216A33B9B4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; }; 170409D99808EC4EADC66EFF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; 1770847B9C9E2A0FD1D9A9E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CADebugMacros.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CADebugMacros.h"; sourceTree = "SOURCE_ROOT"; }; - 17968A543385166D4392F171 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 17D44D834820845D7F4BCB79 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; }; 17EE88F0A67B5FD24182345A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; 185A5E99EFDAB0E1ED5467F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; }; @@ -360,10 +357,10 @@ 3CA7CE7F3D18ED267686C692 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUOutputElement.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputElement.h"; sourceTree = "SOURCE_ROOT"; }; 3CCBF30007C57491CF649D39 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ConcertinaPanel.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ConcertinaPanel.h"; sourceTree = "SOURCE_ROOT"; }; 3CF1BFA42E09BA635804012C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3CFA00267B569DE2C24D38C6 = {isa = PBXFileReference; lastKnownFileType = file.r; name = AUResources.r; path = "../../../../modules/juce_audio_plugin_client/AUResources.r"; sourceTree = "SOURCE_ROOT"; }; 3D850D7C81C79515EA35D833 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LADSPAPluginFormat.cpp"; path = "../../../../modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; 3D99E812E5A31F89576AFD48 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcinit.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcinit.c"; sourceTree = "SOURCE_ROOT"; }; 3DAF5957533C9C8011332F42 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LiveConstantEditor.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_LiveConstantEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3E76A3788CAAB12560CB4517 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_plugin_client/AU/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 3EBDB41A4AA8C71BB089DD65 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; 3EF9DAAD65875B7A36AE3144 = {isa = PBXFileReference; lastKnownFileType = text.txt; name = "Ogg Vorbis Licence.txt"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/Ogg Vorbis Licence.txt"; sourceTree = "SOURCE_ROOT"; }; 3F0F5BDD3B7B6493257DBE72 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AUv3.mm"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AUv3.mm"; sourceTree = "SOURCE_ROOT"; }; @@ -631,6 +628,7 @@ 79FF0A4C4E7239DBDC350A7A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUMIDIBase.cpp; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUMIDIBase.cpp"; sourceTree = "SOURCE_ROOT"; }; 7A172478B945BDF97AFFBA0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GenericAudioProcessorEditor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; 7A3E22B63496806947FC10A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MP3AudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_MP3AudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7A53F57CC60CF2CD4CA2D534 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 7A73BDB9B30EB6AA268882EC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = crc.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/crc.c"; sourceTree = "SOURCE_ROOT"; }; 7A772485103B4848CD67493D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePointPath.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.h"; sourceTree = "SOURCE_ROOT"; }; 7A7DC1C99D232DAD43C01146 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceSelectorComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -742,6 +740,7 @@ 8F3941CB0EBB70B37B7DB6DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; 8F3C3474E9EB852A40B3A25B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUPlugInDispatch.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUPlugInDispatch.h"; sourceTree = "SOURCE_ROOT"; }; 8F3FC2A8E965AA4E83259DB3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8F401D45467D951DD3E3F810 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 8FAE0E215D1E95E6CA7C58E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../../modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; }; 8FC88FE9250C7A25AC724BEF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; }; 8FE4D93D82016AE0E952662F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcomapi.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcomapi.c"; sourceTree = "SOURCE_ROOT"; }; @@ -754,7 +753,6 @@ 9146F18918C954121E932A8B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; }; 9198593E2E34D16752B90CD1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; }; 91D10BF1909D2B9C169E4493 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_8.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_8.h"; sourceTree = "SOURCE_ROOT"; }; - 91F32F326BD577CD67AE20D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_44u.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44u.h"; sourceTree = "SOURCE_ROOT"; }; 92529B06E070A28F0C3C4914 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; }; 92723EFA7826236908D48AC3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAAUParameter.cpp; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAUParameter.cpp"; sourceTree = "SOURCE_ROOT"; }; 92BFAF31B51618764234C779 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -830,7 +828,6 @@ A1CFD76549B8E9EB1C360ED5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; A1FA95A0AA37CD773ACBCE8A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; }; A2129507609CE7130FBA1340 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../../../modules/juce_graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; }; - A236B01D70F55D3570330B44 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatManager.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; A29CEAB6F2F844C410B2F014 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../../../modules/juce_graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; }; A35BCEE1A423BE734BB3EC80 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../../modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; }; A36C4D27B63C7395BBF9E1D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = zutil.h; path = "../../../../modules/juce_core/zip/zlib/zutil.h"; sourceTree = "SOURCE_ROOT"; }; @@ -845,6 +842,7 @@ A53855C517AD1588DBF87CA0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlElement.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlElement.cpp"; sourceTree = "SOURCE_ROOT"; }; A56060E773F77B3CA7DC3743 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcapistd.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcapistd.c"; sourceTree = "SOURCE_ROOT"; }; A58103D78876730190F3BC4A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; + A6610B06B712DDE6F2A27290 = {isa = PBXFileReference; lastKnownFileType = text.txt; name = "Flac Licence.txt"; path = "../../../../modules/juce_audio_formats/codecs/flac/Flac Licence.txt"; sourceTree = "SOURCE_ROOT"; }; A666509292D7F4C3B7F5B0DC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ProgressBar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.h"; sourceTree = "SOURCE_ROOT"; }; A67C1F56AE76AD426797537F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = codec.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/codec.h"; sourceTree = "SOURCE_ROOT"; }; A7399999B1C3CE46C66268C1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -882,48 +880,21 @@ ABEAE8C8B69A71C532DF770B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_VST3.cpp"; path = "../../JuceLibraryCode/juce_audio_plugin_client_VST3.cpp"; sourceTree = "SOURCE_ROOT"; }; ABF137A60BDB5810DCDD1E22 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioVisualiserComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioVisualiserComponent.h"; sourceTree = "SOURCE_ROOT"; }; AC223785E50A0284BAC9C879 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseCursor.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.cpp"; sourceTree = "SOURCE_ROOT"; }; - AC36AEF9A7D94B5F50725E38 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = lpc.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.h"; sourceTree = "SOURCE_ROOT"; }; AC3D1C939D60CBB9F06E5195 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorPlayer.h"; path = "../../../../modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h"; sourceTree = "SOURCE_ROOT"; }; ACDA8668B39A102D419BD481 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.h"; sourceTree = "SOURCE_ROOT"; }; + ACDCFB7C5CE966089DF7665E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../../modules/juce_core/files/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + AD228AE61929A94FFBE55CF4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAtomicStack.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAtomicStack.h"; sourceTree = "SOURCE_ROOT"; }; + AD49758CCCDB81F781160518 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterInt.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioParameterInt.h"; sourceTree = "SOURCE_ROOT"; }; AD748818ED49AF2A6BF7AF0D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAMath.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAMath.h"; sourceTree = "SOURCE_ROOT"; }; ADA10B57D3CACBF7CA3E7058 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; ADEFBF282F9FF39E37862A73 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pnginfo.h; path = "../../../../modules/juce_graphics/image_formats/pnglib/pnginfo.h"; sourceTree = "SOURCE_ROOT"; }; AE0F66472A7765041DD5F722 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Point.h"; path = "../../../../modules/juce_graphics/geometry/juce_Point.h"; sourceTree = "SOURCE_ROOT"; }; AE1DD722E80713D6A2C820C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AU_Wrapper.mm"; path = "../../../../modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; AE8270C49E4D0C9109CF8499 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + AE9CA003C4D379CB43E9CDE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAException.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAException.h"; sourceTree = "SOURCE_ROOT"; }; AF02093447674A2DBEFB7B2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextInputTarget.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextInputTarget.h"; sourceTree = "SOURCE_ROOT"; }; AF575F9303D3AA5E410C274A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; }; B0015C46815CEB6E15236944 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPlayHead.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPlayHead.h"; sourceTree = "SOURCE_ROOT"; }; - B1972B63AC71C03527E02534 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; }; - B2CF7DCAD1C8871201A6CE26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; - B2F8C1DFA6A765EDB034399D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; - B3CA6447C345EE05F8B98195 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; }; - B442A76A84E1800D10EE5954 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; }; - B46C496B84C02A7F7D49B44F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; }; - B48471A74A3A2BDA248931F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vorbisfile.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisfile.c"; sourceTree = "SOURCE_ROOT"; }; - B5029BFA56B6E1BB5FB43BFD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - B58CC7A93DBB3706A60E9E76 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; }; - B5CD08BC33A8414D48F4CD67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; - B6ABAD2ACC048C4DAB31CA27 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; }; - B774AC9A00BFF63E24EA0646 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VST3PluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; - B77F4A6EA1005BE4683A0DAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPESynthesiserVoice.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.cpp"; sourceTree = "SOURCE_ROOT"; }; - B8622807DB0688A98F8C75E4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "lookup_data.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup_data.h"; sourceTree = "SOURCE_ROOT"; }; - BAA373F740C171EB1219D9B0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessage.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.h"; sourceTree = "SOURCE_ROOT"; }; - BBD06432CC4155521050CD2A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V3.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h"; sourceTree = "SOURCE_ROOT"; }; - C12C3BDF0D24260675D88C04 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiBuffer.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; - E04216439C3A2AD69B69B520 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; - F5E81FD99EFCB226D2486603 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AUv3Synth.vst; sourceTree = "BUILT_PRODUCTS_DIR"; }; - E4AB099F3E7A853F90FBFEEB = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AUv3Synth.vst3; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 746B19364297E7D489749B70 = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = AUv3Synth.appex; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 7CBEB55B80E78C9DE16A713A = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; - 872D05BD56490FD7B375C11B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; - 8C9C38D32DB4D8BD543CA892 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; - A6610B06B712DDE6F2A27290 = {isa = PBXFileReference; lastKnownFileType = text.txt; name = "Flac Licence.txt"; path = "../../../../modules/juce_audio_formats/codecs/flac/Flac Licence.txt"; sourceTree = "SOURCE_ROOT"; }; - AC3356631ED2AC043BC67B79 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - ACDCFB7C5CE966089DF7665E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../../modules/juce_core/files/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; - AD228AE61929A94FFBE55CF4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAtomicStack.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAtomicStack.h"; sourceTree = "SOURCE_ROOT"; }; - AD49758CCCDB81F781160518 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterInt.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioParameterInt.h"; sourceTree = "SOURCE_ROOT"; }; - AE9CA003C4D379CB43E9CDE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAException.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAException.h"; sourceTree = "SOURCE_ROOT"; }; B032D869039A2B845AAD274E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inftrees.h; path = "../../../../modules/juce_core/zip/zlib/inftrees.h"; sourceTree = "SOURCE_ROOT"; }; B054CDFF33B17777FD1855BF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcphuff.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcphuff.c"; sourceTree = "SOURCE_ROOT"; }; B05EC8A81DA162236663A8AF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IPAddress.cpp"; path = "../../../../modules/juce_core/network/juce_IPAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -931,44 +902,75 @@ B0B4FAE3EA49CE2AE0074204 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; B0E5392688FD05700AFA0569 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; }; B19103A5C4E54D5ABB50F27F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; }; + B1972B63AC71C03527E02534 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; }; B2A30D3171F293ECE50DC06B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; }; B2C885D79DF233E10656633A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; }; + B2CF7DCAD1C8871201A6CE26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + B2F8C1DFA6A765EDB034399D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; B33097C6BA7E4793E7536BBC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsContext.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; B33E3A1B455B48F251A4EFEB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; B3425236EBB43087A2C4AA71 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../../modules/juce_core/containers/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; }; B389D5350378076E0DF5DA6D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = export.h; path = "../../../../modules/juce_audio_formats/codecs/flac/export.h"; sourceTree = "SOURCE_ROOT"; }; B3AED660CB964056A7063CE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; + B3CA6447C345EE05F8B98195 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; }; + B442A76A84E1800D10EE5954 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; }; + B46C496B84C02A7F7D49B44F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; }; B4C32A6592E159751BD10360 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngconf.h"; sourceTree = "SOURCE_ROOT"; }; + B5029BFA56B6E1BB5FB43BFD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; B585667FC1E99FE5C1E3F799 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jquant2.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jquant2.c"; sourceTree = "SOURCE_ROOT"; }; + B58CC7A93DBB3706A60E9E76 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; }; B5C3356C447E60F512C5E8CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; B5CA4FEE0ADFDACCAF2FB017 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngget.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngget.c"; sourceTree = "SOURCE_ROOT"; }; + B5CD08BC33A8414D48F4CD67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; + B6ABAD2ACC048C4DAB31CA27 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; }; B6B3AF7688EF55A4FC61D5D6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; B6EA3B412C6E73478C4D36AD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win_BluetoothMidiDevicePairingDialogue.cpp"; path = "../../../../modules/juce_audio_utils/native/juce_win_BluetoothMidiDevicePairingDialogue.cpp"; sourceTree = "SOURCE_ROOT"; }; B77C48286D446F5C7BD4B76F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; + B77F4A6EA1005BE4683A0DAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPESynthesiserVoice.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.cpp"; sourceTree = "SOURCE_ROOT"; }; B79F6D7A104EF67978CFFC4B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAVectorUnitTypes.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnitTypes.h"; sourceTree = "SOURCE_ROOT"; }; B801E3F5A1C2992F592A0FBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnail.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnail.h"; sourceTree = "SOURCE_ROOT"; }; B812C4A2809BB37D45F54A59 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdatasrc.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdatasrc.c"; sourceTree = "SOURCE_ROOT"; }; B8133580F67C0B95E1F36D4E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../../../modules/juce_core/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; }; B85C9F9BF94FA8926EB9ACB8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; }; - B986157ED5B0414CDF696C62 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAHostTimeBase.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAHostTimeBase.h"; sourceTree = "SOURCE_ROOT"; }; B98F443DC0CE94BC13CC3D44 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; + BAA373F740C171EB1219D9B0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessage.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.h"; sourceTree = "SOURCE_ROOT"; }; BABAE6EE994D5EBDC4013AAB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleMessageComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h"; sourceTree = "SOURCE_ROOT"; }; + BB8432AE150D5AEB38808FA9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../../modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; + BBD06432CC4155521050CD2A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V3.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h"; sourceTree = "SOURCE_ROOT"; }; + BD283419247CBA6C6DD2ADD6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; }; + BDDC593699182D1603163238 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_devices.cpp"; path = "../../../../modules/juce_audio_devices/juce_audio_devices.cpp"; sourceTree = "SOURCE_ROOT"; }; + BDEE5F6548D2980373C45F5B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; }; + BF6BA28F41BA2A03D9325E0F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = md5.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/md5.h"; sourceTree = "SOURCE_ROOT"; }; + BF764E314E4F6DD434BA711A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + C12C3BDF0D24260675D88C04 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiBuffer.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; + C7BED13E38A3138A9D851FAE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_basics.cpp"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; + C9B7C5BD09A1486B2A10DA8C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cpu.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/cpu.h"; sourceTree = "SOURCE_ROOT"; }; + E04216439C3A2AD69B69B520 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + F5AC725E091D3D7F8DD13F08 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; + F5E81FD99EFCB226D2486603 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AUv3Synth.vst; sourceTree = "BUILT_PRODUCTS_DIR"; }; + E4AB099F3E7A853F90FBFEEB = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AUv3Synth.vst3; sourceTree = "BUILT_PRODUCTS_DIR"; }; + 746B19364297E7D489749B70 = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = AUv3Synth.appex; sourceTree = "BUILT_PRODUCTS_DIR"; }; + 7CBEB55B80E78C9DE16A713A = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; + 872D05BD56490FD7B375C11B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; + 8C9C38D32DB4D8BD543CA892 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; + 91F32F326BD577CD67AE20D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_44u.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44u.h"; sourceTree = "SOURCE_ROOT"; }; + A236B01D70F55D3570330B44 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatManager.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; + AC3356631ED2AC043BC67B79 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; + AC36AEF9A7D94B5F50725E38 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = lpc.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.h"; sourceTree = "SOURCE_ROOT"; }; + B48471A74A3A2BDA248931F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vorbisfile.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisfile.c"; sourceTree = "SOURCE_ROOT"; }; + B774AC9A00BFF63E24EA0646 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VST3PluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + B8622807DB0688A98F8C75E4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "lookup_data.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup_data.h"; sourceTree = "SOURCE_ROOT"; }; + B986157ED5B0414CDF696C62 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAHostTimeBase.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAHostTimeBase.h"; sourceTree = "SOURCE_ROOT"; }; BB1D6E0B0982D0590E8EC99F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; BB525259297D31B45CC624C8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DeletedAtShutdown.cpp"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.cpp"; sourceTree = "SOURCE_ROOT"; }; - BB8432AE150D5AEB38808FA9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../../modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; BBB323B5DE53878F445064D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../../modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; BC2068C5203B2AA39EAE0C6A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors.mm"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; BCC48160464BC0DFCAD33792 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../../modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; - BD283419247CBA6C6DD2ADD6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; }; BD58CC09BA9FED0E9CACC97B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WindowsMediaAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; BD95E66B6A4CDADCF0631707 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAStreamBasicDescription.cpp; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAStreamBasicDescription.cpp"; sourceTree = "SOURCE_ROOT"; }; - BDDC593699182D1603163238 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_devices.cpp"; path = "../../../../modules/juce_audio_devices/juce_audio_devices.cpp"; sourceTree = "SOURCE_ROOT"; }; - BDEE5F6548D2980373C45F5B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; }; BED2521A9CE66A6F1A5AE7F7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngpread.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngpread.c"; sourceTree = "SOURCE_ROOT"; }; BED2D02D5F333084E058D678 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - BF6BA28F41BA2A03D9325E0F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = md5.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/md5.h"; sourceTree = "SOURCE_ROOT"; }; BF6DA9258B6994A918D3EC38 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_extra.mm"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.mm"; sourceTree = "SOURCE_ROOT"; }; - BF764E314E4F6DD434BA711A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; C002FF4D43F9C779CB5B2B5C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; C0467549EAF92B8F6871EBAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = inflate.c; path = "../../../../modules/juce_core/zip/zlib/inflate.c"; sourceTree = "SOURCE_ROOT"; }; C0B3C8CFE6B70EE5C8C483F4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_posix_NamedPipe.cpp"; path = "../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -978,6 +980,7 @@ C14EFFF60594E0BC2421DC0F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; C1983ED4284CBEF3B5A427E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; C1D83773976CEDB413DB5E5D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = envelope.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.c"; sourceTree = "SOURCE_ROOT"; }; + C1E4A7F5418639D70CB51F0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; C1EFF2064480889DAC74D2D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; C25203A01A84B7032A7774CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; C2DF4936EF95E5A32E71B755 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1000,31 +1003,23 @@ C639338DD5AF077DF5BF8361 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; C68283C8A9FA7CEC6AA6975C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = scales.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/scales.h"; sourceTree = "SOURCE_ROOT"; }; C6846316837E7D4578428945 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../../modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; }; - C7BED13E38A3138A9D851FAE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_basics.cpp"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; C80FFBB5F1E2674B9DBC054B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; C87B625D4AD4826BF9301E7E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_8.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_8.h"; sourceTree = "SOURCE_ROOT"; }; C9407CAAB91ABCB83CD3F80D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; C9494DFECDCD27C0815A6F17 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; - C9B7C5BD09A1486B2A10DA8C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cpu.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/cpu.h"; sourceTree = "SOURCE_ROOT"; }; CA633B8B756E9E7826C8D173 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; CB23F9E24266013856B53BBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; - CC32EDCC4709790EBBA55941 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h"; sourceTree = "SOURCE_ROOT"; }; - CFAFC86F4D25AB5A31DF3BE5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; - D06C2B85E02F13F9B57DB1A9 = {isa = PBXFileReference; lastKnownFileType = image.png; name = power.png; path = ../../Source/BinaryData/power.png; sourceTree = "SOURCE_ROOT"; }; - EC3DE1F504C76EEDDA7F2216 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AUv3Synth.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 9536B5A780A03F6BACB24144 = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAUv3Synth.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; - C1E4A7F5418639D70CB51F0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; - C61D176AAECFBC9A277EF2E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FFT.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_FFT.cpp"; sourceTree = "SOURCE_ROOT"; }; - C63541C14D518046922DF60B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; CBA22CAB6770979BCCD18EEA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = framing.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/framing.c"; sourceTree = "SOURCE_ROOT"; }; CC14A34F66FDF9E12523CABF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AUv3.mm"; path = "../../JuceLibraryCode/juce_audio_plugin_client_AUv3.mm"; sourceTree = "SOURCE_ROOT"; }; CC155101953B89262C8B633C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + CC32EDCC4709790EBBA55941 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h"; sourceTree = "SOURCE_ROOT"; }; CD3ABE20AE524B92B9B6A6FA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; CD41042388657A558C93AD86 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngtrans.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngtrans.c"; sourceTree = "SOURCE_ROOT"; }; CD44BCDC60998F9B56D816C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = adler32.c; path = "../../../../modules/juce_core/zip/zlib/adler32.c"; sourceTree = "SOURCE_ROOT"; }; CDE81ADB14F09742FBBA28E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; CE491063B3EF486A263519F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_X.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_X.h"; sourceTree = "SOURCE_ROOT"; }; CE517EF86B0776BA9B27F3F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUTimestampGenerator.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUTimestampGenerator.h"; sourceTree = "SOURCE_ROOT"; }; + CE7E28DA6360B3B4BBCBFD04 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; CF02DA80A8A515CE41B0C8F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_Standalone.cpp"; path = "../../JuceLibraryCode/juce_audio_plugin_client_Standalone.cpp"; sourceTree = "SOURCE_ROOT"; }; CF2F576CE0F6A185597C8D40 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; CF344C62ABCBA9BAAB6ACFA2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_AudioSource.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1034,9 +1029,11 @@ CF9EEC4A087AA9010D5D21A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; CFADD611F5F0D9EC5127C6C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = trees.c; path = "../../../../modules/juce_core/zip/zlib/trees.c"; sourceTree = "SOURCE_ROOT"; }; CFAF04B0DF40F2C81026ACD2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; }; + CFAFC86F4D25AB5A31DF3BE5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; CFFC609186B1EE226ACEBD2D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; D03583C1CA01284B5781955E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; }; D0584D8F725E0D7E61F830F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = deflate.c; path = "../../../../modules/juce_core/zip/zlib/deflate.c"; sourceTree = "SOURCE_ROOT"; }; + D06C2B85E02F13F9B57DB1A9 = {isa = PBXFileReference; lastKnownFileType = image.png; name = power.png; path = ../../Source/BinaryData/power.png; sourceTree = "SOURCE_ROOT"; }; D0A4E2C5F2B21172DE13DE0C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; D0ECDC7390CA390D69946652 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcsample.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcsample.c"; sourceTree = "SOURCE_ROOT"; }; D1683E32F1EB634904CD7DE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../../../modules/juce_audio_devices/native/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1045,7 +1042,6 @@ D264387115074C98CF251072 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; D34BDE3AF93D8CCE91C331AF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiRPN.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiRPN.cpp"; sourceTree = "SOURCE_ROOT"; }; D36CD153A79988DA706EC9A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; - D399047CE27AA5B33FE37AF2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ComponentBase.cpp; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/ComponentBase.cpp"; sourceTree = "SOURCE_ROOT"; }; D3D5C9CD534AB3AE61D7B09D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUInputElement.cpp; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUInputElement.cpp"; sourceTree = "SOURCE_ROOT"; }; D43BFA7F052E625E90F77C89 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_processors.h"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.h"; sourceTree = "SOURCE_ROOT"; }; D43C762F1355546820373F14 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActiveXControlComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1061,7 +1057,6 @@ D6670F0F52C7A439715B706F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../../modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; }; D6979B0DD8E310EA2512B147 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; D72A2819C390689ED5A58197 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ContainerDeletePolicy.h"; path = "../../../../modules/juce_core/memory/juce_ContainerDeletePolicy.h"; sourceTree = "SOURCE_ROOT"; }; - D776C107490A52D250B8327B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; }; D7AD93F3A8FAFDBFDF1B5DF5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlyphArrangement.h"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.h"; sourceTree = "SOURCE_ROOT"; }; D7CDE24FD157D0DF359E9D8D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Drawable.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_Drawable.h"; sourceTree = "SOURCE_ROOT"; }; D7F0DF2B23660D1E12432C36 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1070,19 +1065,27 @@ D87ED789DA527A749E7310E4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CachedComponentImage.h"; path = "../../../../modules/juce_gui_basics/components/juce_CachedComponentImage.h"; sourceTree = "SOURCE_ROOT"; }; D8A47626236CCECFA27BA813 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; D8DFA74AB1A9041035F68326 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlowEffect.cpp"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.cpp"; sourceTree = "SOURCE_ROOT"; }; + D9B635DD89ED59E04DF326E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = compat.h; path = "../../../../modules/juce_audio_formats/codecs/flac/compat.h"; sourceTree = "SOURCE_ROOT"; }; + D9B9854449877DBFC0C1CC3B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctred.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jidctred.c"; sourceTree = "SOURCE_ROOT"; }; + D9D833D2912CC83006BD9FA4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEZoneLayout.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPEZoneLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; + DA4E0EA3EB80BE34F9047E72 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; + DC60BA9AC2BA5D2C3B5C3001 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Sampler.h"; path = "../../../../modules/juce_audio_formats/sampler/juce_Sampler.h"; sourceTree = "SOURCE_ROOT"; }; + DEC3BDE099A6E8517815F464 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_JackAudio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_JackAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; + EC3DE1F504C76EEDDA7F2216 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AUv3Synth.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; + 9536B5A780A03F6BACB24144 = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAUv3Synth.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; + C61D176AAECFBC9A277EF2E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FFT.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_FFT.cpp"; sourceTree = "SOURCE_ROOT"; }; + C63541C14D518046922DF60B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + D399047CE27AA5B33FE37AF2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ComponentBase.cpp; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/ComponentBase.cpp"; sourceTree = "SOURCE_ROOT"; }; + D776C107490A52D250B8327B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferedInputStream.h"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.h"; sourceTree = "SOURCE_ROOT"; }; D8E68D83ACE5DBEA2B7BC876 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; D908038BAE155E55517AB2FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../../modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; D90938FEE6B821CE90556A9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwutil.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngwutil.c"; sourceTree = "SOURCE_ROOT"; }; D98FE007073170879B3453CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInputSource.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.h"; sourceTree = "SOURCE_ROOT"; }; D99FD2C65027F0D06BCB437F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPEValue.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPEValue.h"; sourceTree = "SOURCE_ROOT"; }; - D9B635DD89ED59E04DF326E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = compat.h; path = "../../../../modules/juce_audio_formats/codecs/flac/compat.h"; sourceTree = "SOURCE_ROOT"; }; - D9B9854449877DBFC0C1CC3B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctred.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jidctred.c"; sourceTree = "SOURCE_ROOT"; }; D9D057AE4FE642513602611B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; }; - D9D833D2912CC83006BD9FA4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEZoneLayout.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPEZoneLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; D9ED0926381D40DA1A66C26D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors.mm"; path = "../../JuceLibraryCode/juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; DA1AD416DB2E990AD25806AB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = bitreader.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/bitreader.c"; sourceTree = "SOURCE_ROOT"; }; DA42AACD549E6C214EE09CF0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageFileFormat.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - DA4E0EA3EB80BE34F9047E72 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; DACA6E5A3CE684EC649F31B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; DAEE812EF95F96E7D65D875F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; DB216D8107F0BBBBD3F2B0E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1094,7 +1097,6 @@ DC18200A3CD14E988426420C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; DC1C558103B4D458A6CA037C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiFile.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.h"; sourceTree = "SOURCE_ROOT"; }; DC235ECDD76E245939C49092 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "codec_internal.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codec_internal.h"; sourceTree = "SOURCE_ROOT"; }; - DC60BA9AC2BA5D2C3B5C3001 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Sampler.h"; path = "../../../../modules/juce_audio_formats/sampler/juce_Sampler.h"; sourceTree = "SOURCE_ROOT"; }; DC6A702F738F41B34B329097 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorValueTreeState.cpp"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp"; sourceTree = "SOURCE_ROOT"; }; DC6E859FF89B5A3C9BAFE19F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; DC8F10CCAC55F7216F0304F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AAX_Wrapper.cpp"; path = "../../../../modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1108,7 +1110,6 @@ DE76DD99A5E06C01C57957A1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.h"; sourceTree = "SOURCE_ROOT"; }; DEAD87726738781A25EBCFFB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioFormatReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; }; DEC24A286A1DEF26BE35CC20 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = psy.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.c"; sourceTree = "SOURCE_ROOT"; }; - DEC3BDE099A6E8517815F464 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_JackAudio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_JackAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; DEC63BC653D0F918D0721CF4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; }; DF2A14735E2EC0F986E3ED6F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../../modules/juce_core/files/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; }; DF42DB861DD40B3EA519F49F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1305,6 +1306,8 @@ 8E3C833F5CCC3BD43C061796 = {isa = PBXGroup; children = ( DB89B006F28EC7A4ADDFE800, ); name = AUv3Synth; sourceTree = ""; }; 80EEC7BDC5E94E232E8EEF4D = {isa = PBXGroup; children = ( + 8F401D45467D951DD3E3F810, + F5AC725E091D3D7F8DD13F08, 13DD37B2F314596BBC25A47D, 4D4252EF0D8D9BD4AFBB830A, E04216439C3A2AD69B69B520, @@ -1631,7 +1634,7 @@ 2CC92DEE105B69921A4BD036, 9329788543F0C6DA2B50BD72, 2CC92DEE105B69921A4BD036, ); name = "juce_audio_formats"; sourceTree = ""; }; - 988670913C41D72F28DFE34E = {isa = PBXGroup; children = ( + BC8CB37BFD39D59EF5309301 = {isa = PBXGroup; children = ( 98135B5CED6D00B04F8AD56C, DC8F10CCAC55F7216F0304F9, ); name = AAX; sourceTree = ""; }; FE2338066D80D87950BB4358 = {isa = PBXGroup; children = ( @@ -1693,10 +1696,9 @@ F8952FD62C839E34EBB043F6, ); name = CoreAudioUtilityClasses; sourceTree = ""; }; A2BBDDDA694235612BDE9BD0 = {isa = PBXGroup; children = ( FE2338066D80D87950BB4358, - 3E76A3788CAAB12560CB4517, AE1DD722E80713D6A2C820C9, 2220D1078A2681D8AAF3563E, ); name = AU; sourceTree = ""; }; - 618CCB6A21E8C032AF1D2BEB = {isa = PBXGroup; children = ( + CCA0C52CA51321AE5F2F7788 = {isa = PBXGroup; children = ( 8905DE78626372768938A4C0, 05C14DEEE0E3BDC4049484B5, 2FA12F7EBB9AC99A08FC1025, @@ -1704,32 +1706,31 @@ DBA0B8703ED6A2CFF6E952A8, 2D4E5D168D18704BCB317DD8, CF51659EBB00003E6CB20B66, ); name = RTAS; sourceTree = ""; }; - E57F8E0940E0C2FB651C1534 = {isa = PBXGroup; children = ( + EE2839CD585A070804E364C2 = {isa = PBXGroup; children = ( 33B2FD7C625F65B132945522, 44E613EE8E541E69E6B8A449, ); name = Standalone; sourceTree = ""; }; - 6E32D1C853DB168862215AF5 = {isa = PBXGroup; children = ( + 6417F3B89043CAB29033BAEB = {isa = PBXGroup; children = ( 30CDFDC04232575AE7A491F3, F96C31890AED2B62C4E0E20A, 00A950F33C21C6688103E667, 676EBCF8F03E1FA1DD0694B0, 1A3355000573E6A083028E9A, - 068109EA4981DB342942D174, 99AC2D0C2304F21B912FEC5B, 2F9011C34B50B11B6FFEDA7F, EA8B1437F945AFED7BDF11DB, ); name = utility; sourceTree = ""; }; - 666ACBAA58DBC0AD514A3CF9 = {isa = PBXGroup; children = ( + FDD4EEDC39B2B0254F7FDC9D = {isa = PBXGroup; children = ( 78DD966E73DF076A83FC1F2C, 6FA729EAB8A64447D81B36E9, ); name = VST; sourceTree = ""; }; - 47BE374539E9FEBFEFDAD7E3 = {isa = PBXGroup; children = ( + AC5EC0DFE9C8D133DD863F06 = {isa = PBXGroup; children = ( 08D38FFAFF41735F36FD4BF9, ); name = VST3; sourceTree = ""; }; E4D31720EE240DC9A75C9459 = {isa = PBXGroup; children = ( - 988670913C41D72F28DFE34E, + BC8CB37BFD39D59EF5309301, A2BBDDDA694235612BDE9BD0, - 618CCB6A21E8C032AF1D2BEB, - E57F8E0940E0C2FB651C1534, - 6E32D1C853DB168862215AF5, - 666ACBAA58DBC0AD514A3CF9, - 47BE374539E9FEBFEFDAD7E3, + CCA0C52CA51321AE5F2F7788, + EE2839CD585A070804E364C2, + 6417F3B89043CAB29033BAEB, + FDD4EEDC39B2B0254F7FDC9D, + AC5EC0DFE9C8D133DD863F06, 9EDB40D557C3BBB1CC63CF65, 26AE9472CE02F176A9513852, 03DE1C983B7DECDCC451C8F8, @@ -1748,12 +1749,13 @@ 9AA36A7E6CCDA68D308E0721, 683BC92E095F56916A11944D, 9EDB40D557C3BBB1CC63CF65, ); name = "juce_audio_plugin_client"; sourceTree = ""; }; - EFF01DA4D6A309E350D8817E = {isa = PBXGroup; children = ( + 8DFE4590E4A5D0428CBED51E = {isa = PBXGroup; children = ( 257F4247EC175CCBFE996E55, CF9EEC4A087AA9010D5D21A5, 212425D8E8CD86B224E3CC5A, F04800D7F1A1E012E9A4AD15, ); name = format; sourceTree = ""; }; - D3F4EA0C20451C8CCC107ADD = {isa = PBXGroup; children = ( + 3BA765D45CF86B29DAD0A0A8 = {isa = PBXGroup; children = ( + 7A53F57CC60CF2CD4CA2D534, 2010BCF7EE1A761168968EEF, F5DC35A024D665725204B375, 3D850D7C81C79515EA35D833, @@ -1762,13 +1764,12 @@ 5F6BB197FA13DEB1F2260CC0, 387D55482BBDCBC351F2BECE, B774AC9A00BFF63E24EA0646, + CE7E28DA6360B3B4BBCBFD04, CFAF04B0DF40F2C81026ACD2, 87FC5378F4B65DBD11E62015, E0FD3183237BAB53F14A4B92, 58461A95ADF95E35EE92161D, ); name = "format_types"; sourceTree = ""; }; - 892DDB700F7596FA63D35453 = {isa = PBXGroup; children = ( - 17968A543385166D4392F171, - 05206E536544288B1DFC3EC7, + FA53E57AB1B932AAECAE8BCF = {isa = PBXGroup; children = ( B0015C46815CEB6E15236944, 65980EFA3678AD71581BE381, 1BD4D7258F644BC3B343432E, @@ -1800,9 +1801,9 @@ DC6A702F738F41B34B329097, F7DD5C27835C2B5ECA00A7D2, ); name = utilities; sourceTree = ""; }; 0117D11B67D779E61A4F5529 = {isa = PBXGroup; children = ( - EFF01DA4D6A309E350D8817E, - D3F4EA0C20451C8CCC107ADD, - 892DDB700F7596FA63D35453, + 8DFE4590E4A5D0428CBED51E, + 3BA765D45CF86B29DAD0A0A8, + FA53E57AB1B932AAECAE8BCF, A182EB609A9D088F6F00CE02, 93E4D725A79B28831619716C, D5816478E1FBC9D296E78CFA, diff --git a/examples/AUv3Synth/Builds/iOS/AUv3Synth.xcodeproj/project.pbxproj b/examples/AUv3Synth/Builds/iOS/AUv3Synth.xcodeproj/project.pbxproj index 3b250019a1..dd86734a23 100644 --- a/examples/AUv3Synth/Builds/iOS/AUv3Synth.xcodeproj/project.pbxproj +++ b/examples/AUv3Synth/Builds/iOS/AUv3Synth.xcodeproj/project.pbxproj @@ -65,14 +65,12 @@ 0470F8A85B927F530A374CDB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; 04AD581DA72D441C50F4D53D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleComponent.h"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.h"; sourceTree = "SOURCE_ROOT"; }; 04CDFCB4FF06CA7E1B0CC260 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; - 05206E536544288B1DFC3EC7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 0527F8D9C84F850B9E2F794C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorListener.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h"; sourceTree = "SOURCE_ROOT"; }; 053838409E82E7D7722F7404 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = vorbisenc.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/vorbisenc.h"; sourceTree = "SOURCE_ROOT"; }; 0589532FD9A73AE783AEAFF9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; }; 05C14DEEE0E3BDC4049484B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_DigiCode1.cpp"; path = "../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode1.cpp"; sourceTree = "SOURCE_ROOT"; }; 06580FB07A43DEC6C8295BA6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_VST_utils.mm"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_VST_utils.mm"; sourceTree = "SOURCE_ROOT"; }; 066F37651C7F3792917C2F8E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; }; - 068109EA4981DB342942D174 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginBusUtilities.h"; path = "../../../../modules/juce_audio_plugin_client/utility/juce_PluginBusUtilities.h"; sourceTree = "SOURCE_ROOT"; }; 0737F61AF723FA62458B92BF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandTarget.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp"; sourceTree = "SOURCE_ROOT"; }; 0762DCD2200EC064A17AC77F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FloatVectorOperations.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h"; sourceTree = "SOURCE_ROOT"; }; 07731AE3B779E9D7B560C394 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -153,7 +151,6 @@ 16F4A8C0228D84216A33B9B4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; }; 170409D99808EC4EADC66EFF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; 1770847B9C9E2A0FD1D9A9E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CADebugMacros.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CADebugMacros.h"; sourceTree = "SOURCE_ROOT"; }; - 17968A543385166D4392F171 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 17D44D834820845D7F4BCB79 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; }; 17EE88F0A67B5FD24182345A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; 185A5E99EFDAB0E1ED5467F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; }; @@ -353,10 +350,10 @@ 3CA7CE7F3D18ED267686C692 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUOutputElement.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputElement.h"; sourceTree = "SOURCE_ROOT"; }; 3CCBF30007C57491CF649D39 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ConcertinaPanel.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ConcertinaPanel.h"; sourceTree = "SOURCE_ROOT"; }; 3CF1BFA42E09BA635804012C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 3CFA00267B569DE2C24D38C6 = {isa = PBXFileReference; lastKnownFileType = file.r; name = AUResources.r; path = "../../../../modules/juce_audio_plugin_client/AUResources.r"; sourceTree = "SOURCE_ROOT"; }; 3D850D7C81C79515EA35D833 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LADSPAPluginFormat.cpp"; path = "../../../../modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; 3D99E812E5A31F89576AFD48 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcinit.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcinit.c"; sourceTree = "SOURCE_ROOT"; }; 3DAF5957533C9C8011332F42 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LiveConstantEditor.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_LiveConstantEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3E76A3788CAAB12560CB4517 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_plugin_client/AU/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 3EBDB41A4AA8C71BB089DD65 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; 3EF9DAAD65875B7A36AE3144 = {isa = PBXFileReference; lastKnownFileType = text.txt; name = "Ogg Vorbis Licence.txt"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/Ogg Vorbis Licence.txt"; sourceTree = "SOURCE_ROOT"; }; 3F0F5BDD3B7B6493257DBE72 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AUv3.mm"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AUv3.mm"; sourceTree = "SOURCE_ROOT"; }; @@ -624,6 +621,7 @@ 79FF0A4C4E7239DBDC350A7A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUMIDIBase.cpp; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUMIDIBase.cpp"; sourceTree = "SOURCE_ROOT"; }; 7A172478B945BDF97AFFBA0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GenericAudioProcessorEditor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; 7A3E22B63496806947FC10A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MP3AudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_MP3AudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7A53F57CC60CF2CD4CA2D534 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 7A73BDB9B30EB6AA268882EC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = crc.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/crc.c"; sourceTree = "SOURCE_ROOT"; }; 7A772485103B4848CD67493D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePointPath.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.h"; sourceTree = "SOURCE_ROOT"; }; 7A7DC1C99D232DAD43C01146 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceSelectorComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -735,6 +733,7 @@ 8F3941CB0EBB70B37B7DB6DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; 8F3C3474E9EB852A40B3A25B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUPlugInDispatch.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUPlugInDispatch.h"; sourceTree = "SOURCE_ROOT"; }; 8F3FC2A8E965AA4E83259DB3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8F401D45467D951DD3E3F810 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 8FAE0E215D1E95E6CA7C58E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../../modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; }; 8FC88FE9250C7A25AC724BEF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; }; 8FE4D93D82016AE0E952662F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcomapi.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcomapi.c"; sourceTree = "SOURCE_ROOT"; }; @@ -964,6 +963,7 @@ C14EFFF60594E0BC2421DC0F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; C1983ED4284CBEF3B5A427E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; C1D83773976CEDB413DB5E5D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = envelope.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.c"; sourceTree = "SOURCE_ROOT"; }; + C1E4A7F5418639D70CB51F0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; C1EFF2064480889DAC74D2D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; C25203A01A84B7032A7774CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; C2DF4936EF95E5A32E71B755 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -981,6 +981,8 @@ C5A2FC7A4569F1C242016136 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = png.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/png.c"; sourceTree = "SOURCE_ROOT"; }; C5B2DDCFB6FEA46E4F97BBA1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_events.cpp"; path = "../../../../modules/juce_events/juce_events.cpp"; sourceTree = "SOURCE_ROOT"; }; C61D176AAECFBC9A277EF2E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FFT.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_FFT.cpp"; sourceTree = "SOURCE_ROOT"; }; + C61EEED69EE6C34E5C64B729 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "config_types.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/config_types.h"; sourceTree = "SOURCE_ROOT"; }; + C63541C14D518046922DF60B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; C639338DD5AF077DF5BF8361 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; C68283C8A9FA7CEC6AA6975C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = scales.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/scales.h"; sourceTree = "SOURCE_ROOT"; }; C6846316837E7D4578428945 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../../modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; }; @@ -991,32 +993,22 @@ C9494DFECDCD27C0815A6F17 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; C9B7C5BD09A1486B2A10DA8C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cpu.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/cpu.h"; sourceTree = "SOURCE_ROOT"; }; CA633B8B756E9E7826C8D173 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + CB23F9E24266013856B53BBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + CBA22CAB6770979BCCD18EEA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = framing.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/framing.c"; sourceTree = "SOURCE_ROOT"; }; CC14A34F66FDF9E12523CABF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AUv3.mm"; path = "../../JuceLibraryCode/juce_audio_plugin_client_AUv3.mm"; sourceTree = "SOURCE_ROOT"; }; CC155101953B89262C8B633C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + CC32EDCC4709790EBBA55941 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h"; sourceTree = "SOURCE_ROOT"; }; CD3ABE20AE524B92B9B6A6FA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; CD41042388657A558C93AD86 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngtrans.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngtrans.c"; sourceTree = "SOURCE_ROOT"; }; CD44BCDC60998F9B56D816C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = adler32.c; path = "../../../../modules/juce_core/zip/zlib/adler32.c"; sourceTree = "SOURCE_ROOT"; }; + CDE81ADB14F09742FBBA28E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CE491063B3EF486A263519F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_X.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_X.h"; sourceTree = "SOURCE_ROOT"; }; + CE517EF86B0776BA9B27F3F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUTimestampGenerator.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUTimestampGenerator.h"; sourceTree = "SOURCE_ROOT"; }; + CE7E28DA6360B3B4BBCBFD04 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; CF02DA80A8A515CE41B0C8F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_Standalone.cpp"; path = "../../JuceLibraryCode/juce_audio_plugin_client_Standalone.cpp"; sourceTree = "SOURCE_ROOT"; }; CF2F576CE0F6A185597C8D40 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; CF344C62ABCBA9BAAB6ACFA2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_AudioSource.h"; sourceTree = "SOURCE_ROOT"; }; CF51659EBB00003E6CB20B66 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_Wrapper.cpp"; path = "../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; - D03583C1CA01284B5781955E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; }; - D06C2B85E02F13F9B57DB1A9 = {isa = PBXFileReference; lastKnownFileType = image.png; name = power.png; path = ../../Source/BinaryData/power.png; sourceTree = "SOURCE_ROOT"; }; - D0A4E2C5F2B21172DE13DE0C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; - D1683E32F1EB634904CD7DE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../../../modules/juce_audio_devices/native/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; }; - D515546E71BD92C742D67905 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioTransportSource.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.h"; sourceTree = "SOURCE_ROOT"; }; - DAF78E342ACF24B5A83E0605 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - EC3DE1F504C76EEDDA7F2216 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AUv3Synth.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 9536B5A780A03F6BACB24144 = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAUv3Synth.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; - C1E4A7F5418639D70CB51F0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; - C61EEED69EE6C34E5C64B729 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "config_types.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/config_types.h"; sourceTree = "SOURCE_ROOT"; }; - C63541C14D518046922DF60B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; - CB23F9E24266013856B53BBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; - CBA22CAB6770979BCCD18EEA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = framing.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/framing.c"; sourceTree = "SOURCE_ROOT"; }; - CC32EDCC4709790EBBA55941 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h"; sourceTree = "SOURCE_ROOT"; }; - CDE81ADB14F09742FBBA28E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - CE491063B3EF486A263519F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_X.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_X.h"; sourceTree = "SOURCE_ROOT"; }; - CE517EF86B0776BA9B27F3F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUTimestampGenerator.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUTimestampGenerator.h"; sourceTree = "SOURCE_ROOT"; }; CF6FA9D2F39F03FE2858F11B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; CF7ECFB4AA9A00E103525840 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../../../modules/juce_core/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; }; CF9EEC4A087AA9010D5D21A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1024,8 +1016,12 @@ CFAF04B0DF40F2C81026ACD2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; }; CFAFC86F4D25AB5A31DF3BE5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; CFFC609186B1EE226ACEBD2D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + D03583C1CA01284B5781955E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; }; D0584D8F725E0D7E61F830F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = deflate.c; path = "../../../../modules/juce_core/zip/zlib/deflate.c"; sourceTree = "SOURCE_ROOT"; }; + D06C2B85E02F13F9B57DB1A9 = {isa = PBXFileReference; lastKnownFileType = image.png; name = power.png; path = ../../Source/BinaryData/power.png; sourceTree = "SOURCE_ROOT"; }; + D0A4E2C5F2B21172DE13DE0C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; D0ECDC7390CA390D69946652 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcsample.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcsample.c"; sourceTree = "SOURCE_ROOT"; }; + D1683E32F1EB634904CD7DE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../../../modules/juce_audio_devices/native/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; }; D19E20CCCD4790B2347D5B80 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; }; D2436FFFE291F08409B1EEE2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colours.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colours.cpp"; sourceTree = "SOURCE_ROOT"; }; D264387115074C98CF251072 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1038,6 +1034,7 @@ D48932C6554B443ECB71DC87 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; }; D4A4555171F923D744B1FDF7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngstruct.h; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngstruct.h"; sourceTree = "SOURCE_ROOT"; }; D4C0852C1C54EDA5D4F82EB1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; + D515546E71BD92C742D67905 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioTransportSource.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.h"; sourceTree = "SOURCE_ROOT"; }; D557AAD12557BF1706441B19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; D5797410CEE0E8D2E03D98F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; }; D57DF4F024A84881420586E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = trees.h; path = "../../../../modules/juce_core/zip/zlib/trees.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1070,40 +1067,43 @@ DA4E0EA3EB80BE34F9047E72 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; DACA6E5A3CE684EC649F31B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; DAEE812EF95F96E7D65D875F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; + DAF78E342ACF24B5A83E0605 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; DB216D8107F0BBBBD3F2B0E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; }; DB3A7C49C8444BD2F57B6689 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; - DB43ED26DBABD0BC17385E6E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; }; DBA0B8703ED6A2CFF6E952A8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_RTAS_MacUtilities.mm"; path = "../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_MacUtilities.mm"; sourceTree = "SOURCE_ROOT"; }; DBC04DFB6E9667DCA1BC83E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_freetype_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_freetype_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; DC12C0A592BCA7A9FCE348BE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterChoice.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioParameterChoice.h"; sourceTree = "SOURCE_ROOT"; }; DC18200A3CD14E988426420C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../../modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; - DC1C558103B4D458A6CA037C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiFile.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.h"; sourceTree = "SOURCE_ROOT"; }; - DC235ECDD76E245939C49092 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "codec_internal.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codec_internal.h"; sourceTree = "SOURCE_ROOT"; }; - DC60BA9AC2BA5D2C3B5C3001 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Sampler.h"; path = "../../../../modules/juce_audio_formats/sampler/juce_Sampler.h"; sourceTree = "SOURCE_ROOT"; }; DC6A702F738F41B34B329097 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorValueTreeState.cpp"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp"; sourceTree = "SOURCE_ROOT"; }; DC6E859FF89B5A3C9BAFE19F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; - DC8F10CCAC55F7216F0304F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AAX_Wrapper.cpp"; path = "../../../../modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; DCAE9F130E3E70FA100BEE16 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HighResolutionTimer.h"; path = "../../../../modules/juce_core/threads/juce_HighResolutionTimer.h"; sourceTree = "SOURCE_ROOT"; }; DCEA692A420A94DE110CC07D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = inftrees.c; path = "../../../../modules/juce_core/zip/zlib/inftrees.c"; sourceTree = "SOURCE_ROOT"; }; + DE76DD99A5E06C01C57957A1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.h"; sourceTree = "SOURCE_ROOT"; }; + DEC24A286A1DEF26BE35CC20 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = psy.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.c"; sourceTree = "SOURCE_ROOT"; }; + DEC3BDE099A6E8517815F464 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_JackAudio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_JackAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; + DF42DB861DD40B3EA519F49F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; + E04216439C3A2AD69B69B520 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + EC3DE1F504C76EEDDA7F2216 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AUv3Synth.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; + 9536B5A780A03F6BACB24144 = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAUv3Synth.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; + DB43ED26DBABD0BC17385E6E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; }; + DC1C558103B4D458A6CA037C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiFile.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiFile.h"; sourceTree = "SOURCE_ROOT"; }; + DC235ECDD76E245939C49092 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "codec_internal.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codec_internal.h"; sourceTree = "SOURCE_ROOT"; }; + DC60BA9AC2BA5D2C3B5C3001 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Sampler.h"; path = "../../../../modules/juce_audio_formats/sampler/juce_Sampler.h"; sourceTree = "SOURCE_ROOT"; }; + DC8F10CCAC55F7216F0304F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AAX_Wrapper.cpp"; path = "../../../../modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; DCF51EBC4D12F196EEB28FB1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; DD0F106B173A73C954D57AE2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUCarbonViewBase.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewBase.h"; sourceTree = "SOURCE_ROOT"; }; DD9FC19B24786726D89345A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadWithProgressWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h"; sourceTree = "SOURCE_ROOT"; }; DDAFBE2B2CD98044F75A248F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUPlugInDispatch.cpp; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUPlugInDispatch.cpp"; sourceTree = "SOURCE_ROOT"; }; DE4E9ED582AC16303C8C72EC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Registry.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Registry.cpp"; sourceTree = "SOURCE_ROOT"; }; - DE76DD99A5E06C01C57957A1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.h"; sourceTree = "SOURCE_ROOT"; }; DEAD87726738781A25EBCFFB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioFormatReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; }; - DEC24A286A1DEF26BE35CC20 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = psy.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.c"; sourceTree = "SOURCE_ROOT"; }; - DEC3BDE099A6E8517815F464 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_JackAudio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_JackAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; DEC63BC653D0F918D0721CF4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RectanglePlacement.cpp"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.cpp"; sourceTree = "SOURCE_ROOT"; }; DF2A14735E2EC0F986E3ED6F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../../modules/juce_core/files/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; }; - DF42DB861DD40B3EA519F49F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; DF851414C38482D7EF5C63D1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; DFA88B30E3041E9BC8150FCD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GenericAudioProcessorEditor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; DFE5FACFB131FF766CE6DEEF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPressMappingSet.h"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h"; sourceTree = "SOURCE_ROOT"; }; DFF6A93D460B71379FE3EAA2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageCollector.cpp"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp"; sourceTree = "SOURCE_ROOT"; }; E0260479B3C2CAF8477026FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorParameters.cpp"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameters.cpp"; sourceTree = "SOURCE_ROOT"; }; E03AA585A375A39A9BFF3DD4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; }; - E04216439C3A2AD69B69B520 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; E0484E5F0994D64013F4EEA9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextDragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; E09404F45899AA1E82CFC21C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; E0B49BAB1C8D7341A6E142B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jdct.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdct.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1218,6 +1218,7 @@ F568A91391DB3F0F2412E8D1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LiveConstantEditor.h"; path = "../../../../modules/juce_gui_extra/misc/juce_LiveConstantEditor.h"; sourceTree = "SOURCE_ROOT"; }; F573DFC580053C77E74FA042 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "lpc_flac.c"; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/lpc_flac.c"; sourceTree = "SOURCE_ROOT"; }; F577D0F9FA7DA3AB114E69F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "stream_decoder.c"; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/stream_decoder.c"; sourceTree = "SOURCE_ROOT"; }; + F5AC725E091D3D7F8DD13F08 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; F5DC35A024D665725204B375 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AudioUnitPluginFormat.mm"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; }; F5E8E9C083E0933E6FB6CC13 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Component.h"; path = "../../../../modules/juce_gui_basics/components/juce_Component.h"; sourceTree = "SOURCE_ROOT"; }; F60276DF99D86FCE8A565BE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutResizerBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1290,6 +1291,8 @@ 8E3C833F5CCC3BD43C061796 = {isa = PBXGroup; children = ( DB89B006F28EC7A4ADDFE800, ); name = AUv3Synth; sourceTree = ""; }; 80EEC7BDC5E94E232E8EEF4D = {isa = PBXGroup; children = ( + 8F401D45467D951DD3E3F810, + F5AC725E091D3D7F8DD13F08, 13DD37B2F314596BBC25A47D, 4D4252EF0D8D9BD4AFBB830A, E04216439C3A2AD69B69B520, @@ -1616,7 +1619,7 @@ 2CC92DEE105B69921A4BD036, 9329788543F0C6DA2B50BD72, 2CC92DEE105B69921A4BD036, ); name = "juce_audio_formats"; sourceTree = ""; }; - 988670913C41D72F28DFE34E = {isa = PBXGroup; children = ( + BC8CB37BFD39D59EF5309301 = {isa = PBXGroup; children = ( 98135B5CED6D00B04F8AD56C, DC8F10CCAC55F7216F0304F9, ); name = AAX; sourceTree = ""; }; FE2338066D80D87950BB4358 = {isa = PBXGroup; children = ( @@ -1678,10 +1681,9 @@ F8952FD62C839E34EBB043F6, ); name = CoreAudioUtilityClasses; sourceTree = ""; }; A2BBDDDA694235612BDE9BD0 = {isa = PBXGroup; children = ( FE2338066D80D87950BB4358, - 3E76A3788CAAB12560CB4517, AE1DD722E80713D6A2C820C9, 2220D1078A2681D8AAF3563E, ); name = AU; sourceTree = ""; }; - 618CCB6A21E8C032AF1D2BEB = {isa = PBXGroup; children = ( + CCA0C52CA51321AE5F2F7788 = {isa = PBXGroup; children = ( 8905DE78626372768938A4C0, 05C14DEEE0E3BDC4049484B5, 2FA12F7EBB9AC99A08FC1025, @@ -1689,32 +1691,31 @@ DBA0B8703ED6A2CFF6E952A8, 2D4E5D168D18704BCB317DD8, CF51659EBB00003E6CB20B66, ); name = RTAS; sourceTree = ""; }; - E57F8E0940E0C2FB651C1534 = {isa = PBXGroup; children = ( + EE2839CD585A070804E364C2 = {isa = PBXGroup; children = ( 33B2FD7C625F65B132945522, 44E613EE8E541E69E6B8A449, ); name = Standalone; sourceTree = ""; }; - 6E32D1C853DB168862215AF5 = {isa = PBXGroup; children = ( + 6417F3B89043CAB29033BAEB = {isa = PBXGroup; children = ( 30CDFDC04232575AE7A491F3, F96C31890AED2B62C4E0E20A, 00A950F33C21C6688103E667, 676EBCF8F03E1FA1DD0694B0, 1A3355000573E6A083028E9A, - 068109EA4981DB342942D174, 99AC2D0C2304F21B912FEC5B, 2F9011C34B50B11B6FFEDA7F, EA8B1437F945AFED7BDF11DB, ); name = utility; sourceTree = ""; }; - 666ACBAA58DBC0AD514A3CF9 = {isa = PBXGroup; children = ( + FDD4EEDC39B2B0254F7FDC9D = {isa = PBXGroup; children = ( 78DD966E73DF076A83FC1F2C, 6FA729EAB8A64447D81B36E9, ); name = VST; sourceTree = ""; }; - 47BE374539E9FEBFEFDAD7E3 = {isa = PBXGroup; children = ( + AC5EC0DFE9C8D133DD863F06 = {isa = PBXGroup; children = ( 08D38FFAFF41735F36FD4BF9, ); name = VST3; sourceTree = ""; }; E4D31720EE240DC9A75C9459 = {isa = PBXGroup; children = ( - 988670913C41D72F28DFE34E, + BC8CB37BFD39D59EF5309301, A2BBDDDA694235612BDE9BD0, - 618CCB6A21E8C032AF1D2BEB, - E57F8E0940E0C2FB651C1534, - 6E32D1C853DB168862215AF5, - 666ACBAA58DBC0AD514A3CF9, - 47BE374539E9FEBFEFDAD7E3, + CCA0C52CA51321AE5F2F7788, + EE2839CD585A070804E364C2, + 6417F3B89043CAB29033BAEB, + FDD4EEDC39B2B0254F7FDC9D, + AC5EC0DFE9C8D133DD863F06, 9EDB40D557C3BBB1CC63CF65, 26AE9472CE02F176A9513852, 03DE1C983B7DECDCC451C8F8, @@ -1733,12 +1734,13 @@ 9AA36A7E6CCDA68D308E0721, 683BC92E095F56916A11944D, 9EDB40D557C3BBB1CC63CF65, ); name = "juce_audio_plugin_client"; sourceTree = ""; }; - EFF01DA4D6A309E350D8817E = {isa = PBXGroup; children = ( + 8DFE4590E4A5D0428CBED51E = {isa = PBXGroup; children = ( 257F4247EC175CCBFE996E55, CF9EEC4A087AA9010D5D21A5, 212425D8E8CD86B224E3CC5A, F04800D7F1A1E012E9A4AD15, ); name = format; sourceTree = ""; }; - D3F4EA0C20451C8CCC107ADD = {isa = PBXGroup; children = ( + 3BA765D45CF86B29DAD0A0A8 = {isa = PBXGroup; children = ( + 7A53F57CC60CF2CD4CA2D534, 2010BCF7EE1A761168968EEF, F5DC35A024D665725204B375, 3D850D7C81C79515EA35D833, @@ -1747,13 +1749,12 @@ 5F6BB197FA13DEB1F2260CC0, 387D55482BBDCBC351F2BECE, B774AC9A00BFF63E24EA0646, + CE7E28DA6360B3B4BBCBFD04, CFAF04B0DF40F2C81026ACD2, 87FC5378F4B65DBD11E62015, E0FD3183237BAB53F14A4B92, 58461A95ADF95E35EE92161D, ); name = "format_types"; sourceTree = ""; }; - 892DDB700F7596FA63D35453 = {isa = PBXGroup; children = ( - 17968A543385166D4392F171, - 05206E536544288B1DFC3EC7, + FA53E57AB1B932AAECAE8BCF = {isa = PBXGroup; children = ( B0015C46815CEB6E15236944, 65980EFA3678AD71581BE381, 1BD4D7258F644BC3B343432E, @@ -1785,9 +1786,9 @@ DC6A702F738F41B34B329097, F7DD5C27835C2B5ECA00A7D2, ); name = utilities; sourceTree = ""; }; 0117D11B67D779E61A4F5529 = {isa = PBXGroup; children = ( - EFF01DA4D6A309E350D8817E, - D3F4EA0C20451C8CCC107ADD, - 892DDB700F7596FA63D35453, + 8DFE4590E4A5D0428CBED51E, + 3BA765D45CF86B29DAD0A0A8, + FA53E57AB1B932AAECAE8BCF, A182EB609A9D088F6F00CE02, 93E4D725A79B28831619716C, D5816478E1FBC9D296E78CFA, diff --git a/examples/AUv3Synth/JuceLibraryCode/AppConfig.h b/examples/AUv3Synth/JuceLibraryCode/AppConfig.h index 554b0416ee..f16e63aa07 100644 --- a/examples/AUv3Synth/JuceLibraryCode/AppConfig.h +++ b/examples/AUv3Synth/JuceLibraryCode/AppConfig.h @@ -333,14 +333,5 @@ #ifndef JucePlugin_AAXDisableMultiMono #define JucePlugin_AAXDisableMultiMono 0 #endif -#ifndef JucePlugin_MaxNumInputChannels - #define JucePlugin_MaxNumInputChannels 0 -#endif -#ifndef JucePlugin_MaxNumOutputChannels - #define JucePlugin_MaxNumOutputChannels 2 -#endif -#ifndef JucePlugin_PreferredChannelConfigurations - #define JucePlugin_PreferredChannelConfigurations {0,2} -#endif #endif // __JUCE_APPCONFIG_NAPIAV__ diff --git a/examples/AUv3Synth/Source/AUv3SynthProcessor.cpp b/examples/AUv3Synth/Source/AUv3SynthProcessor.cpp index 438dbc17f9..56fbe20be1 100644 --- a/examples/AUv3Synth/Source/AUv3SynthProcessor.cpp +++ b/examples/AUv3Synth/Source/AUv3SynthProcessor.cpp @@ -12,7 +12,8 @@ class AUv3SynthProcessor : public AudioProcessor { public: AUv3SynthProcessor () - : currentRecording (1, 1), currentProgram (0) + : AudioProcessor (BusesProperties().withOutput ("Output", AudioChannelSet::stereo(), true)), + currentRecording (1, 1), currentProgram (0) { // initialize parameters addParameter (isRecordingParam = new AudioParameterBool ("isRecording", "Is Recording", false)); @@ -27,6 +28,11 @@ public: } //============================================================================== + bool isBusesLayoutSupported (const BusesLayout& layouts) const override + { + return (layouts.getMainInputChannels() == 2); + } + void prepareToPlay (double sampleRate, int estimatedMaxSizeOfBuffer) override { ignoreUnused (estimatedMaxSizeOfBuffer); diff --git a/examples/AnimationAppExample/Builds/MacOSX/AnimationAppExample.xcodeproj/project.pbxproj b/examples/AnimationAppExample/Builds/MacOSX/AnimationAppExample.xcodeproj/project.pbxproj index c75513f69b..e43c7aece1 100644 --- a/examples/AnimationAppExample/Builds/MacOSX/AnimationAppExample.xcodeproj/project.pbxproj +++ b/examples/AnimationAppExample/Builds/MacOSX/AnimationAppExample.xcodeproj/project.pbxproj @@ -75,6 +75,7 @@ 0A821F49B23F52A887F9510A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiRPN.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiRPN.cpp"; sourceTree = "SOURCE_ROOT"; }; 0AD4B355DBB0AED4C90E5657 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; 0AE6516868244378D09124A0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0AF6574433E7459D64A55C66 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 0B4CE49EB3CFD33ACBC91518 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctflt.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jidctflt.c"; sourceTree = "SOURCE_ROOT"; }; 0B7637C0030C06BE612E41E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; }; 0B7E069D09A7E46448EAE230 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -347,6 +348,7 @@ 46885692CC5FDE30FC3649F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WavAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_WavAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; 46B0C80A50F637DEF7364C51 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "stream_encoder.h"; path = "../../../../modules/juce_audio_formats/codecs/flac/stream_encoder.h"; sourceTree = "SOURCE_ROOT"; }; 46D8BC7303C892ED3F90E4DA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CaretComponent.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4745FEBF644DA8C8E5F71538 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 47E5FB5735D2EC8B039D2691 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../../../modules/juce_gui_basics/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; }; 47E70AF805B1C5C57566C4CB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; 481E7AABBC1ECB45F5A6ECE0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CatmullRomInterpolator.h"; path = "../../../../modules/juce_audio_basics/effects/juce_CatmullRomInterpolator.h"; sourceTree = "SOURCE_ROOT"; }; @@ -540,6 +542,7 @@ 73CA6BCA313B0239842F298C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ValueTree.h"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.h"; sourceTree = "SOURCE_ROOT"; }; 73FF82BCB568578396E88C92 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WASAPI.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_WASAPI.cpp"; sourceTree = "SOURCE_ROOT"; }; 74302B51B991EA1775AEFC67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_core.h"; path = "../../../../modules/juce_core/juce_core.h"; sourceTree = "SOURCE_ROOT"; }; + 7457F728BEC1C292995D4ED6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 749854CD2D13BBBA500F353F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; 74AB51B6E97964B27B1CD019 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; 74B477DE4CFC95E20DBB0D91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemClipboard.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_SystemClipboard.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1036,6 +1039,7 @@ DE4C0926D2EFA7649BD3AAA5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; DE4DC23FAE4C420D489ABD17 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageFileFormat.h"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.h"; sourceTree = "SOURCE_ROOT"; }; DEBD2C71B20E4E508BD03F6D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_44u.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44u.h"; sourceTree = "SOURCE_ROOT"; }; + DEE54192C6C8D4025085A028 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; DEEA654926310D5B37A191C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileLogger.cpp"; path = "../../../../modules/juce_core/logging/juce_FileLogger.cpp"; sourceTree = "SOURCE_ROOT"; }; DF6D66D2FE017EE82E86C02F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterFloat.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioParameterFloat.h"; sourceTree = "SOURCE_ROOT"; }; DFAD61F886BEAAAE535BBF81 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../../modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1097,7 +1101,6 @@ EBC4E11E36D206EDF01E6EB0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; EBD6F8CE3122B2AA015A62BB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDirectoryScanner.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h"; sourceTree = "SOURCE_ROOT"; }; EBDC0E12D4ED20F5DB90BC26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; - EC0DC30DBDE17808F8F213DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; EC11D53A4118E15738CC70BB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDescription.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp"; sourceTree = "SOURCE_ROOT"; }; EC9898734E8AFE5215705476 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_ios.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_ios.h"; sourceTree = "SOURCE_ROOT"; }; ECBB04DDF8EF80E2F7B1C858 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngread.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngread.c"; sourceTree = "SOURCE_ROOT"; }; @@ -1165,7 +1168,6 @@ F831631700830F81994D9980 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableObjectResizer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp"; sourceTree = "SOURCE_ROOT"; }; F83392D9825422AF0DB638D0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Clipboard.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Clipboard.cpp"; sourceTree = "SOURCE_ROOT"; }; F838183EDFF5937C2879EE41 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; - F84B68CA477E76A5C737EEB7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; F8EB370470B7928A80032F7C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SHA256.h"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.h"; sourceTree = "SOURCE_ROOT"; }; F95533D725E548643CA584D7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; F9609B0A0387932B86A6FABE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1207,6 +1209,8 @@ C69760E59D600CF000D468E8 = {isa = PBXGroup; children = ( 9F41B5C4D3F9CE9C17373AB3, ); name = AnimationAppExample; sourceTree = ""; }; 504C5FD980086802734876A7 = {isa = PBXGroup; children = ( + 0AF6574433E7459D64A55C66, + 7457F728BEC1C292995D4ED6, AC2AE970951E20A199938AFB, 7A46778023CF61B3F417F9AC, 6D0D0EC5B978695152A0B84F, @@ -1533,12 +1537,13 @@ 62B6E8B6269ADEF23D85FA3E, 987AD2821B6419D5FEDCBD7A, 62B6E8B6269ADEF23D85FA3E, ); name = "juce_audio_formats"; sourceTree = ""; }; - 88F9AB2FA45B206B2A4483AC = {isa = PBXGroup; children = ( + CCB061B1E92EAC3CC62B56BF = {isa = PBXGroup; children = ( 8741126A9694372E46E3FD32, 381B8B8A9D5203E73FED79E9, 83325A69170997E33D73770A, F3C52FC514B9B3A2DFD7E3F6, ); name = format; sourceTree = ""; }; - 1FAD7DB997878A6172656F05 = {isa = PBXGroup; children = ( + D48EDE0D5B1826EDB84FAE75 = {isa = PBXGroup; children = ( + 4745FEBF644DA8C8E5F71538, A50AF1519D78428A8DCD91BF, E587838C598E06E7959F2A31, E6E99E6E9BB715D12B35AB4A, @@ -1547,13 +1552,12 @@ 2B02634F8DA8660ED42B0AEF, F79ADEBA7B305354085FFB8D, 66E854431C2BBDEE56EA43C8, + DEE54192C6C8D4025085A028, D71A9A6C9DF92980ADD5DF79, 0F67C59CB48583941B8656EF, BB144FF841A99B08D5479777, E652F16998FA1CBF2068C6FC, ); name = "format_types"; sourceTree = ""; }; - 17A57F61E7109806E3BDDCED = {isa = PBXGroup; children = ( - EC0DC30DBDE17808F8F213DD, - F84B68CA477E76A5C737EEB7, + 66DB5D1D07311C2755DD11FD = {isa = PBXGroup; children = ( A61AD5378601F9DDEB8DED03, E323EAC836E3B5BB29B6AE06, E2E3FA0BA7B7C8EB3C47B642, @@ -1585,9 +1589,9 @@ 8096923FA40246283C31519E, 2C06A730EBB9E2A7F0F2AA14, ); name = utilities; sourceTree = ""; }; BA9B6357DA1BF8D6E3120176 = {isa = PBXGroup; children = ( - 88F9AB2FA45B206B2A4483AC, - 1FAD7DB997878A6172656F05, - 17A57F61E7109806E3BDDCED, + CCB061B1E92EAC3CC62B56BF, + D48EDE0D5B1826EDB84FAE75, + 66DB5D1D07311C2755DD11FD, 6D5517B20EB3DE007D177B03, 202EE05322E0C4E9476F8135, 302B824D60552827656F93AC, diff --git a/examples/AnimationAppExample/Builds/VisualStudio2010/AnimationAppExample.vcxproj b/examples/AnimationAppExample/Builds/VisualStudio2010/AnimationAppExample.vcxproj index c7fe12f8ca..8897e2e684 100644 --- a/examples/AnimationAppExample/Builds/VisualStudio2010/AnimationAppExample.vcxproj +++ b/examples/AnimationAppExample/Builds/VisualStudio2010/AnimationAppExample.vcxproj @@ -125,6 +125,9 @@ + + true + true @@ -476,9 +479,6 @@ true - - true - true @@ -1664,6 +1664,7 @@ + @@ -1817,15 +1818,16 @@ + + - diff --git a/examples/AnimationAppExample/Builds/VisualStudio2010/AnimationAppExample.vcxproj.filters b/examples/AnimationAppExample/Builds/VisualStudio2010/AnimationAppExample.vcxproj.filters index de3feda354..d254fed809 100644 --- a/examples/AnimationAppExample/Builds/VisualStudio2010/AnimationAppExample.vcxproj.filters +++ b/examples/AnimationAppExample/Builds/VisualStudio2010/AnimationAppExample.vcxproj.filters @@ -361,6 +361,9 @@ AnimationAppExample\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -730,9 +733,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2040,6 +2040,9 @@ + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2499,6 +2502,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2514,6 +2520,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2523,9 +2532,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/AnimationAppExample/Builds/iOS/AnimationAppExample.xcodeproj/project.pbxproj b/examples/AnimationAppExample/Builds/iOS/AnimationAppExample.xcodeproj/project.pbxproj index 17a6fcaf15..ede68f8be5 100644 --- a/examples/AnimationAppExample/Builds/iOS/AnimationAppExample.xcodeproj/project.pbxproj +++ b/examples/AnimationAppExample/Builds/iOS/AnimationAppExample.xcodeproj/project.pbxproj @@ -74,6 +74,7 @@ 0A821F49B23F52A887F9510A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiRPN.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiRPN.cpp"; sourceTree = "SOURCE_ROOT"; }; 0AD4B355DBB0AED4C90E5657 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; 0AE6516868244378D09124A0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0AF6574433E7459D64A55C66 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 0B4CE49EB3CFD33ACBC91518 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctflt.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jidctflt.c"; sourceTree = "SOURCE_ROOT"; }; 0B7637C0030C06BE612E41E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; }; 0B7E069D09A7E46448EAE230 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -345,6 +346,7 @@ 46885692CC5FDE30FC3649F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WavAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_WavAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; 46B0C80A50F637DEF7364C51 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "stream_encoder.h"; path = "../../../../modules/juce_audio_formats/codecs/flac/stream_encoder.h"; sourceTree = "SOURCE_ROOT"; }; 46D8BC7303C892ED3F90E4DA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CaretComponent.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 4745FEBF644DA8C8E5F71538 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 47E5FB5735D2EC8B039D2691 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../../../modules/juce_gui_basics/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; }; 47E70AF805B1C5C57566C4CB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; 481E7AABBC1ECB45F5A6ECE0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CatmullRomInterpolator.h"; path = "../../../../modules/juce_audio_basics/effects/juce_CatmullRomInterpolator.h"; sourceTree = "SOURCE_ROOT"; }; @@ -539,6 +541,7 @@ 73CA6BCA313B0239842F298C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ValueTree.h"; path = "../../../../modules/juce_data_structures/values/juce_ValueTree.h"; sourceTree = "SOURCE_ROOT"; }; 73FF82BCB568578396E88C92 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WASAPI.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_WASAPI.cpp"; sourceTree = "SOURCE_ROOT"; }; 74302B51B991EA1775AEFC67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_core.h"; path = "../../../../modules/juce_core/juce_core.h"; sourceTree = "SOURCE_ROOT"; }; + 7457F728BEC1C292995D4ED6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 749854CD2D13BBBA500F353F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertySet.cpp"; path = "../../../../modules/juce_core/containers/juce_PropertySet.cpp"; sourceTree = "SOURCE_ROOT"; }; 74AB51B6E97964B27B1CD019 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; 74B477DE4CFC95E20DBB0D91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemClipboard.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_SystemClipboard.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1032,6 +1035,7 @@ DE4C0926D2EFA7649BD3AAA5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; DE4DC23FAE4C420D489ABD17 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageFileFormat.h"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.h"; sourceTree = "SOURCE_ROOT"; }; DEBD2C71B20E4E508BD03F6D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_44u.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44u.h"; sourceTree = "SOURCE_ROOT"; }; + DEE54192C6C8D4025085A028 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; DEEA654926310D5B37A191C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileLogger.cpp"; path = "../../../../modules/juce_core/logging/juce_FileLogger.cpp"; sourceTree = "SOURCE_ROOT"; }; DF6D66D2FE017EE82E86C02F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterFloat.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioParameterFloat.h"; sourceTree = "SOURCE_ROOT"; }; DFAD61F886BEAAAE535BBF81 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../../modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1093,7 +1097,6 @@ EBC4E11E36D206EDF01E6EB0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; EBD6F8CE3122B2AA015A62BB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginDirectoryScanner.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h"; sourceTree = "SOURCE_ROOT"; }; EBDC0E12D4ED20F5DB90BC26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; - EC0DC30DBDE17808F8F213DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; EC11D53A4118E15738CC70BB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDescription.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp"; sourceTree = "SOURCE_ROOT"; }; EC9898734E8AFE5215705476 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_ios.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_ios.h"; sourceTree = "SOURCE_ROOT"; }; ECBB04DDF8EF80E2F7B1C858 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngread.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngread.c"; sourceTree = "SOURCE_ROOT"; }; @@ -1161,7 +1164,6 @@ F831631700830F81994D9980 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableObjectResizer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp"; sourceTree = "SOURCE_ROOT"; }; F83392D9825422AF0DB638D0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Clipboard.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Clipboard.cpp"; sourceTree = "SOURCE_ROOT"; }; F838183EDFF5937C2879EE41 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; - F84B68CA477E76A5C737EEB7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; F8EB370470B7928A80032F7C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SHA256.h"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.h"; sourceTree = "SOURCE_ROOT"; }; F95533D725E548643CA584D7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; F9609B0A0387932B86A6FABE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1203,6 +1205,8 @@ C69760E59D600CF000D468E8 = {isa = PBXGroup; children = ( 9F41B5C4D3F9CE9C17373AB3, ); name = AnimationAppExample; sourceTree = ""; }; 504C5FD980086802734876A7 = {isa = PBXGroup; children = ( + 0AF6574433E7459D64A55C66, + 7457F728BEC1C292995D4ED6, AC2AE970951E20A199938AFB, 7A46778023CF61B3F417F9AC, 6D0D0EC5B978695152A0B84F, @@ -1529,12 +1533,13 @@ 62B6E8B6269ADEF23D85FA3E, 987AD2821B6419D5FEDCBD7A, 62B6E8B6269ADEF23D85FA3E, ); name = "juce_audio_formats"; sourceTree = ""; }; - 88F9AB2FA45B206B2A4483AC = {isa = PBXGroup; children = ( + CCB061B1E92EAC3CC62B56BF = {isa = PBXGroup; children = ( 8741126A9694372E46E3FD32, 381B8B8A9D5203E73FED79E9, 83325A69170997E33D73770A, F3C52FC514B9B3A2DFD7E3F6, ); name = format; sourceTree = ""; }; - 1FAD7DB997878A6172656F05 = {isa = PBXGroup; children = ( + D48EDE0D5B1826EDB84FAE75 = {isa = PBXGroup; children = ( + 4745FEBF644DA8C8E5F71538, A50AF1519D78428A8DCD91BF, E587838C598E06E7959F2A31, E6E99E6E9BB715D12B35AB4A, @@ -1543,13 +1548,12 @@ 2B02634F8DA8660ED42B0AEF, F79ADEBA7B305354085FFB8D, 66E854431C2BBDEE56EA43C8, + DEE54192C6C8D4025085A028, D71A9A6C9DF92980ADD5DF79, 0F67C59CB48583941B8656EF, BB144FF841A99B08D5479777, E652F16998FA1CBF2068C6FC, ); name = "format_types"; sourceTree = ""; }; - 17A57F61E7109806E3BDDCED = {isa = PBXGroup; children = ( - EC0DC30DBDE17808F8F213DD, - F84B68CA477E76A5C737EEB7, + 66DB5D1D07311C2755DD11FD = {isa = PBXGroup; children = ( A61AD5378601F9DDEB8DED03, E323EAC836E3B5BB29B6AE06, E2E3FA0BA7B7C8EB3C47B642, @@ -1581,9 +1585,9 @@ 8096923FA40246283C31519E, 2C06A730EBB9E2A7F0F2AA14, ); name = utilities; sourceTree = ""; }; BA9B6357DA1BF8D6E3120176 = {isa = PBXGroup; children = ( - 88F9AB2FA45B206B2A4483AC, - 1FAD7DB997878A6172656F05, - 17A57F61E7109806E3BDDCED, + CCB061B1E92EAC3CC62B56BF, + D48EDE0D5B1826EDB84FAE75, + 66DB5D1D07311C2755DD11FD, 6D5517B20EB3DE007D177B03, 202EE05322E0C4E9476F8135, 302B824D60552827656F93AC, diff --git a/examples/AudioAppExample/Builds/MacOSX/AudioAppExample.xcodeproj/project.pbxproj b/examples/AudioAppExample/Builds/MacOSX/AudioAppExample.xcodeproj/project.pbxproj index a3cbddf34c..743bb21ac9 100644 --- a/examples/AudioAppExample/Builds/MacOSX/AudioAppExample.xcodeproj/project.pbxproj +++ b/examples/AudioAppExample/Builds/MacOSX/AudioAppExample.xcodeproj/project.pbxproj @@ -270,6 +270,7 @@ 32AA8C09B7A39118E3A4BFA6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; }; 332B664DD5F1E87D1BC77715 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_cryptography.mm"; path = "../../../../modules/juce_cryptography/juce_cryptography.mm"; sourceTree = "SOURCE_ROOT"; }; 33A7431EA11DA6EA2EB54B73 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "stream_encoder.h"; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_encoder.h"; sourceTree = "SOURCE_ROOT"; }; + 33B19E484F16455FD74B803B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 33C4E091AF43E7CEA138F133 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; }; 33E0CFDAD6BD866CAF23EC85 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwio.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngwio.c"; sourceTree = "SOURCE_ROOT"; }; 33FEAF50967CEB5800BF72BE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -370,6 +371,7 @@ 46FBF3438B506BBBA1C08BE5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; }; 4832B29659F5D97A106B5D48 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = vorbisfile.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/vorbisfile.h"; sourceTree = "SOURCE_ROOT"; }; 48348E65A2D505CD55F894CC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 4847080DD7A171480276608E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 48AEBE2829B0A312E3B598BA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; }; 49067AE0E1C2121ACBEE2374 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = res0.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/res0.c"; sourceTree = "SOURCE_ROOT"; }; 490FFC3A7899AA8FBE8E2D0E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1039,7 +1041,6 @@ D5A52E8FCFD2A574B140050F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; D5C975D1C3B065AC14FB6311 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = float.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/float.h"; sourceTree = "SOURCE_ROOT"; }; D5E118687F94A7A960E7EC71 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; - D5ECF9579C0C6725ECC5654B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; D61678919BFC783EC4062605 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterChoice.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioParameterChoice.h"; sourceTree = "SOURCE_ROOT"; }; D64591D66210D08D4AA5DC05 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcdctmgr.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcdctmgr.c"; sourceTree = "SOURCE_ROOT"; }; D651F8F1F8E732F91907DA71 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inffast.h; path = "../../../../modules/juce_core/zip/zlib/inffast.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1080,7 +1081,6 @@ DC3B8C3F2BB86DEAD6987048 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jddctmgr.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jddctmgr.c"; sourceTree = "SOURCE_ROOT"; }; DC52C218059FD576DD0937FE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../../modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; DC63BD4245A44AA0E41382E0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDirectoryScanner.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp"; sourceTree = "SOURCE_ROOT"; }; - DCA045C3BF4FAC134D479F0B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; DCCDC8D852E777EF63078AE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorEditor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; DCCE4FD3F2077865C242A6EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = inflate.c; path = "../../../../modules/juce_core/zip/zlib/inflate.c"; sourceTree = "SOURCE_ROOT"; }; DCE3EB6C3DF640697ADD3F0D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1176,6 +1176,7 @@ F4DD9A24D4B78E8DA2558487 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComboBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.h"; sourceTree = "SOURCE_ROOT"; }; F5037B67510FDA52C9A83829 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = vorbisenc.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/vorbisenc.h"; sourceTree = "SOURCE_ROOT"; }; F5158122AABF8E950827F2CB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; + F551F4D24F3088F26119C4A0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; F68C761355C8BEF77C6E0D07 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = codebook.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codebook.c"; sourceTree = "SOURCE_ROOT"; }; F7334FD3FBCADF7A5F3BAB8B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorParameters.cpp"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameters.cpp"; sourceTree = "SOURCE_ROOT"; }; F75D109BD33B5C057C150155 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeMovieComponent.h"; path = "../../../../modules/juce_video/playback/juce_QuickTimeMovieComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1201,6 +1202,7 @@ FAF3143A9CAF9ECAF81AB3D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; }; FB21D85F25FF7C468331BAEC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; FB4B0B7CB3B7693E633DF85D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenSL.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_OpenSL.cpp"; sourceTree = "SOURCE_ROOT"; }; + FB4D68D66125EB95173322AC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; FB9D900CA19E8894F1F05F4E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; FBABB528D9CB9FCA127D3702 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_core.h"; path = "../../../../modules/juce_core/juce_core.h"; sourceTree = "SOURCE_ROOT"; }; FC43C9F152FA300C417AD510 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniserFunctions.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1233,6 +1235,8 @@ 24BF2D05D134C386864C4C7D = {isa = PBXGroup; children = ( C366FD2226833583ECDE68D2, ); name = AudioAppExample; sourceTree = ""; }; 9827D1759F7D4C6C17CA1F73 = {isa = PBXGroup; children = ( + 33B19E484F16455FD74B803B, + 4847080DD7A171480276608E, C2015BA8A41561F8A723C50F, 9E67899F08C1CB65A37C728F, 9169D30719C69B4CF1EB6061, @@ -1559,12 +1563,13 @@ B28EBA2EDF0E543EA1ED374B, C987F7105C386F9799C74AE5, B28EBA2EDF0E543EA1ED374B, ); name = "juce_audio_formats"; sourceTree = ""; }; - DEDC52AF030382BB5EE916EF = {isa = PBXGroup; children = ( + 45E0840819129354AC37A657 = {isa = PBXGroup; children = ( 21ED255865DBE1B9B27CE0CE, A9B5EEEAFA441F850358281B, BC77947BDED20C022DE3D8B8, D45FA51540441FC7D57E016A, ); name = format; sourceTree = ""; }; - 4346DB4FF08B3FB0AA3D9C26 = {isa = PBXGroup; children = ( + 0C13081C03297CBDD4C38E77 = {isa = PBXGroup; children = ( + F551F4D24F3088F26119C4A0, 7FCEC7C5C54AB90A7709406F, B905BFB6C174B284D84339A2, 973257D8FB62DAE78ACE85DD, @@ -1573,13 +1578,12 @@ 6C32FCD6B87189C1F43BD462, DB6C3F30A7B477AA3A695B2D, 6D869E6ED7DF080A9FAF162C, + FB4D68D66125EB95173322AC, DEB4C3647DCB3A2D1DDDEEF1, 6C4F8F17F78FE9C8B45941D3, DD7C6F9CAF5CBA11B6024A83, 5374AB638100ED67F198E888, ); name = "format_types"; sourceTree = ""; }; - E3B1FB08635B63FE110F2D04 = {isa = PBXGroup; children = ( - D5ECF9579C0C6725ECC5654B, - DCA045C3BF4FAC134D479F0B, + 8A48703F400C9874723B5106 = {isa = PBXGroup; children = ( E9AFEB90653FD6CBE935D29D, C771A511AA82C6C652D4FC70, 7F5C171BA5EA9E83295B7498, @@ -1611,9 +1615,9 @@ 10F35EB3267D17EB21EE9EEF, 1859D1550F703A8B0E2E9678, ); name = utilities; sourceTree = ""; }; 0F1330B9E634C8C1D2A19EAD = {isa = PBXGroup; children = ( - DEDC52AF030382BB5EE916EF, - 4346DB4FF08B3FB0AA3D9C26, - E3B1FB08635B63FE110F2D04, + 45E0840819129354AC37A657, + 0C13081C03297CBDD4C38E77, + 8A48703F400C9874723B5106, B15BA9691F55085AEA9F9476, D74F542E998B0A51BAB9D571, 05205756F23E4CB8A2A2CEA5, diff --git a/examples/AudioAppExample/Builds/VisualStudio2010/AudioAppExample.vcxproj b/examples/AudioAppExample/Builds/VisualStudio2010/AudioAppExample.vcxproj index 20fdedeb31..86ea3b830a 100644 --- a/examples/AudioAppExample/Builds/VisualStudio2010/AudioAppExample.vcxproj +++ b/examples/AudioAppExample/Builds/VisualStudio2010/AudioAppExample.vcxproj @@ -125,6 +125,9 @@ + + true + true @@ -476,9 +479,6 @@ true - - true - true @@ -1698,6 +1698,7 @@ + @@ -1851,15 +1852,16 @@ + + - diff --git a/examples/AudioAppExample/Builds/VisualStudio2010/AudioAppExample.vcxproj.filters b/examples/AudioAppExample/Builds/VisualStudio2010/AudioAppExample.vcxproj.filters index b49d8782c9..42e3d9650a 100644 --- a/examples/AudioAppExample/Builds/VisualStudio2010/AudioAppExample.vcxproj.filters +++ b/examples/AudioAppExample/Builds/VisualStudio2010/AudioAppExample.vcxproj.filters @@ -373,6 +373,9 @@ AudioAppExample\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -742,9 +745,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2097,6 +2097,9 @@ + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2556,6 +2559,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2571,6 +2577,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2580,9 +2589,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/AudioAppExample/Builds/iOS/AudioAppExample.xcodeproj/project.pbxproj b/examples/AudioAppExample/Builds/iOS/AudioAppExample.xcodeproj/project.pbxproj index ff638145dd..ca39867f49 100644 --- a/examples/AudioAppExample/Builds/iOS/AudioAppExample.xcodeproj/project.pbxproj +++ b/examples/AudioAppExample/Builds/iOS/AudioAppExample.xcodeproj/project.pbxproj @@ -268,6 +268,7 @@ 32AA8C09B7A39118E3A4BFA6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; }; 332B664DD5F1E87D1BC77715 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_cryptography.mm"; path = "../../../../modules/juce_cryptography/juce_cryptography.mm"; sourceTree = "SOURCE_ROOT"; }; 33A7431EA11DA6EA2EB54B73 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "stream_encoder.h"; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_encoder.h"; sourceTree = "SOURCE_ROOT"; }; + 33B19E484F16455FD74B803B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 33C4E091AF43E7CEA138F133 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; }; 33E0CFDAD6BD866CAF23EC85 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwio.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngwio.c"; sourceTree = "SOURCE_ROOT"; }; 33FEAF50967CEB5800BF72BE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -371,6 +372,7 @@ 46FBF3438B506BBBA1C08BE5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; }; 4832B29659F5D97A106B5D48 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = vorbisfile.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/vorbisfile.h"; sourceTree = "SOURCE_ROOT"; }; 48348E65A2D505CD55F894CC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 4847080DD7A171480276608E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 48AEBE2829B0A312E3B598BA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; }; 49067AE0E1C2121ACBEE2374 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = res0.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/res0.c"; sourceTree = "SOURCE_ROOT"; }; 490FFC3A7899AA8FBE8E2D0E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1038,7 +1040,6 @@ D5A52E8FCFD2A574B140050F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; D5C975D1C3B065AC14FB6311 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = float.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/float.h"; sourceTree = "SOURCE_ROOT"; }; D5E118687F94A7A960E7EC71 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; - D5ECF9579C0C6725ECC5654B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; D61678919BFC783EC4062605 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterChoice.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioParameterChoice.h"; sourceTree = "SOURCE_ROOT"; }; D64591D66210D08D4AA5DC05 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcdctmgr.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcdctmgr.c"; sourceTree = "SOURCE_ROOT"; }; D651F8F1F8E732F91907DA71 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inffast.h; path = "../../../../modules/juce_core/zip/zlib/inffast.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1079,7 +1080,6 @@ DC3B8C3F2BB86DEAD6987048 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jddctmgr.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jddctmgr.c"; sourceTree = "SOURCE_ROOT"; }; DC52C218059FD576DD0937FE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../../modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; DC63BD4245A44AA0E41382E0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDirectoryScanner.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp"; sourceTree = "SOURCE_ROOT"; }; - DCA045C3BF4FAC134D479F0B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; DCCDC8D852E777EF63078AE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorEditor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; DCCE4FD3F2077865C242A6EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = inflate.c; path = "../../../../modules/juce_core/zip/zlib/inflate.c"; sourceTree = "SOURCE_ROOT"; }; DCE3EB6C3DF640697ADD3F0D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1174,6 +1174,7 @@ F4DD9A24D4B78E8DA2558487 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComboBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.h"; sourceTree = "SOURCE_ROOT"; }; F5037B67510FDA52C9A83829 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = vorbisenc.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/vorbisenc.h"; sourceTree = "SOURCE_ROOT"; }; F5158122AABF8E950827F2CB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; + F551F4D24F3088F26119C4A0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; F5B5D441C4AB1D01509ACC8D = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; F68C761355C8BEF77C6E0D07 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = codebook.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codebook.c"; sourceTree = "SOURCE_ROOT"; }; F7334FD3FBCADF7A5F3BAB8B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorParameters.cpp"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameters.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1199,6 +1200,7 @@ FAF3143A9CAF9ECAF81AB3D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; }; FB21D85F25FF7C468331BAEC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; FB4B0B7CB3B7693E633DF85D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenSL.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_OpenSL.cpp"; sourceTree = "SOURCE_ROOT"; }; + FB4D68D66125EB95173322AC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; FB9D900CA19E8894F1F05F4E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; FBABB528D9CB9FCA127D3702 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_core.h"; path = "../../../../modules/juce_core/juce_core.h"; sourceTree = "SOURCE_ROOT"; }; FC43C9F152FA300C417AD510 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniserFunctions.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1231,6 +1233,8 @@ 24BF2D05D134C386864C4C7D = {isa = PBXGroup; children = ( C366FD2226833583ECDE68D2, ); name = AudioAppExample; sourceTree = ""; }; 9827D1759F7D4C6C17CA1F73 = {isa = PBXGroup; children = ( + 33B19E484F16455FD74B803B, + 4847080DD7A171480276608E, C2015BA8A41561F8A723C50F, 9E67899F08C1CB65A37C728F, 9169D30719C69B4CF1EB6061, @@ -1557,12 +1561,13 @@ B28EBA2EDF0E543EA1ED374B, C987F7105C386F9799C74AE5, B28EBA2EDF0E543EA1ED374B, ); name = "juce_audio_formats"; sourceTree = ""; }; - DEDC52AF030382BB5EE916EF = {isa = PBXGroup; children = ( + 45E0840819129354AC37A657 = {isa = PBXGroup; children = ( 21ED255865DBE1B9B27CE0CE, A9B5EEEAFA441F850358281B, BC77947BDED20C022DE3D8B8, D45FA51540441FC7D57E016A, ); name = format; sourceTree = ""; }; - 4346DB4FF08B3FB0AA3D9C26 = {isa = PBXGroup; children = ( + 0C13081C03297CBDD4C38E77 = {isa = PBXGroup; children = ( + F551F4D24F3088F26119C4A0, 7FCEC7C5C54AB90A7709406F, B905BFB6C174B284D84339A2, 973257D8FB62DAE78ACE85DD, @@ -1571,13 +1576,12 @@ 6C32FCD6B87189C1F43BD462, DB6C3F30A7B477AA3A695B2D, 6D869E6ED7DF080A9FAF162C, + FB4D68D66125EB95173322AC, DEB4C3647DCB3A2D1DDDEEF1, 6C4F8F17F78FE9C8B45941D3, DD7C6F9CAF5CBA11B6024A83, 5374AB638100ED67F198E888, ); name = "format_types"; sourceTree = ""; }; - E3B1FB08635B63FE110F2D04 = {isa = PBXGroup; children = ( - D5ECF9579C0C6725ECC5654B, - DCA045C3BF4FAC134D479F0B, + 8A48703F400C9874723B5106 = {isa = PBXGroup; children = ( E9AFEB90653FD6CBE935D29D, C771A511AA82C6C652D4FC70, 7F5C171BA5EA9E83295B7498, @@ -1609,9 +1613,9 @@ 10F35EB3267D17EB21EE9EEF, 1859D1550F703A8B0E2E9678, ); name = utilities; sourceTree = ""; }; 0F1330B9E634C8C1D2A19EAD = {isa = PBXGroup; children = ( - DEDC52AF030382BB5EE916EF, - 4346DB4FF08B3FB0AA3D9C26, - E3B1FB08635B63FE110F2D04, + 45E0840819129354AC37A657, + 0C13081C03297CBDD4C38E77, + 8A48703F400C9874723B5106, B15BA9691F55085AEA9F9476, D74F542E998B0A51BAB9D571, 05205756F23E4CB8A2A2CEA5, diff --git a/examples/BouncingBallWavetableDemo/Builds/MacOSX/BouncingBallWavetableDemo.xcodeproj/project.pbxproj b/examples/BouncingBallWavetableDemo/Builds/MacOSX/BouncingBallWavetableDemo.xcodeproj/project.pbxproj index 766a83b9be..2c14dbcbbe 100644 --- a/examples/BouncingBallWavetableDemo/Builds/MacOSX/BouncingBallWavetableDemo.xcodeproj/project.pbxproj +++ b/examples/BouncingBallWavetableDemo/Builds/MacOSX/BouncingBallWavetableDemo.xcodeproj/project.pbxproj @@ -44,6 +44,7 @@ 00FBB7B4B0FF5D527B060988 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPESynthesiserVoice.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.cpp"; sourceTree = "SOURCE_ROOT"; }; 01343C2A6BC1DCE258FE98BA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; 01C454D12BDA915CCA323CA0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_basics.h"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.h"; sourceTree = "SOURCE_ROOT"; }; + 027F79561C96288A9675DCE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 02C6AD1B6DAC532CA72C1E7F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ElementComparator.h"; path = "../../../../modules/juce_core/containers/juce_ElementComparator.h"; sourceTree = "SOURCE_ROOT"; }; 02CC9F8FBF6E1FD3403FCB19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 0317F525008C1447711FF43D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; @@ -240,6 +241,7 @@ 2953825E0A88A72C32C7BACD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; }; 2954CEB8E5247D5BCB9E0D2F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Sampler.cpp"; path = "../../../../modules/juce_audio_formats/sampler/juce_Sampler.cpp"; sourceTree = "SOURCE_ROOT"; }; 295E5E55DD800950BB3853F8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationProperties.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp"; sourceTree = "SOURCE_ROOT"; }; + 29AA688A9E6C4312AC7F377B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 29EFC053D139C374EEC38D4C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colour.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colour.cpp"; sourceTree = "SOURCE_ROOT"; }; 2AB81355FB08B845EC5D655F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Point.h"; path = "../../../../modules/juce_graphics/geometry/juce_Point.h"; sourceTree = "SOURCE_ROOT"; }; 2B03F0C8D2F1C484FDF52D78 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -581,12 +583,12 @@ 7EAD753A464389B7F1C0BB90 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Button.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.h"; sourceTree = "SOURCE_ROOT"; }; 7EB0A0231D54F3B4F6872B96 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; 7EE0C922C3EF937DF8239E1B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPESynthesiser.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7F5EA25CA96A1AD0BF39AEFD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 7F8A2A3F91498F5F3A36068E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SharedResourcePointer.h"; path = "../../../../modules/juce_core/memory/juce_SharedResourcePointer.h"; sourceTree = "SOURCE_ROOT"; }; 7FAB1D38B35B7F644C39CA13 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; 800C0DD76BA987B3FAFC63AB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioFormatReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; }; 80118A72180DF9414896B4E7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdapimin.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdapimin.c"; sourceTree = "SOURCE_ROOT"; }; 8062351BD7983EA6103B40E0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MP3AudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_MP3AudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 80E6089EDF39D0D1D066B4A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 80E8F7525E5E80AE5D83B52F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; 8125CCDF31993100DDD71E00 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; }; 8184EADC90B51951A516D958 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1090,7 +1092,6 @@ EAF5BFBA4937AFF5A0843BE0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdmerge.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdmerge.c"; sourceTree = "SOURCE_ROOT"; }; EB09E989BF5A4E1DF937732F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngpriv.h; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngpriv.h"; sourceTree = "SOURCE_ROOT"; }; EB1B3F30DCB72C2CD65A7A14 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - EB2E161FC14C881A808F2393 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; EB4BBC31F0417E41C34912AF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = deflate.c; path = "../../../../modules/juce_core/zip/zlib/deflate.c"; sourceTree = "SOURCE_ROOT"; }; EB7C3C6CB85C3D6CFA149155 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutManager.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp"; sourceTree = "SOURCE_ROOT"; }; EBF2F0735CD2AC0A2BE8FE60 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1187,6 +1188,7 @@ FE006220FCFAA38DD4EC007C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; FE9814A6F7931F34796D7503 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = trees.h; path = "../../../../modules/juce_core/zip/zlib/trees.h"; sourceTree = "SOURCE_ROOT"; }; FED384CC2290A9DF3B2A4586 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AnimatedPosition.h"; path = "../../../../modules/juce_gui_basics/layout/juce_AnimatedPosition.h"; sourceTree = "SOURCE_ROOT"; }; + FF13EDB456AC76F1630AF802 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; FF67159D311D4C80BB251240 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = infback.c; path = "../../../../modules/juce_core/zip/zlib/infback.c"; sourceTree = "SOURCE_ROOT"; }; FFBDD505581F8CBBD4D12123 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jutils.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jutils.c"; sourceTree = "SOURCE_ROOT"; }; FFD622E7479D8220161242ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../../../modules/juce_core/files/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1196,6 +1198,8 @@ AFEB8ECB6C68F601C471D4A7 = {isa = PBXGroup; children = ( 347363E5F6BB15BC717A8F27, ); name = BouncingBallWavetableDemo; sourceTree = ""; }; DDA827D1A913CA0A8BAEF419 = {isa = PBXGroup; children = ( + 80E6089EDF39D0D1D066B4A6, + 027F79561C96288A9675DCE6, 23E0B25CFAD0FDBE4D12C862, 053A3194974C11BF88EF657A, 6A8E842FF4F50ADFE6AD9524, @@ -1522,12 +1526,13 @@ 1388F09F4191485F5545CDCD, E012BC0F2CF50C6B9DD004E1, 1388F09F4191485F5545CDCD, ); name = "juce_audio_formats"; sourceTree = ""; }; - 82D8A707E83F62F6DDA923D7 = {isa = PBXGroup; children = ( + 6C6479EDAEF88B442A56FB93 = {isa = PBXGroup; children = ( 312656FA6557CD5126CA2B10, F291744023EE60F5B90EA1CA, 54B5FC4800E44D27E8AABEE0, 579BC84225D2FB307131F0DD, ); name = format; sourceTree = ""; }; - 05108D15DD30DDA75F1AA262 = {isa = PBXGroup; children = ( + 56BA3F1BF59718D081BB0F3B = {isa = PBXGroup; children = ( + 29AA688A9E6C4312AC7F377B, F3B723D594ECA2BFFEC9CA1A, 19703DEDD564FBE9B631A5E1, 36C12F23C7F3FD53CA21B0BB, @@ -1536,13 +1541,12 @@ 1A7D831E49C2BA0CC0CA5128, DBC0E281A2E05DE8E668CBB4, 5E312C939C9B9E5E37639A79, + FF13EDB456AC76F1630AF802, 576DA902DC355B135944F652, 23AC41EA2ECCA1BED10D7E07, 8427B4F238DA7953130272B2, ED576238B8B1D81ED56B99A5, ); name = "format_types"; sourceTree = ""; }; - 3448A30F9A52F256DD8FA64E = {isa = PBXGroup; children = ( - EB2E161FC14C881A808F2393, - 7F5EA25CA96A1AD0BF39AEFD, + 40E909C1CABA6A6C2BE0954D = {isa = PBXGroup; children = ( 771006A68347ADBF161ED995, B17EFF34EB8FF31F4DCB0F82, D6FC075AB2132B45211E43E4, @@ -1574,9 +1578,9 @@ 7D9C785442154CED1E805F55, 9CA88A8D2E0FA82F152CB452, ); name = utilities; sourceTree = ""; }; 07D6963C79163124B73687E5 = {isa = PBXGroup; children = ( - 82D8A707E83F62F6DDA923D7, - 05108D15DD30DDA75F1AA262, - 3448A30F9A52F256DD8FA64E, + 6C6479EDAEF88B442A56FB93, + 56BA3F1BF59718D081BB0F3B, + 40E909C1CABA6A6C2BE0954D, 7033BA697E805F4F332727E1, B53E613C62946D85B1338EC5, 18BAB9D332D2D82B5D1B92D9, diff --git a/examples/BouncingBallWavetableDemo/Builds/VisualStudio2013/BouncingBallWavetableDemo.vcxproj b/examples/BouncingBallWavetableDemo/Builds/VisualStudio2013/BouncingBallWavetableDemo.vcxproj index 921d52150a..6f7a9a67d5 100644 --- a/examples/BouncingBallWavetableDemo/Builds/VisualStudio2013/BouncingBallWavetableDemo.vcxproj +++ b/examples/BouncingBallWavetableDemo/Builds/VisualStudio2013/BouncingBallWavetableDemo.vcxproj @@ -131,6 +131,9 @@ + + true + true @@ -482,9 +485,6 @@ true - - true - true @@ -1673,6 +1673,7 @@ + @@ -1826,15 +1827,16 @@ + + - diff --git a/examples/BouncingBallWavetableDemo/Builds/VisualStudio2013/BouncingBallWavetableDemo.vcxproj.filters b/examples/BouncingBallWavetableDemo/Builds/VisualStudio2013/BouncingBallWavetableDemo.vcxproj.filters index eb7bb381ee..9d191870ff 100644 --- a/examples/BouncingBallWavetableDemo/Builds/VisualStudio2013/BouncingBallWavetableDemo.vcxproj.filters +++ b/examples/BouncingBallWavetableDemo/Builds/VisualStudio2013/BouncingBallWavetableDemo.vcxproj.filters @@ -358,6 +358,9 @@ BouncingBallWavetableDemo\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -727,9 +730,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2046,6 +2046,9 @@ + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2505,6 +2508,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2520,6 +2526,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2529,9 +2538,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/Demo/Builds/MacOSX/JuceDemo.xcodeproj/project.pbxproj b/examples/Demo/Builds/MacOSX/JuceDemo.xcodeproj/project.pbxproj index 926af1dd53..b0f5492782 100644 --- a/examples/Demo/Builds/MacOSX/JuceDemo.xcodeproj/project.pbxproj +++ b/examples/Demo/Builds/MacOSX/JuceDemo.xcodeproj/project.pbxproj @@ -173,7 +173,6 @@ 0F3360D13458198A3A88B1A1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; }; 0F517EA07DBFE31E5C9367F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; 0F518E75055A9D954B52DAC4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; }; - 0F82F90D72AD536CC3DFE217 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 0F88F061C51BE43F53B27094 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PNGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_PNGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; 0FC37E13A65710E3B9750BA3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcphuff.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcphuff.c"; sourceTree = "SOURCE_ROOT"; }; 0FF2403BC335E710BE391DEE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; @@ -375,6 +374,7 @@ 35E35B099E2A7906A7AA2EDE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AiffAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; 35F5E95BA127E63BA136DACC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToneGeneratorAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; 360291D0346F776DDD3F43E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../../../modules/juce_core/misc/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; }; + 3604A45AFB219B430055B832 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 360FC75BBB17079A50D83F82 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = os.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/os.h"; sourceTree = "SOURCE_ROOT"; }; 364888A8E80B59503995FE18 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inflate.h; path = "../../../../modules/juce_core/zip/zlib/inflate.h"; sourceTree = "SOURCE_ROOT"; }; 3649E7CD2BD6A37FCF7D72F7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorParameter.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h"; sourceTree = "SOURCE_ROOT"; }; @@ -514,6 +514,7 @@ 4E892CB7335853F8FE91B26F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPress.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.h"; sourceTree = "SOURCE_ROOT"; }; 4ECEF417A3156D46464E6B9C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = format.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/format.c"; sourceTree = "SOURCE_ROOT"; }; 4F2F2A6C3D3451EF896D71CC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jdhuff.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdhuff.h"; sourceTree = "SOURCE_ROOT"; }; + 4F3386F75802D2519BF693FA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 4F35D7B6179D00C91BB63AF7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = b2WheelJoint.cpp; path = "../../../../modules/juce_box2d/box2d/Dynamics/Joints/b2WheelJoint.cpp"; sourceTree = "SOURCE_ROOT"; }; 4F56EAB8D09665602226930F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; 4F6768F8EF9CB4A34A501966 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BooleanPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -638,11 +639,11 @@ 653C6D41CCDB5D556F00D17B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = memory.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/memory.c"; sourceTree = "SOURCE_ROOT"; }; 653E2E92DFD20A216DC5E698 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwutil.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngwutil.c"; sourceTree = "SOURCE_ROOT"; }; 65DA0DAA8BDCE57A54C1CF26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPESynthesiserBase.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.h"; sourceTree = "SOURCE_ROOT"; }; - 6645C09E7FCFF0E498C3C400 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 66C35D440440937001697D0B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_utils.mm"; path = "../../JuceLibraryCode/juce_audio_utils.mm"; sourceTree = "SOURCE_ROOT"; }; 66C5D2F0D9B9ABA7F4A386E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors.mm"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; 66D5FD22DF1550A6CC9ABDA4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; }; 66F8C7EB6520AB9439433DF3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEInstrument.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPEInstrument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 673D3A9FEE5D83720B157FA5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 67541565521633071C03BD35 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; 6808473BBCC2E4D8E2CA0E71 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; 6813D2FE050F9518A7BF3728 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = b2EdgeShape.h; path = "../../../../modules/juce_box2d/box2d/Collision/Shapes/b2EdgeShape.h"; sourceTree = "SOURCE_ROOT"; }; @@ -856,6 +857,7 @@ 8D67ED9898F9BE8652B8EE2C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = b2Math.h; path = "../../../../modules/juce_box2d/box2d/Common/b2Math.h"; sourceTree = "SOURCE_ROOT"; }; 8D70A7277DDD7B7974E9F178 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = "SOURCE_ROOT"; }; 8D7BDA5CDDCCD2F7BE67037A = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; + 8D936C8A4AFD6DE21F7212DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; 8DA438AAAFBC64C11DE329B4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_BluetoothMidiDevicePairingDialogue.cpp"; path = "../../../../modules/juce_audio_utils/native/juce_linux_BluetoothMidiDevicePairingDialogue.cpp"; sourceTree = "SOURCE_ROOT"; }; 8DC36D3C2FF85554B208793F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_utils.cpp"; path = "../../../../modules/juce_audio_utils/juce_audio_utils.cpp"; sourceTree = "SOURCE_ROOT"; }; 8DDCA7803625CF8DA817326A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../../modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1485,6 +1487,8 @@ DAD5A945FFB6D6920BF0D1F6 = {isa = PBXGroup; children = ( 41B2F9FB15FB255A0DEDCA00, ); name = JuceDemo; sourceTree = ""; }; 2093B556368390D49E2342DD = {isa = PBXGroup; children = ( + 673D3A9FEE5D83720B157FA5, + 3604A45AFB219B430055B832, 26A65E5DA320A85F90F1F58F, 2699A70E9610104CB8D30EC4, C0F898298ABF2458D6C5AF17, @@ -1811,12 +1815,13 @@ 05AFEDB1F65A8C2C8E9620E0, 40D267701C8FF75121454D79, 05AFEDB1F65A8C2C8E9620E0, ); name = "juce_audio_formats"; sourceTree = ""; }; - FE5FF3B06216363423589217 = {isa = PBXGroup; children = ( + D6079BC9B7978DF66DFC5909 = {isa = PBXGroup; children = ( 7BBD4B2D9A9EF13CE4357979, 4B310AA3DF4F6188B2E6FAF1, E2127416236840EE3AF32D5C, 96F43E8EB364D3E40689D368, ); name = format; sourceTree = ""; }; - CA6EE03DD8ACDF1A15DDE60C = {isa = PBXGroup; children = ( + B2244C90A3E08334409168A2 = {isa = PBXGroup; children = ( + 4F3386F75802D2519BF693FA, D1E31AC47CCAB97418EB646D, 58FB0C4FE674CC5BB7B1DCA7, 8396EA11DD261260F1A96DF9, @@ -1825,13 +1830,12 @@ 9750423DB3DB6570382DA3C1, 9B9E034C5761096ACB8A76C3, 73267FE8DDE50FD1E6E31ED4, + 8D936C8A4AFD6DE21F7212DB, 41F76FF32798054E741CB90B, 8AE56D2F4E33B015C3D73EB8, 52A95B5754438C999343869A, C8A42EE493A1DF2E283C245E, ); name = "format_types"; sourceTree = ""; }; - 923A7DC58042E1A0FB99D390 = {isa = PBXGroup; children = ( - 6645C09E7FCFF0E498C3C400, - 0F82F90D72AD536CC3DFE217, + 7A6CEC2BC413CC7B5A4280EC = {isa = PBXGroup; children = ( 25412CD3F6855849D8B7FE98, E3415348D45BF63A7CE8CF6F, BE9B3F83B6037C848596286B, @@ -1863,9 +1867,9 @@ 631FD2CAE69A3D5DD8C2E1B6, FC14A2D9F860584459B762F7, ); name = utilities; sourceTree = ""; }; 326CA890D2481B82367C6F3A = {isa = PBXGroup; children = ( - FE5FF3B06216363423589217, - CA6EE03DD8ACDF1A15DDE60C, - 923A7DC58042E1A0FB99D390, + D6079BC9B7978DF66DFC5909, + B2244C90A3E08334409168A2, + 7A6CEC2BC413CC7B5A4280EC, F29CDD16F3F0451F4D5EE3EA, 453BF0685F30EA92520392E4, 27436247FFB648C821348A91, diff --git a/examples/Demo/Builds/VisualStudio2010/JuceDemo.vcxproj b/examples/Demo/Builds/VisualStudio2010/JuceDemo.vcxproj index 1751f27265..b8067ceb11 100644 --- a/examples/Demo/Builds/VisualStudio2010/JuceDemo.vcxproj +++ b/examples/Demo/Builds/VisualStudio2010/JuceDemo.vcxproj @@ -164,6 +164,9 @@ + + true + true @@ -515,9 +518,6 @@ true - - true - true @@ -1885,6 +1885,7 @@ + @@ -2038,15 +2039,16 @@ + + - diff --git a/examples/Demo/Builds/VisualStudio2010/JuceDemo.vcxproj.filters b/examples/Demo/Builds/VisualStudio2010/JuceDemo.vcxproj.filters index fea3d46b65..d05298ad23 100644 --- a/examples/Demo/Builds/VisualStudio2010/JuceDemo.vcxproj.filters +++ b/examples/Demo/Builds/VisualStudio2010/JuceDemo.vcxproj.filters @@ -526,6 +526,9 @@ JuceDemo\Source\Demos + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -895,9 +898,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2412,6 +2412,9 @@ JuceDemo\Source\Demos + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2871,6 +2874,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2886,6 +2892,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2895,9 +2904,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/Demo/Builds/VisualStudio2012/JuceDemo.vcxproj b/examples/Demo/Builds/VisualStudio2012/JuceDemo.vcxproj index 6a6cf2966e..87007c7b98 100644 --- a/examples/Demo/Builds/VisualStudio2012/JuceDemo.vcxproj +++ b/examples/Demo/Builds/VisualStudio2012/JuceDemo.vcxproj @@ -170,6 +170,9 @@ + + true + true @@ -521,9 +524,6 @@ true - - true - true @@ -1891,6 +1891,7 @@ + @@ -2044,15 +2045,16 @@ + + - diff --git a/examples/Demo/Builds/VisualStudio2012/JuceDemo.vcxproj.filters b/examples/Demo/Builds/VisualStudio2012/JuceDemo.vcxproj.filters index fea3d46b65..d05298ad23 100644 --- a/examples/Demo/Builds/VisualStudio2012/JuceDemo.vcxproj.filters +++ b/examples/Demo/Builds/VisualStudio2012/JuceDemo.vcxproj.filters @@ -526,6 +526,9 @@ JuceDemo\Source\Demos + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -895,9 +898,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2412,6 +2412,9 @@ JuceDemo\Source\Demos + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2871,6 +2874,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2886,6 +2892,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2895,9 +2904,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/Demo/Builds/VisualStudio2013/JuceDemo.vcxproj b/examples/Demo/Builds/VisualStudio2013/JuceDemo.vcxproj index 60c5c6ee6f..b4cb2b7e6b 100644 --- a/examples/Demo/Builds/VisualStudio2013/JuceDemo.vcxproj +++ b/examples/Demo/Builds/VisualStudio2013/JuceDemo.vcxproj @@ -170,6 +170,9 @@ + + true + true @@ -521,9 +524,6 @@ true - - true - true @@ -1891,6 +1891,7 @@ + @@ -2044,15 +2045,16 @@ + + - diff --git a/examples/Demo/Builds/VisualStudio2013/JuceDemo.vcxproj.filters b/examples/Demo/Builds/VisualStudio2013/JuceDemo.vcxproj.filters index 836b4b6b37..08aef55b15 100644 --- a/examples/Demo/Builds/VisualStudio2013/JuceDemo.vcxproj.filters +++ b/examples/Demo/Builds/VisualStudio2013/JuceDemo.vcxproj.filters @@ -526,6 +526,9 @@ JuceDemo\Source\Demos + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -895,9 +898,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2412,6 +2412,9 @@ JuceDemo\Source\Demos + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2871,6 +2874,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2886,6 +2892,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2895,9 +2904,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/Demo/Builds/VisualStudio2015/JuceDemo.vcxproj b/examples/Demo/Builds/VisualStudio2015/JuceDemo.vcxproj index 0ded1fac67..4172341a6a 100644 --- a/examples/Demo/Builds/VisualStudio2015/JuceDemo.vcxproj +++ b/examples/Demo/Builds/VisualStudio2015/JuceDemo.vcxproj @@ -170,6 +170,9 @@ + + true + true @@ -521,9 +524,6 @@ true - - true - true @@ -1891,6 +1891,7 @@ + @@ -2044,15 +2045,16 @@ + + - diff --git a/examples/Demo/Builds/VisualStudio2015/JuceDemo.vcxproj.filters b/examples/Demo/Builds/VisualStudio2015/JuceDemo.vcxproj.filters index 36d8975163..4c7df0a9ec 100644 --- a/examples/Demo/Builds/VisualStudio2015/JuceDemo.vcxproj.filters +++ b/examples/Demo/Builds/VisualStudio2015/JuceDemo.vcxproj.filters @@ -526,6 +526,9 @@ JuceDemo\Source\Demos + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -895,9 +898,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2412,6 +2412,9 @@ JuceDemo\Source\Demos + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2871,6 +2874,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2886,6 +2892,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2895,9 +2904,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/Demo/Builds/iOS/JuceDemo.xcodeproj/project.pbxproj b/examples/Demo/Builds/iOS/JuceDemo.xcodeproj/project.pbxproj index 919b7169fa..d3e0ac8d21 100644 --- a/examples/Demo/Builds/iOS/JuceDemo.xcodeproj/project.pbxproj +++ b/examples/Demo/Builds/iOS/JuceDemo.xcodeproj/project.pbxproj @@ -171,7 +171,6 @@ 0F3360D13458198A3A88B1A1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; }; 0F517EA07DBFE31E5C9367F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; 0F518E75055A9D954B52DAC4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileSearchPath.h"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.h"; sourceTree = "SOURCE_ROOT"; }; - 0F82F90D72AD536CC3DFE217 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 0F88F061C51BE43F53B27094 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PNGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_PNGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; 0FC37E13A65710E3B9750BA3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcphuff.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcphuff.c"; sourceTree = "SOURCE_ROOT"; }; 0FF2403BC335E710BE391DEE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; @@ -372,6 +371,7 @@ 35E35B099E2A7906A7AA2EDE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AiffAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; 35F5E95BA127E63BA136DACC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToneGeneratorAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; 360291D0346F776DDD3F43E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Uuid.h"; path = "../../../../modules/juce_core/misc/juce_Uuid.h"; sourceTree = "SOURCE_ROOT"; }; + 3604A45AFB219B430055B832 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 360FC75BBB17079A50D83F82 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = os.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/os.h"; sourceTree = "SOURCE_ROOT"; }; 364888A8E80B59503995FE18 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inflate.h; path = "../../../../modules/juce_core/zip/zlib/inflate.h"; sourceTree = "SOURCE_ROOT"; }; 3649E7CD2BD6A37FCF7D72F7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorParameter.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h"; sourceTree = "SOURCE_ROOT"; }; @@ -511,6 +511,7 @@ 4E892CB7335853F8FE91B26F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPress.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.h"; sourceTree = "SOURCE_ROOT"; }; 4ECEF417A3156D46464E6B9C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = format.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/format.c"; sourceTree = "SOURCE_ROOT"; }; 4F2F2A6C3D3451EF896D71CC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jdhuff.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdhuff.h"; sourceTree = "SOURCE_ROOT"; }; + 4F3386F75802D2519BF693FA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 4F35D7B6179D00C91BB63AF7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = b2WheelJoint.cpp; path = "../../../../modules/juce_box2d/box2d/Dynamics/Joints/b2WheelJoint.cpp"; sourceTree = "SOURCE_ROOT"; }; 4F56EAB8D09665602226930F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; 4F6768F8EF9CB4A34A501966 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BooleanPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -637,11 +638,11 @@ 653C6D41CCDB5D556F00D17B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = memory.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/memory.c"; sourceTree = "SOURCE_ROOT"; }; 653E2E92DFD20A216DC5E698 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwutil.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngwutil.c"; sourceTree = "SOURCE_ROOT"; }; 65DA0DAA8BDCE57A54C1CF26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPESynthesiserBase.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.h"; sourceTree = "SOURCE_ROOT"; }; - 6645C09E7FCFF0E498C3C400 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 66C35D440440937001697D0B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_utils.mm"; path = "../../JuceLibraryCode/juce_audio_utils.mm"; sourceTree = "SOURCE_ROOT"; }; 66C5D2F0D9B9ABA7F4A386E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors.mm"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; 66D5FD22DF1550A6CC9ABDA4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; }; 66F8C7EB6520AB9439433DF3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEInstrument.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPEInstrument.cpp"; sourceTree = "SOURCE_ROOT"; }; + 673D3A9FEE5D83720B157FA5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 67541565521633071C03BD35 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; 6808473BBCC2E4D8E2CA0E71 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; 6813D2FE050F9518A7BF3728 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = b2EdgeShape.h; path = "../../../../modules/juce_box2d/box2d/Collision/Shapes/b2EdgeShape.h"; sourceTree = "SOURCE_ROOT"; }; @@ -852,6 +853,7 @@ 8D67ED9898F9BE8652B8EE2C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = b2Math.h; path = "../../../../modules/juce_box2d/box2d/Common/b2Math.h"; sourceTree = "SOURCE_ROOT"; }; 8D70A7277DDD7B7974E9F178 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = "SOURCE_ROOT"; }; 8D7BDA5CDDCCD2F7BE67037A = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; + 8D936C8A4AFD6DE21F7212DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; 8DA438AAAFBC64C11DE329B4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_BluetoothMidiDevicePairingDialogue.cpp"; path = "../../../../modules/juce_audio_utils/native/juce_linux_BluetoothMidiDevicePairingDialogue.cpp"; sourceTree = "SOURCE_ROOT"; }; 8DC36D3C2FF85554B208793F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_utils.cpp"; path = "../../../../modules/juce_audio_utils/juce_audio_utils.cpp"; sourceTree = "SOURCE_ROOT"; }; 8DDCA7803625CF8DA817326A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../../modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1483,6 +1485,8 @@ DAD5A945FFB6D6920BF0D1F6 = {isa = PBXGroup; children = ( 41B2F9FB15FB255A0DEDCA00, ); name = JuceDemo; sourceTree = ""; }; 2093B556368390D49E2342DD = {isa = PBXGroup; children = ( + 673D3A9FEE5D83720B157FA5, + 3604A45AFB219B430055B832, 26A65E5DA320A85F90F1F58F, 2699A70E9610104CB8D30EC4, C0F898298ABF2458D6C5AF17, @@ -1809,12 +1813,13 @@ 05AFEDB1F65A8C2C8E9620E0, 40D267701C8FF75121454D79, 05AFEDB1F65A8C2C8E9620E0, ); name = "juce_audio_formats"; sourceTree = ""; }; - FE5FF3B06216363423589217 = {isa = PBXGroup; children = ( + D6079BC9B7978DF66DFC5909 = {isa = PBXGroup; children = ( 7BBD4B2D9A9EF13CE4357979, 4B310AA3DF4F6188B2E6FAF1, E2127416236840EE3AF32D5C, 96F43E8EB364D3E40689D368, ); name = format; sourceTree = ""; }; - CA6EE03DD8ACDF1A15DDE60C = {isa = PBXGroup; children = ( + B2244C90A3E08334409168A2 = {isa = PBXGroup; children = ( + 4F3386F75802D2519BF693FA, D1E31AC47CCAB97418EB646D, 58FB0C4FE674CC5BB7B1DCA7, 8396EA11DD261260F1A96DF9, @@ -1823,13 +1828,12 @@ 9750423DB3DB6570382DA3C1, 9B9E034C5761096ACB8A76C3, 73267FE8DDE50FD1E6E31ED4, + 8D936C8A4AFD6DE21F7212DB, 41F76FF32798054E741CB90B, 8AE56D2F4E33B015C3D73EB8, 52A95B5754438C999343869A, C8A42EE493A1DF2E283C245E, ); name = "format_types"; sourceTree = ""; }; - 923A7DC58042E1A0FB99D390 = {isa = PBXGroup; children = ( - 6645C09E7FCFF0E498C3C400, - 0F82F90D72AD536CC3DFE217, + 7A6CEC2BC413CC7B5A4280EC = {isa = PBXGroup; children = ( 25412CD3F6855849D8B7FE98, E3415348D45BF63A7CE8CF6F, BE9B3F83B6037C848596286B, @@ -1861,9 +1865,9 @@ 631FD2CAE69A3D5DD8C2E1B6, FC14A2D9F860584459B762F7, ); name = utilities; sourceTree = ""; }; 326CA890D2481B82367C6F3A = {isa = PBXGroup; children = ( - FE5FF3B06216363423589217, - CA6EE03DD8ACDF1A15DDE60C, - 923A7DC58042E1A0FB99D390, + D6079BC9B7978DF66DFC5909, + B2244C90A3E08334409168A2, + 7A6CEC2BC413CC7B5A4280EC, F29CDD16F3F0451F4D5EE3EA, 453BF0685F30EA92520392E4, 27436247FFB648C821348A91, diff --git a/examples/MPETest/Builds/MacOSX/MPETest.xcodeproj/project.pbxproj b/examples/MPETest/Builds/MacOSX/MPETest.xcodeproj/project.pbxproj index b3cdf779fb..0ae3a10f5f 100644 --- a/examples/MPETest/Builds/MacOSX/MPETest.xcodeproj/project.pbxproj +++ b/examples/MPETest/Builds/MacOSX/MPETest.xcodeproj/project.pbxproj @@ -229,7 +229,6 @@ 2AAAEBE53A14BA001544D40D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AffineTransform.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp"; sourceTree = "SOURCE_ROOT"; }; 2B6313BEE19952B09B892F97 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageSequence.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp"; sourceTree = "SOURCE_ROOT"; }; 2B700EED388A0D5BCD27119C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NormalisableRange.h"; path = "../../../../modules/juce_core/maths/juce_NormalisableRange.h"; sourceTree = "SOURCE_ROOT"; }; - 2B8110812EDB60E35F64ECC2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 2BC851F3F90C739945A358E9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PreferencesPanel.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; 2BF9277EE9D23E6756DDEAAD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; 2BFA2FF47A3FFF09F64BE024 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jfdctflt.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jfdctflt.c"; sourceTree = "SOURCE_ROOT"; }; @@ -365,6 +364,7 @@ 44F7EDE4220F31B641051082 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; 459847CA0F57CBD0381236E7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../../../modules/juce_core/native/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; }; 45F17D16348AC92ABF12AE4F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 46A0C738E9BCD17C509A16DA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; 46C74383053813CCDDCCD9B6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = window.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/window.h"; sourceTree = "SOURCE_ROOT"; }; 46EE2A1578E998C3FDAF9E90 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooserDialogBox.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h"; sourceTree = "SOURCE_ROOT"; }; 4709326ADD1AEB0FAE3F0E28 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; @@ -878,6 +878,7 @@ B3B09D930294921308A25479 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInactivityDetector.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.cpp"; sourceTree = "SOURCE_ROOT"; }; B3CBFBDBA3189C6F33B4C980 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; B3D740F535AE6C7211B7F346 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Random.cpp"; path = "../../../../modules/juce_core/maths/juce_Random.cpp"; sourceTree = "SOURCE_ROOT"; }; + B3D88349C4847B6DA14B4025 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; B4066FBC70F48956A5613954 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooserDialogBox.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp"; sourceTree = "SOURCE_ROOT"; }; B4627ACD9DAE391505B47CC8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; B492A15E9ED021566DDDF527 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Javascript.cpp"; path = "../../../../modules/juce_core/javascript/juce_Javascript.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -950,6 +951,7 @@ C35854B72C47F401808A93D6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; C3C6ED0B48A81623AAE57AFC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; C3DAB6E6D5D1C1CF8AD15E8A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V2.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h"; sourceTree = "SOURCE_ROOT"; }; + C472030396732D01233AF341 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; C495993112F10E9129851E8C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPCompressorOutputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; C5603BEA9F9E568BD449783E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jerror.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jerror.c"; sourceTree = "SOURCE_ROOT"; }; C580FA81A05C83C55A6C47F1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPESynthesiser.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1070,7 +1072,6 @@ DCC6CD0D96DF5D56628DC513 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; }; DCEDE5F91C5C42694AA7A4DC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CatmullRomInterpolator.h"; path = "../../../../modules/juce_audio_basics/effects/juce_CatmullRomInterpolator.h"; sourceTree = "SOURCE_ROOT"; }; DCF2C05564880AC60C437BD3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = misc.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/misc.h"; sourceTree = "SOURCE_ROOT"; }; - DD27A9D5B621B219B88F1B4E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; DD5088088E2F96F2A90F846C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OggVorbisAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; DD814F83C89F94E61871C009 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AudioUnitPluginFormat.mm"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; }; DDD9956A34EECD84627E4D23 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ConnectedChildProcess.cpp"; path = "../../../../modules/juce_events/interprocess/juce_ConnectedChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1092,6 +1093,7 @@ E0513862E1966494CD8EC68A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlacAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; E0AFFDE86D2593F1FF21FEFC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; E121AC6E7E98A5CAFDA979A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_utils.mm"; path = "../../../../modules/juce_audio_utils/juce_audio_utils.mm"; sourceTree = "SOURCE_ROOT"; }; + E1A8FA9614478E018DE0AEC6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; E1CB32FBE6F6E310599E2D26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CompilerSupport.h"; path = "../../../../modules/juce_core/system/juce_CompilerSupport.h"; sourceTree = "SOURCE_ROOT"; }; E1E2599D827CB64258EC9EB0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WindowsMediaAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; E1EFD62896E03997AD0B77AF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GroupComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1242,6 +1244,8 @@ C69BCE512948465235B05858 = {isa = PBXGroup; children = ( 47DF0B5F0B14AE411808F7CE, ); name = MPETest; sourceTree = ""; }; 669197F48B0F3B2AAFBF8510 = {isa = PBXGroup; children = ( + C472030396732D01233AF341, + E1A8FA9614478E018DE0AEC6, A2579D66249C62C1DEE92E1D, DC40896B34539B4CDFD98A83, 033CF8E14902A81FF64A0EF7, @@ -1568,12 +1572,13 @@ BA74CBA07F7E462B824D155B, 9A95B88EAC68EEDBB4A6EA80, BA74CBA07F7E462B824D155B, ); name = "juce_audio_formats"; sourceTree = ""; }; - 2CE54F86505AC08BDFD45F8A = {isa = PBXGroup; children = ( + A8981BEB6B597952A46DCD0F = {isa = PBXGroup; children = ( DE96C095E423324993DCAC8E, 3DA4C013F3A87FB9066D9A06, DBFBB4E07B66E9FB6EFC0CA4, FC14C5899F93765A74125329, ); name = format; sourceTree = ""; }; - BE0B8102B71E4BD8A79AB489 = {isa = PBXGroup; children = ( + 6FD199A2E06AD37C571782EA = {isa = PBXGroup; children = ( + B3D88349C4847B6DA14B4025, F7369DF5ABFBA560A5FD5E71, DD814F83C89F94E61871C009, 807FB66424227F43DB1E720A, @@ -1582,13 +1587,12 @@ 07B0233D286E466E20AC2887, 8D9DDE982773DF3829A5D2EC, 3BC401D5C6F376B3E8A98BE9, + 46A0C738E9BCD17C509A16DA, 9845CA2D31B9A30F25D375FC, 6E9C575B96F65E6DDD4F62B8, AC3A1878FFA5E36CC67EF642, B5EA0961ABF5E581D4DA94C1, ); name = "format_types"; sourceTree = ""; }; - 433916B0C60FC4242279D58C = {isa = PBXGroup; children = ( - DD27A9D5B621B219B88F1B4E, - 2B8110812EDB60E35F64ECC2, + 74F71FC31AF129E052A12770 = {isa = PBXGroup; children = ( DEE0007C38531B281E20A2A3, 51FB54FB93F826E8B4207DAA, 8B4618262B4BB0A436C51B6C, @@ -1620,9 +1624,9 @@ 9C0AAFB1E56B8FF6CB8F614B, 39D44FF56380385B8384F81C, ); name = utilities; sourceTree = ""; }; AB48A58D44AEFCA3F21E8D14 = {isa = PBXGroup; children = ( - 2CE54F86505AC08BDFD45F8A, - BE0B8102B71E4BD8A79AB489, - 433916B0C60FC4242279D58C, + A8981BEB6B597952A46DCD0F, + 6FD199A2E06AD37C571782EA, + 74F71FC31AF129E052A12770, DDFC041F5673957EF6B15DF7, D8411DCED586C411659DD219, F7B1E4C83A89F0E29167C1B6, diff --git a/examples/MPETest/Builds/VisualStudio2015/MPETest.vcxproj b/examples/MPETest/Builds/VisualStudio2015/MPETest.vcxproj index dd6894587e..6457944a12 100644 --- a/examples/MPETest/Builds/VisualStudio2015/MPETest.vcxproj +++ b/examples/MPETest/Builds/VisualStudio2015/MPETest.vcxproj @@ -130,6 +130,9 @@ + + true + true @@ -481,9 +484,6 @@ true - - true - true @@ -1709,6 +1709,7 @@ + @@ -1862,15 +1863,16 @@ + + - diff --git a/examples/MPETest/Builds/VisualStudio2015/MPETest.vcxproj.filters b/examples/MPETest/Builds/VisualStudio2015/MPETest.vcxproj.filters index 2f42a21d42..58baf1fdd4 100644 --- a/examples/MPETest/Builds/VisualStudio2015/MPETest.vcxproj.filters +++ b/examples/MPETest/Builds/VisualStudio2015/MPETest.vcxproj.filters @@ -370,6 +370,9 @@ MPETest\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -739,9 +742,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2112,6 +2112,9 @@ MPETest\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2571,6 +2574,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2586,6 +2592,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2595,9 +2604,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/MidiTest/Builds/MacOSX/MidiTest.xcodeproj/project.pbxproj b/examples/MidiTest/Builds/MacOSX/MidiTest.xcodeproj/project.pbxproj index d59fd6db19..bf17b079cd 100644 --- a/examples/MidiTest/Builds/MacOSX/MidiTest.xcodeproj/project.pbxproj +++ b/examples/MidiTest/Builds/MacOSX/MidiTest.xcodeproj/project.pbxproj @@ -263,6 +263,7 @@ 327A0154589CF5C0484C8CE3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = float.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/float.c"; sourceTree = "SOURCE_ROOT"; }; 32D72BFD938BAA4EB61A9070 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jfdctflt.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jfdctflt.c"; sourceTree = "SOURCE_ROOT"; }; 32F4F8A3445B9914A5540BBB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + 33104422BC9CDD317B7B5AAE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 335345F690175AAB7FE2CC1C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "win_utf8_io.h"; path = "../../../../modules/juce_audio_formats/codecs/flac/win_utf8_io.h"; sourceTree = "SOURCE_ROOT"; }; 33615429CC44DA129BC89CE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = transupp.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/transupp.c"; sourceTree = "SOURCE_ROOT"; }; 33A739D1722B039FE1B42B0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44.h"; sourceTree = "SOURCE_ROOT"; }; @@ -350,7 +351,6 @@ 459BA6D8DE834F3A84690357 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; 45AEBBCAC5AEBF62F00C26B2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; 4618C199691241A73C70E796 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngtrans.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngtrans.c"; sourceTree = "SOURCE_ROOT"; }; - 469C174FFE7BE215B1B7EA9E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 46DF62BED3D050BABA0AD01D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.h"; sourceTree = "SOURCE_ROOT"; }; 47079AC015AF94DFE476F7A3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = crc32.c; path = "../../../../modules/juce_core/zip/zlib/crc32.c"; sourceTree = "SOURCE_ROOT"; }; 477E47C2C3B9D1856815B5EC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -370,7 +370,6 @@ 4B612CF023FAAAB715A7CE61 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; }; 4B616298D27D8AFCAF94A62B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; 4BD929A35245C5C8E1128201 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AiffAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4BDA1EF1F7CF9256A68D333B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 4C1C0EABAF9943E25BB843E2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditorKeyMapper.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h"; sourceTree = "SOURCE_ROOT"; }; 4C5027FD6B2075613AD35069 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = infback.c; path = "../../../../modules/juce_core/zip/zlib/infback.c"; sourceTree = "SOURCE_ROOT"; }; 4D8B25F49672278DAD980D37 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -897,6 +896,7 @@ BF1D2F31EFE400A6DCAB8596 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_BluetoothMidiDevicePairingDialogue.mm"; path = "../../../../modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm"; sourceTree = "SOURCE_ROOT"; }; BF6EA9101F25F8058F083E53 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdtrans.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdtrans.c"; sourceTree = "SOURCE_ROOT"; }; BF837DA7E78077E6BF21AF4A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageSequence.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.h"; sourceTree = "SOURCE_ROOT"; }; + BF9388AFE8A12DB39756403B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; BFC0BB07575856E51D86BCC1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedButtonBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.h"; sourceTree = "SOURCE_ROOT"; }; BFF3AE3A9F6BB64BE5616A50 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; C01A55BA9329E4EF3C1EA9F7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = zconf.in.h; path = "../../../../modules/juce_core/zip/zlib/zconf.in.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1020,6 +1020,7 @@ DB9ADD80EF2DCECC21876922 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; DB9BF231B5007FC6051A639E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; DBC3334D0BE4DE348E479B3B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; + DBC3B1BC0E895E46A569C155 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; DBE644AB8DD7935E701F364A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; DBEB99D494A9620FE06F48B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToneGeneratorAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; DBF39E057C900A4ADC624E8E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = all.h; path = "../../../../modules/juce_audio_formats/codecs/flac/all.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1046,6 +1047,7 @@ DFB53C51F58D5F2CC3B488C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; E0223132DBB8B309FE9741F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = window.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/window.h"; sourceTree = "SOURCE_ROOT"; }; E04EBB578FEA27D7F991CD8A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; + E07CE231F286911260E1480D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; E09D3480D6B6B3C01844FB10 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = uncompr.c; path = "../../../../modules/juce_core/zip/zlib/uncompr.c"; sourceTree = "SOURCE_ROOT"; }; E112F8849FCF66DD34FD61A9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Synthesiser.h"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h"; sourceTree = "SOURCE_ROOT"; }; E13F0F8F7F6F633D94F8852E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageFileFormat.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1162,6 +1164,8 @@ AEB39FD252263E85F2FFE6BC = {isa = PBXGroup; children = ( 418C92E17E99E2DA47AAFC04, ); name = MidiTest; sourceTree = ""; }; B5CDD98F416875D88E0F003C = {isa = PBXGroup; children = ( + 33104422BC9CDD317B7B5AAE, + DBC3B1BC0E895E46A569C155, B998A89F9F963F8DAA82AE1D, EF29543541EAA4ADFF5D8733, DD45E70E19FB20AA19459C2F, @@ -1488,12 +1492,13 @@ D55687B02DF776608D011DE6, CE3FB8659C598AA9C97F8387, D55687B02DF776608D011DE6, ); name = "juce_audio_formats"; sourceTree = ""; }; - D8B84D217D23060C303AD58E = {isa = PBXGroup; children = ( + F0B134236ABA2415C1869E21 = {isa = PBXGroup; children = ( F016087BCC0EC5E166B45215, AAB742E00619AE4A2CA4A222, BAD4511258CEEAD73C748782, AC10CC6D18D4F05E307BA85C, ); name = format; sourceTree = ""; }; - 2DE9597FD0BB24130ADDF87F = {isa = PBXGroup; children = ( + 1CDAB35995655C2BB1EFB46E = {isa = PBXGroup; children = ( + E07CE231F286911260E1480D, 612FC77FBD64CC1F6ABEC287, D86E055DC747CF4917E4981C, A0A17D0546958E5428D46022, @@ -1502,13 +1507,12 @@ 68CAC12255032C9598B836DF, 004A7D1BC57F2136FF31D767, 3AC1657491C449D35317D152, + BF9388AFE8A12DB39756403B, 15CD600731386519A6F59ABF, 0C7A1C47389DD6A1DE34D831, 8781C749016774125396B268, B6F1399CBD41DC2FF546CA8C, ); name = "format_types"; sourceTree = ""; }; - 8F1397FC23B4E2D7EBE89C39 = {isa = PBXGroup; children = ( - 4BDA1EF1F7CF9256A68D333B, - 469C174FFE7BE215B1B7EA9E, + 1AD92B063FEE69C686F8EE7D = {isa = PBXGroup; children = ( 06156CF92A104236B6EDFD6E, B0D01B3871AF10230066353C, A356604B55EA59630DE40653, @@ -1540,9 +1544,9 @@ 829E26BF13D9D5728057226C, C9441DECAB98635D65D32950, ); name = utilities; sourceTree = ""; }; 08208586E6517BD2DF67E1BB = {isa = PBXGroup; children = ( - D8B84D217D23060C303AD58E, - 2DE9597FD0BB24130ADDF87F, - 8F1397FC23B4E2D7EBE89C39, + F0B134236ABA2415C1869E21, + 1CDAB35995655C2BB1EFB46E, + 1AD92B063FEE69C686F8EE7D, F44F0295F333972B21F8639F, FEA13DA86CBA0709150CFACA, 6D2622C22212A1A6064B6D59, diff --git a/examples/MidiTest/Builds/VisualStudio2015/MidiTest.vcxproj b/examples/MidiTest/Builds/VisualStudio2015/MidiTest.vcxproj index 47352a3420..789019c20f 100644 --- a/examples/MidiTest/Builds/VisualStudio2015/MidiTest.vcxproj +++ b/examples/MidiTest/Builds/VisualStudio2015/MidiTest.vcxproj @@ -131,6 +131,9 @@ + + true + true @@ -482,9 +485,6 @@ true - - true - true @@ -1633,6 +1633,7 @@ + @@ -1786,15 +1787,16 @@ + + - diff --git a/examples/MidiTest/Builds/VisualStudio2015/MidiTest.vcxproj.filters b/examples/MidiTest/Builds/VisualStudio2015/MidiTest.vcxproj.filters index 0e1037dca2..f346438c2e 100644 --- a/examples/MidiTest/Builds/VisualStudio2015/MidiTest.vcxproj.filters +++ b/examples/MidiTest/Builds/VisualStudio2015/MidiTest.vcxproj.filters @@ -337,6 +337,9 @@ MidiTest\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -706,9 +709,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -1971,6 +1971,9 @@ MidiTest\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2430,6 +2433,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2445,6 +2451,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2454,9 +2463,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/MidiTest/Builds/iOS/MidiTest.xcodeproj/project.pbxproj b/examples/MidiTest/Builds/iOS/MidiTest.xcodeproj/project.pbxproj index e281244e02..3f1b56356f 100644 --- a/examples/MidiTest/Builds/iOS/MidiTest.xcodeproj/project.pbxproj +++ b/examples/MidiTest/Builds/iOS/MidiTest.xcodeproj/project.pbxproj @@ -260,6 +260,7 @@ 327A0154589CF5C0484C8CE3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = float.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/float.c"; sourceTree = "SOURCE_ROOT"; }; 32D72BFD938BAA4EB61A9070 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jfdctflt.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jfdctflt.c"; sourceTree = "SOURCE_ROOT"; }; 32F4F8A3445B9914A5540BBB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + 33104422BC9CDD317B7B5AAE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 335345F690175AAB7FE2CC1C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "win_utf8_io.h"; path = "../../../../modules/juce_audio_formats/codecs/flac/win_utf8_io.h"; sourceTree = "SOURCE_ROOT"; }; 33615429CC44DA129BC89CE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = transupp.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/transupp.c"; sourceTree = "SOURCE_ROOT"; }; 33A739D1722B039FE1B42B0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44.h"; sourceTree = "SOURCE_ROOT"; }; @@ -348,7 +349,6 @@ 459BA6D8DE834F3A84690357 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; 45AEBBCAC5AEBF62F00C26B2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; 4618C199691241A73C70E796 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngtrans.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngtrans.c"; sourceTree = "SOURCE_ROOT"; }; - 469C174FFE7BE215B1B7EA9E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 46DF62BED3D050BABA0AD01D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.h"; sourceTree = "SOURCE_ROOT"; }; 47079AC015AF94DFE476F7A3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = crc32.c; path = "../../../../modules/juce_core/zip/zlib/crc32.c"; sourceTree = "SOURCE_ROOT"; }; 477E47C2C3B9D1856815B5EC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -368,7 +368,6 @@ 4B612CF023FAAAB715A7CE61 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; }; 4B616298D27D8AFCAF94A62B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; 4BD929A35245C5C8E1128201 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AiffAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4BDA1EF1F7CF9256A68D333B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 4C1C0EABAF9943E25BB843E2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditorKeyMapper.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h"; sourceTree = "SOURCE_ROOT"; }; 4C5027FD6B2075613AD35069 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = infback.c; path = "../../../../modules/juce_core/zip/zlib/infback.c"; sourceTree = "SOURCE_ROOT"; }; 4D8B25F49672278DAD980D37 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChangeBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -898,6 +897,7 @@ BF1D2F31EFE400A6DCAB8596 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_BluetoothMidiDevicePairingDialogue.mm"; path = "../../../../modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm"; sourceTree = "SOURCE_ROOT"; }; BF6EA9101F25F8058F083E53 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdtrans.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdtrans.c"; sourceTree = "SOURCE_ROOT"; }; BF837DA7E78077E6BF21AF4A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageSequence.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessageSequence.h"; sourceTree = "SOURCE_ROOT"; }; + BF9388AFE8A12DB39756403B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; BFC0BB07575856E51D86BCC1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedButtonBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedButtonBar.h"; sourceTree = "SOURCE_ROOT"; }; BFF3AE3A9F6BB64BE5616A50 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; C01A55BA9329E4EF3C1EA9F7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = zconf.in.h; path = "../../../../modules/juce_core/zip/zlib/zconf.in.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1021,6 +1021,7 @@ DB9ADD80EF2DCECC21876922 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; DB9BF231B5007FC6051A639E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; DBC3334D0BE4DE348E479B3B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; + DBC3B1BC0E895E46A569C155 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; DBE644AB8DD7935E701F364A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; DBEB99D494A9620FE06F48B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToneGeneratorAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; DBF39E057C900A4ADC624E8E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = all.h; path = "../../../../modules/juce_audio_formats/codecs/flac/all.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1047,6 +1048,7 @@ DFB53C51F58D5F2CC3B488C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; E0223132DBB8B309FE9741F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = window.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/window.h"; sourceTree = "SOURCE_ROOT"; }; E04EBB578FEA27D7F991CD8A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; + E07CE231F286911260E1480D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; E09D3480D6B6B3C01844FB10 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = uncompr.c; path = "../../../../modules/juce_core/zip/zlib/uncompr.c"; sourceTree = "SOURCE_ROOT"; }; E112F8849FCF66DD34FD61A9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Synthesiser.h"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.h"; sourceTree = "SOURCE_ROOT"; }; E13F0F8F7F6F633D94F8852E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageFileFormat.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageFileFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1164,6 +1166,8 @@ AEB39FD252263E85F2FFE6BC = {isa = PBXGroup; children = ( 418C92E17E99E2DA47AAFC04, ); name = MidiTest; sourceTree = ""; }; B5CDD98F416875D88E0F003C = {isa = PBXGroup; children = ( + 33104422BC9CDD317B7B5AAE, + DBC3B1BC0E895E46A569C155, B998A89F9F963F8DAA82AE1D, EF29543541EAA4ADFF5D8733, DD45E70E19FB20AA19459C2F, @@ -1490,12 +1494,13 @@ D55687B02DF776608D011DE6, CE3FB8659C598AA9C97F8387, D55687B02DF776608D011DE6, ); name = "juce_audio_formats"; sourceTree = ""; }; - D8B84D217D23060C303AD58E = {isa = PBXGroup; children = ( + F0B134236ABA2415C1869E21 = {isa = PBXGroup; children = ( F016087BCC0EC5E166B45215, AAB742E00619AE4A2CA4A222, BAD4511258CEEAD73C748782, AC10CC6D18D4F05E307BA85C, ); name = format; sourceTree = ""; }; - 2DE9597FD0BB24130ADDF87F = {isa = PBXGroup; children = ( + 1CDAB35995655C2BB1EFB46E = {isa = PBXGroup; children = ( + E07CE231F286911260E1480D, 612FC77FBD64CC1F6ABEC287, D86E055DC747CF4917E4981C, A0A17D0546958E5428D46022, @@ -1504,13 +1509,12 @@ 68CAC12255032C9598B836DF, 004A7D1BC57F2136FF31D767, 3AC1657491C449D35317D152, + BF9388AFE8A12DB39756403B, 15CD600731386519A6F59ABF, 0C7A1C47389DD6A1DE34D831, 8781C749016774125396B268, B6F1399CBD41DC2FF546CA8C, ); name = "format_types"; sourceTree = ""; }; - 8F1397FC23B4E2D7EBE89C39 = {isa = PBXGroup; children = ( - 4BDA1EF1F7CF9256A68D333B, - 469C174FFE7BE215B1B7EA9E, + 1AD92B063FEE69C686F8EE7D = {isa = PBXGroup; children = ( 06156CF92A104236B6EDFD6E, B0D01B3871AF10230066353C, A356604B55EA59630DE40653, @@ -1542,9 +1546,9 @@ 829E26BF13D9D5728057226C, C9441DECAB98635D65D32950, ); name = utilities; sourceTree = ""; }; 08208586E6517BD2DF67E1BB = {isa = PBXGroup; children = ( - D8B84D217D23060C303AD58E, - 2DE9597FD0BB24130ADDF87F, - 8F1397FC23B4E2D7EBE89C39, + F0B134236ABA2415C1869E21, + 1CDAB35995655C2BB1EFB46E, + 1AD92B063FEE69C686F8EE7D, F44F0295F333972B21F8639F, FEA13DA86CBA0709150CFACA, 6D2622C22212A1A6064B6D59, diff --git a/examples/NetworkGraphicsDemo/Builds/MacOSX/JUCE Network Graphics Demo.xcodeproj/project.pbxproj b/examples/NetworkGraphicsDemo/Builds/MacOSX/JUCE Network Graphics Demo.xcodeproj/project.pbxproj index 281bcbda2b..13a0b24603 100644 --- a/examples/NetworkGraphicsDemo/Builds/MacOSX/JUCE Network Graphics Demo.xcodeproj/project.pbxproj +++ b/examples/NetworkGraphicsDemo/Builds/MacOSX/JUCE Network Graphics Demo.xcodeproj/project.pbxproj @@ -42,6 +42,7 @@ 001CA7EAF68DA335025FF01E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedXLock.h"; path = "../../../../modules/juce_events/native/juce_ScopedXLock.h"; sourceTree = "SOURCE_ROOT"; }; 008187B05C0B633EE28ABE56 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_ALSA.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_ALSA.cpp"; sourceTree = "SOURCE_ROOT"; }; 00B6967A854897C9D379AAF4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinate.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h"; sourceTree = "SOURCE_ROOT"; }; + 0131E0400ACEAE9A43EB7410 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 015F1D2D5F78A62C40AD1B67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; }; 01641AA0EEDDC5059FC28EF9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; }; 0186D1FA79D760C30575B900 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnailCache.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnailCache.h"; sourceTree = "SOURCE_ROOT"; }; @@ -109,7 +110,6 @@ 0CFDFC8B0EE4F67F3140A95E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_graphics.h"; path = "../../../../modules/juce_graphics/juce_graphics.h"; sourceTree = "SOURCE_ROOT"; }; 0D166F0A45739D0B47E30998 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = psy.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.c"; sourceTree = "SOURCE_ROOT"; }; 0DA4C3278F6482DB3E59D9BA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComboBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.h"; sourceTree = "SOURCE_ROOT"; }; - 0DB078E2523AD3ABE77A95F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 0DBCEADB9A04439E66BE176E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; 0DD52BE61E4DCA9575F5649F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandManager.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h"; sourceTree = "SOURCE_ROOT"; }; 0DE14A1FA22B83FEA8DA8AFC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = block.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/block.c"; sourceTree = "SOURCE_ROOT"; }; @@ -164,6 +164,7 @@ 174E22634C4ADC7062948B9D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../../../modules/juce_core/native/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; 17CBE6045D10290C77948F0C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SHA256.cpp"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.cpp"; sourceTree = "SOURCE_ROOT"; }; 18134B1B0216D1307B929E00 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jinclude.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jinclude.h"; sourceTree = "SOURCE_ROOT"; }; + 18195CD57544ED4FD38FBBB6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; 181C1A360C01EFF44A3BB18A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; }; 18874E042E7799AE612BA77B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jmemmgr.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jmemmgr.c"; sourceTree = "SOURCE_ROOT"; }; 18CE8447EE68998F8B8A73A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = inffast.c; path = "../../../../modules/juce_core/zip/zlib/inffast.c"; sourceTree = "SOURCE_ROOT"; }; @@ -398,6 +399,7 @@ 4BBD6A0FAD396B6C5DCE01B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngtrans.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngtrans.c"; sourceTree = "SOURCE_ROOT"; }; 4BE9A59D703E4CA4661252C1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ContainerDeletePolicy.h"; path = "../../../../modules/juce_core/memory/juce_ContainerDeletePolicy.h"; sourceTree = "SOURCE_ROOT"; }; 4C0B3826ABACE371F8681E61 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RSAKey.h"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.h"; sourceTree = "SOURCE_ROOT"; }; + 4C695109411FC3A003FD4B41 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 4C816FF16C50AA5C87C8F7D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; 4CAA4581DD7C06B9C83C5D8A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44.h"; sourceTree = "SOURCE_ROOT"; }; 4CC3F911E2539DE7F36A932D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vorbisenc.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisenc.c"; sourceTree = "SOURCE_ROOT"; }; @@ -511,6 +513,7 @@ 648610AB6A110B1ACD64CDAE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathIterator.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.h"; sourceTree = "SOURCE_ROOT"; }; 648E0A0D55BE1D012C1D89B1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; 649BBA6C8D29853266E8D2A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardState.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.h"; sourceTree = "SOURCE_ROOT"; }; + 6524CBDBD6DCA7275B0BB009 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 65285D35AA75D110D0A95851 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = transupp.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/transupp.h"; sourceTree = "SOURCE_ROOT"; }; 65746338AF0FDE118A3D02C1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; 665FF99D0D1BF3755FE7B803 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1136,7 +1139,6 @@ E74DA5EF2C208608AF676212 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RenderingHelpers.h"; path = "../../../../modules/juce_graphics/native/juce_RenderingHelpers.h"; sourceTree = "SOURCE_ROOT"; }; E75749124D1F2FD391C01787 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorPlayer.cpp"; path = "../../../../modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; E78FFEA6B1BE4AD1EE43C60D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_BluetoothMidiDevicePairingDialogue.cpp"; path = "../../../../modules/juce_audio_utils/native/juce_android_BluetoothMidiDevicePairingDialogue.cpp"; sourceTree = "SOURCE_ROOT"; }; - E8649B16BA011770D16BF051 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; E89452B0110096760B06397C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_ClangBugWorkaround.h"; path = "../../../../modules/juce_core/native/juce_mac_ClangBugWorkaround.h"; sourceTree = "SOURCE_ROOT"; }; E8B02F47799FC984D3FE1083 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; E8DE188896E5791E338D4EE7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPress.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1246,6 +1248,8 @@ 5A58AF0A052C539F0E342A88, 0ADF0DECFCB1DB4D3A847EB5, ); name = "JUCE Network Graphics Demo"; sourceTree = ""; }; 7131FE80B7BEC472AD0037EC = {isa = PBXGroup; children = ( + 4C695109411FC3A003FD4B41, + 6524CBDBD6DCA7275B0BB009, C6BDBA40F172EF384F005E8B, 3E313B4096468DD5EE551616, 096BB22B9363BAC781C4668D, @@ -1572,12 +1576,13 @@ 1ED0FAAEFF9D4A6426E76E89, F756FBC7A6836696BCADD2B4, 1ED0FAAEFF9D4A6426E76E89, ); name = "juce_audio_formats"; sourceTree = ""; }; - 380295244851F958856B8E6D = {isa = PBXGroup; children = ( + 59B9BA9101204585305599F4 = {isa = PBXGroup; children = ( 6E27EBF864367EBA8B44DFA9, E45C1684DCDBFD3B76F0B209, DC50301B6C3FDAE98E224E76, 9671131059C459A1E119535E, ); name = format; sourceTree = ""; }; - 216078898103A118C58B7B65 = {isa = PBXGroup; children = ( + 100A41698C09B708391E08C4 = {isa = PBXGroup; children = ( + 0131E0400ACEAE9A43EB7410, 3F6BE2A8CAF1C23380D884F5, 1D153366F6EA459B397CA356, E44B8F906461AB6AC47B374A, @@ -1586,13 +1591,12 @@ 7A41A9C37A8BA7EFB6D1F518, 264B51063F7AA584D23B426E, 545C5A5F29523968A387FD91, + 18195CD57544ED4FD38FBBB6, 53105889A1FAACE8908856FD, CE06CB9CD28DE31FA1528DE5, F906FBF064A716C5EADF5708, 5B8CE8EC0CEDF800AD5B71E1, ); name = "format_types"; sourceTree = ""; }; - 7A3339B826CDDE52B5710713 = {isa = PBXGroup; children = ( - E8649B16BA011770D16BF051, - 0DB078E2523AD3ABE77A95F6, + BF14826742FE8470E68E2CDB = {isa = PBXGroup; children = ( 47C8219AACA73B2EBE302A35, 904D7BEE6279D62983E57DCA, 3193E205AA627C635FF236E0, @@ -1624,9 +1628,9 @@ 5ED809701F235D958635DACA, 877FC50B817B57928FD4395C, ); name = utilities; sourceTree = ""; }; 5102C5BFB76FB218BB512EC7 = {isa = PBXGroup; children = ( - 380295244851F958856B8E6D, - 216078898103A118C58B7B65, - 7A3339B826CDDE52B5710713, + 59B9BA9101204585305599F4, + 100A41698C09B708391E08C4, + BF14826742FE8470E68E2CDB, DE8DDC1A6A1A5E70018B45B7, CF3502266720B326C5ED5310, EA78C0B608211D0AD6B45A51, diff --git a/examples/NetworkGraphicsDemo/Builds/VisualStudio2013/JUCE Network Graphics Demo.vcxproj b/examples/NetworkGraphicsDemo/Builds/VisualStudio2013/JUCE Network Graphics Demo.vcxproj index f818015797..552f751c17 100644 --- a/examples/NetworkGraphicsDemo/Builds/VisualStudio2013/JUCE Network Graphics Demo.vcxproj +++ b/examples/NetworkGraphicsDemo/Builds/VisualStudio2013/JUCE Network Graphics Demo.vcxproj @@ -130,6 +130,9 @@ + + true + true @@ -481,9 +484,6 @@ true - - true - true @@ -1717,6 +1717,7 @@ + @@ -1870,15 +1871,16 @@ + + - diff --git a/examples/NetworkGraphicsDemo/Builds/VisualStudio2013/JUCE Network Graphics Demo.vcxproj.filters b/examples/NetworkGraphicsDemo/Builds/VisualStudio2013/JUCE Network Graphics Demo.vcxproj.filters index 599d78cf58..c3b23c50db 100644 --- a/examples/NetworkGraphicsDemo/Builds/VisualStudio2013/JUCE Network Graphics Demo.vcxproj.filters +++ b/examples/NetworkGraphicsDemo/Builds/VisualStudio2013/JUCE Network Graphics Demo.vcxproj.filters @@ -364,6 +364,9 @@ JUCE Network Graphics Demo\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -733,9 +736,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2103,6 +2103,9 @@ JUCE Network Graphics Demo\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2562,6 +2565,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2577,6 +2583,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2586,9 +2595,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/NetworkGraphicsDemo/Builds/iOS/JUCE Network Graphics Demo.xcodeproj/project.pbxproj b/examples/NetworkGraphicsDemo/Builds/iOS/JUCE Network Graphics Demo.xcodeproj/project.pbxproj index 7388f5e298..15ff3b3250 100644 --- a/examples/NetworkGraphicsDemo/Builds/iOS/JUCE Network Graphics Demo.xcodeproj/project.pbxproj +++ b/examples/NetworkGraphicsDemo/Builds/iOS/JUCE Network Graphics Demo.xcodeproj/project.pbxproj @@ -43,6 +43,7 @@ 001CA7EAF68DA335025FF01E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedXLock.h"; path = "../../../../modules/juce_events/native/juce_ScopedXLock.h"; sourceTree = "SOURCE_ROOT"; }; 008187B05C0B633EE28ABE56 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_ALSA.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_ALSA.cpp"; sourceTree = "SOURCE_ROOT"; }; 00B6967A854897C9D379AAF4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinate.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h"; sourceTree = "SOURCE_ROOT"; }; + 0131E0400ACEAE9A43EB7410 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 015F1D2D5F78A62C40AD1B67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; }; 01641AA0EEDDC5059FC28EF9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringPairArray.cpp"; path = "../../../../modules/juce_core/text/juce_StringPairArray.cpp"; sourceTree = "SOURCE_ROOT"; }; 0186D1FA79D760C30575B900 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnailCache.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnailCache.h"; sourceTree = "SOURCE_ROOT"; }; @@ -111,7 +112,6 @@ 0CFDFC8B0EE4F67F3140A95E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_graphics.h"; path = "../../../../modules/juce_graphics/juce_graphics.h"; sourceTree = "SOURCE_ROOT"; }; 0D166F0A45739D0B47E30998 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = psy.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.c"; sourceTree = "SOURCE_ROOT"; }; 0DA4C3278F6482DB3E59D9BA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComboBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.h"; sourceTree = "SOURCE_ROOT"; }; - 0DB078E2523AD3ABE77A95F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 0DBCEADB9A04439E66BE176E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; 0DD52BE61E4DCA9575F5649F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandManager.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h"; sourceTree = "SOURCE_ROOT"; }; 0DE14A1FA22B83FEA8DA8AFC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = block.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/block.c"; sourceTree = "SOURCE_ROOT"; }; @@ -166,6 +166,7 @@ 174E22634C4ADC7062948B9D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../../../modules/juce_core/native/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; 17CBE6045D10290C77948F0C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SHA256.cpp"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.cpp"; sourceTree = "SOURCE_ROOT"; }; 18134B1B0216D1307B929E00 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jinclude.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jinclude.h"; sourceTree = "SOURCE_ROOT"; }; + 18195CD57544ED4FD38FBBB6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; 181C1A360C01EFF44A3BB18A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; }; 18874E042E7799AE612BA77B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jmemmgr.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jmemmgr.c"; sourceTree = "SOURCE_ROOT"; }; 18CE8447EE68998F8B8A73A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = inffast.c; path = "../../../../modules/juce_core/zip/zlib/inffast.c"; sourceTree = "SOURCE_ROOT"; }; @@ -400,6 +401,7 @@ 4BBD6A0FAD396B6C5DCE01B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngtrans.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngtrans.c"; sourceTree = "SOURCE_ROOT"; }; 4BE9A59D703E4CA4661252C1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ContainerDeletePolicy.h"; path = "../../../../modules/juce_core/memory/juce_ContainerDeletePolicy.h"; sourceTree = "SOURCE_ROOT"; }; 4C0B3826ABACE371F8681E61 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RSAKey.h"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.h"; sourceTree = "SOURCE_ROOT"; }; + 4C695109411FC3A003FD4B41 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 4C816FF16C50AA5C87C8F7D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; 4CAA4581DD7C06B9C83C5D8A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44.h"; sourceTree = "SOURCE_ROOT"; }; 4CC3F911E2539DE7F36A932D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vorbisenc.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisenc.c"; sourceTree = "SOURCE_ROOT"; }; @@ -514,6 +516,7 @@ 648610AB6A110B1ACD64CDAE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PathIterator.h"; path = "../../../../modules/juce_graphics/geometry/juce_PathIterator.h"; sourceTree = "SOURCE_ROOT"; }; 648E0A0D55BE1D012C1D89B1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; 649BBA6C8D29853266E8D2A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardState.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.h"; sourceTree = "SOURCE_ROOT"; }; + 6524CBDBD6DCA7275B0BB009 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 65285D35AA75D110D0A95851 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = transupp.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/transupp.h"; sourceTree = "SOURCE_ROOT"; }; 65746338AF0FDE118A3D02C1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; 665FF99D0D1BF3755FE7B803 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1139,7 +1142,6 @@ E74DA5EF2C208608AF676212 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RenderingHelpers.h"; path = "../../../../modules/juce_graphics/native/juce_RenderingHelpers.h"; sourceTree = "SOURCE_ROOT"; }; E75749124D1F2FD391C01787 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorPlayer.cpp"; path = "../../../../modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; E78FFEA6B1BE4AD1EE43C60D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_BluetoothMidiDevicePairingDialogue.cpp"; path = "../../../../modules/juce_audio_utils/native/juce_android_BluetoothMidiDevicePairingDialogue.cpp"; sourceTree = "SOURCE_ROOT"; }; - E8649B16BA011770D16BF051 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; E89452B0110096760B06397C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_ClangBugWorkaround.h"; path = "../../../../modules/juce_core/native/juce_mac_ClangBugWorkaround.h"; sourceTree = "SOURCE_ROOT"; }; E8B02F47799FC984D3FE1083 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; E8DE188896E5791E338D4EE7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPress.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1248,6 +1250,8 @@ 5A58AF0A052C539F0E342A88, 0ADF0DECFCB1DB4D3A847EB5, ); name = "JUCE Network Graphics Demo"; sourceTree = ""; }; 7131FE80B7BEC472AD0037EC = {isa = PBXGroup; children = ( + 4C695109411FC3A003FD4B41, + 6524CBDBD6DCA7275B0BB009, C6BDBA40F172EF384F005E8B, 3E313B4096468DD5EE551616, 096BB22B9363BAC781C4668D, @@ -1574,12 +1578,13 @@ 1ED0FAAEFF9D4A6426E76E89, F756FBC7A6836696BCADD2B4, 1ED0FAAEFF9D4A6426E76E89, ); name = "juce_audio_formats"; sourceTree = ""; }; - 380295244851F958856B8E6D = {isa = PBXGroup; children = ( + 59B9BA9101204585305599F4 = {isa = PBXGroup; children = ( 6E27EBF864367EBA8B44DFA9, E45C1684DCDBFD3B76F0B209, DC50301B6C3FDAE98E224E76, 9671131059C459A1E119535E, ); name = format; sourceTree = ""; }; - 216078898103A118C58B7B65 = {isa = PBXGroup; children = ( + 100A41698C09B708391E08C4 = {isa = PBXGroup; children = ( + 0131E0400ACEAE9A43EB7410, 3F6BE2A8CAF1C23380D884F5, 1D153366F6EA459B397CA356, E44B8F906461AB6AC47B374A, @@ -1588,13 +1593,12 @@ 7A41A9C37A8BA7EFB6D1F518, 264B51063F7AA584D23B426E, 545C5A5F29523968A387FD91, + 18195CD57544ED4FD38FBBB6, 53105889A1FAACE8908856FD, CE06CB9CD28DE31FA1528DE5, F906FBF064A716C5EADF5708, 5B8CE8EC0CEDF800AD5B71E1, ); name = "format_types"; sourceTree = ""; }; - 7A3339B826CDDE52B5710713 = {isa = PBXGroup; children = ( - E8649B16BA011770D16BF051, - 0DB078E2523AD3ABE77A95F6, + BF14826742FE8470E68E2CDB = {isa = PBXGroup; children = ( 47C8219AACA73B2EBE302A35, 904D7BEE6279D62983E57DCA, 3193E205AA627C635FF236E0, @@ -1626,9 +1630,9 @@ 5ED809701F235D958635DACA, 877FC50B817B57928FD4395C, ); name = utilities; sourceTree = ""; }; 5102C5BFB76FB218BB512EC7 = {isa = PBXGroup; children = ( - 380295244851F958856B8E6D, - 216078898103A118C58B7B65, - 7A3339B826CDDE52B5710713, + 59B9BA9101204585305599F4, + 100A41698C09B708391E08C4, + BF14826742FE8470E68E2CDB, DE8DDC1A6A1A5E70018B45B7, CF3502266720B326C5ED5310, EA78C0B608211D0AD6B45A51, diff --git a/examples/OSCMonitor/Builds/MacOSX/OSCMonitor.xcodeproj/project.pbxproj b/examples/OSCMonitor/Builds/MacOSX/OSCMonitor.xcodeproj/project.pbxproj index 3f836c19c3..d2a5ac3eff 100644 --- a/examples/OSCMonitor/Builds/MacOSX/OSCMonitor.xcodeproj/project.pbxproj +++ b/examples/OSCMonitor/Builds/MacOSX/OSCMonitor.xcodeproj/project.pbxproj @@ -60,6 +60,7 @@ 077D14BDF440711227A88652 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = vorbisfile.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/vorbisfile.h"; sourceTree = "SOURCE_ROOT"; }; 07D9756CD40A2257CE645AFC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OutputStream.h"; path = "../../../../modules/juce_core/streams/juce_OutputStream.h"; sourceTree = "SOURCE_ROOT"; }; 07E22F69D1BD5DBC61EB6B57 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryBlock.h"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.h"; sourceTree = "SOURCE_ROOT"; }; + 080F7E52F71A2A8FCFFC729E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 0834DCEB2DC13BDD835B441A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; 0871563B8BDFAC16F5251093 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; }; 08F133FB8B5DB6987C98CC09 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -139,7 +140,6 @@ 17385E08CF13E8A648C449E7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_URL.h"; path = "../../../../modules/juce_core/network/juce_URL.h"; sourceTree = "SOURCE_ROOT"; }; 175C70C20B5074616F3FC422 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; }; 175FF8F74000A6143EB009B3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_basics.cpp"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; - 179F013F410ABCEB7D90C596 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 17CBC430274E9E3AFB522A3E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = alloc.h; path = "../../../../modules/juce_audio_formats/codecs/flac/alloc.h"; sourceTree = "SOURCE_ROOT"; }; 17D1AE835BB6F69441F039C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; }; 17F88B6945BC396BBE2196A7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ConcertinaPanel.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ConcertinaPanel.h"; sourceTree = "SOURCE_ROOT"; }; @@ -363,6 +363,7 @@ 45DF47F918E119829B97D35B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; 45EC230E69B0801C93615256 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Singleton.h"; path = "../../../../modules/juce_core/memory/juce_Singleton.h"; sourceTree = "SOURCE_ROOT"; }; 45F0BC9FD5A2D8A50C09E463 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 45FA7E994DBE455AA5A893ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 46175DD8DD8511DA50CEA9A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; 462D423963B1B96FA13F4CCC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Socket.h"; path = "../../../../modules/juce_core/network/juce_Socket.h"; sourceTree = "SOURCE_ROOT"; }; 46609082F0807F204974298F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = memory.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/memory.c"; sourceTree = "SOURCE_ROOT"; }; @@ -838,6 +839,7 @@ AC1D689111ED9AAA1F237725 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_X.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_X.h"; sourceTree = "SOURCE_ROOT"; }; AC6C0541D84539578CD41683 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; ACE47FBC8BA954531F30B7E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; }; + AD1F1A548361C7380528F1B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; AD3390E5060FADCAC11F68B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inftrees.h; path = "../../../../modules/juce_core/zip/zlib/inftrees.h"; sourceTree = "SOURCE_ROOT"; }; AD4CF4796566AFD03820DE23 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = lsp.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lsp.c"; sourceTree = "SOURCE_ROOT"; }; AD61AA97BEAA9C7C8F7E575D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Line.h"; path = "../../../../modules/juce_graphics/geometry/juce_Line.h"; sourceTree = "SOURCE_ROOT"; }; @@ -901,6 +903,7 @@ B87279BB08766512ECF1C31A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLGraphicsContext.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; B90BFDC91636E77EDB4FA432 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; B94E840D38EE5717DA2CE143 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; }; + B9599618D7841E6929BE3281 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; B978975E52F0BEAE7B9EFFFC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseEvent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.h"; sourceTree = "SOURCE_ROOT"; }; B9AFD1D82A8CD4C118FDDBF9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLTexture.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLTexture.h"; sourceTree = "SOURCE_ROOT"; }; BA25DC3EA5013698B5DD6C83 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilter.h"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1047,7 +1050,6 @@ DD424F8EA63B33E90F19A137 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiDocumentPanel.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; DDE417C268A7F07384AE598C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../../modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; }; DDF58F993D5C3FDC1BCC3F2A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; }; - DE7EB6D4AA1377B537E5DA61 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; DF2724BB83DA60B2CA70A95F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEInstrument.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPEInstrument.cpp"; sourceTree = "SOURCE_ROOT"; }; DFA95E296DD42D1A5279204E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SparseSet.h"; path = "../../../../modules/juce_core/containers/juce_SparseSet.h"; sourceTree = "SOURCE_ROOT"; }; DFC5E42390AE2D4E416B43F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiRPN.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiRPN.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1228,6 +1230,8 @@ 1C8FA7F39C7073AF87993BFB = {isa = PBXGroup; children = ( 89A7E3ABB1B5A12BE261B889, ); name = OSCMonitor; sourceTree = ""; }; A9C2B78C482A46837A454782 = {isa = PBXGroup; children = ( + AD1F1A548361C7380528F1B7, + 080F7E52F71A2A8FCFFC729E, EC1F4760AA4F4543060C094C, 9F632EA6F5EA390C46075248, 74DF1E83B08CAB5A9A5E5946, @@ -1554,12 +1558,13 @@ 9FFE49CBCD039E37C002D62E, A8AF947903C0976A1D45F0B2, 9FFE49CBCD039E37C002D62E, ); name = "juce_audio_formats"; sourceTree = ""; }; - 901B8839D683020AF6D6E1BC = {isa = PBXGroup; children = ( + B0B3BC6A97AB090589FA0DDA = {isa = PBXGroup; children = ( EC67081B5745049B6BF7CBB0, CD66E549F25814B7ADCBDB29, 56AE9A2DF810FBD48B3BA9C6, 329E82CA3BCB5AE3EC94E0E7, ); name = format; sourceTree = ""; }; - 216D3907DF7DA3A5F355D7D1 = {isa = PBXGroup; children = ( + FA85013C418278F7BF6B3288 = {isa = PBXGroup; children = ( + 45FA7E994DBE455AA5A893ED, 1F249E983E9D32170A294720, 349D17DB66E9B32A98CC3C18, E36F4E6658950E867ECF189B, @@ -1568,13 +1573,12 @@ 6D88A3624F51E4B8C4386378, C629913291BE1608B58ABF38, 88964E03F3F86CDCA280D3CC, + B9599618D7841E6929BE3281, 0743372F26489CD53C1BDB91, 442D9B72ECE154D5D4E7C72F, 1010FD77F32B1F7F525FC184, 2F13071B3F288C3AA6842EF2, ); name = "format_types"; sourceTree = ""; }; - 194D6EEB3476DE2C9AF5EF41 = {isa = PBXGroup; children = ( - 179F013F410ABCEB7D90C596, - DE7EB6D4AA1377B537E5DA61, + 017A104FC4591C2810AEAF76 = {isa = PBXGroup; children = ( 5708133B2F0805351AC43D89, B85116C34AC3CB6A0305ACBA, 77675F0CF9463BE424DC6483, @@ -1606,9 +1610,9 @@ 0B7274E64537FF84DDB983BB, B285E664E174164A6988AFAE, ); name = utilities; sourceTree = ""; }; E212DC5AEF2D3B995C1F590B = {isa = PBXGroup; children = ( - 901B8839D683020AF6D6E1BC, - 216D3907DF7DA3A5F355D7D1, - 194D6EEB3476DE2C9AF5EF41, + B0B3BC6A97AB090589FA0DDA, + FA85013C418278F7BF6B3288, + 017A104FC4591C2810AEAF76, 7D104F1FB8F403DCC7CF75A7, 6E26057A2CF8C7301A74A913, 1E7182C9B2AD1C849B25A723, diff --git a/examples/OSCMonitor/Builds/VisualStudio2015/OSCMonitor.vcxproj b/examples/OSCMonitor/Builds/VisualStudio2015/OSCMonitor.vcxproj index 46c2519b95..0e20e684ad 100644 --- a/examples/OSCMonitor/Builds/VisualStudio2015/OSCMonitor.vcxproj +++ b/examples/OSCMonitor/Builds/VisualStudio2015/OSCMonitor.vcxproj @@ -130,6 +130,9 @@ + + true + true @@ -481,9 +484,6 @@ true - - true - true @@ -1699,6 +1699,7 @@ + @@ -1852,15 +1853,16 @@ + + - diff --git a/examples/OSCMonitor/Builds/VisualStudio2015/OSCMonitor.vcxproj.filters b/examples/OSCMonitor/Builds/VisualStudio2015/OSCMonitor.vcxproj.filters index e8144a4ed3..5214aeef4b 100644 --- a/examples/OSCMonitor/Builds/VisualStudio2015/OSCMonitor.vcxproj.filters +++ b/examples/OSCMonitor/Builds/VisualStudio2015/OSCMonitor.vcxproj.filters @@ -364,6 +364,9 @@ OSCMonitor\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -733,9 +736,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2079,6 +2079,9 @@ OSCMonitor\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2538,6 +2541,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2553,6 +2559,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2562,9 +2571,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/OpenGLAppExample/Builds/MacOSX/OpenGLAppExample.xcodeproj/project.pbxproj b/examples/OpenGLAppExample/Builds/MacOSX/OpenGLAppExample.xcodeproj/project.pbxproj index 16af6bcd62..4b3ccbcde0 100644 --- a/examples/OpenGLAppExample/Builds/MacOSX/OpenGLAppExample.xcodeproj/project.pbxproj +++ b/examples/OpenGLAppExample/Builds/MacOSX/OpenGLAppExample.xcodeproj/project.pbxproj @@ -72,7 +72,6 @@ 0917DAAA83C16F4D430A4961 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiBuffer.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; 0950F9F7698F791C6BC7626A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilter.h"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.h"; sourceTree = "SOURCE_ROOT"; }; 097B8DA5C29B16C544CEA626 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; - 09B659F4A61EA3BDC6521FEC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 0A2608950EEA0BB719B538D6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngtrans.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngtrans.c"; sourceTree = "SOURCE_ROOT"; }; 0B26EC9D2A47B858246A76EF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDBurner.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDBurner.mm"; sourceTree = "SOURCE_ROOT"; }; 0BB6230BB8EFC6D0CF7BFADD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitreader.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitreader.h"; sourceTree = "SOURCE_ROOT"; }; @@ -472,6 +471,7 @@ 5F43D23FA8A72E66792AE5C7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; 5F49099628EF3662332FDB0D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AiffAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; 5F6BDD2491C4086940AAE045 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 60283D945E6E23648B74C670 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 60359F3EE85F679C1D118136 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; }; 60B2BAA3043C667FE98E94CC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../../../modules/juce_core/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; }; 60F110007A8248E4318D9B0D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadower.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -564,6 +564,7 @@ 7156B58188258F7EBE617E15 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CPlusPlusCodeTokeniser.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; }; 718E39433D13021F56FCA2AC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_extra.cpp"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.cpp"; sourceTree = "SOURCE_ROOT"; }; 71F494877324567960FC3F84 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../../modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; + 7204C6A7EFEF25B1A2FD34BC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; 7207669F41206DC961E08FD2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; 7246A65F3B8646D764F3A355 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; 7264370AC60580E5E9B414E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = md5.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/md5.c"; sourceTree = "SOURCE_ROOT"; }; @@ -908,6 +909,7 @@ BE635BACA572437D8DFDEEC8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; BEA260469BBB48EB998AA4DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; BEAB03E92089D87D7D6A2353 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; + BEC603E981665029272775AE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; BEFB2034FC381E2DD019E372 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../../../modules/juce_core/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; }; C007BC3372F44746BD6E98C0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; C02F8C844FAD835F09408406 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1042,6 +1044,7 @@ DC3E9EDCD85270B2E9D33BF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_linux_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; DC9D4AE01FB7CF8D2877B198 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.h"; sourceTree = "SOURCE_ROOT"; }; DCB52EFF8A9F5D9F6CF3D3FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; }; + DD4BAA40B619A941A61CEA8F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; DD542B6F61E6C27A0D5A5F2A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectSound.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_DirectSound.cpp"; sourceTree = "SOURCE_ROOT"; }; DDE0FBFAC8D2239A971F3C94 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = transupp.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/transupp.c"; sourceTree = "SOURCE_ROOT"; }; DDF7D7828813BEC0173FD43A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_curl_Network.cpp"; path = "../../../../modules/juce_core/native/juce_curl_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1124,7 +1127,6 @@ EF0061905AEAC90A86145D40 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; EF073EC891B2731068542C61 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; EF70C0EA201D702D22D06396 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; - EF7A3AF54294E08EB489D9AF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; EFDD05E3C006BA460761594C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; }; F0074D8C86D3265AF7889CCF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; F0260E36C06C76C1BE1F7D8A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPESynthesiser.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1216,6 +1218,8 @@ 853E25E8F0EA391EE8D4A3B8 = {isa = PBXGroup; children = ( 3FD01CA071C629C30000EC75, ); name = OpenGLAppExample; sourceTree = ""; }; BD8BD7AD59B318355DEFDCD5 = {isa = PBXGroup; children = ( + DD4BAA40B619A941A61CEA8F, + 60283D945E6E23648B74C670, 11614D602849B43F5ED92934, 6B5D185CB49DC6746B357183, 47E94C2476E8A7171A484CF0, @@ -1542,12 +1546,13 @@ 0737A415932C93579574CE2D, FBDBBE33AEF062A1457DAA42, 0737A415932C93579574CE2D, ); name = "juce_audio_formats"; sourceTree = ""; }; - 006D02511CFE26C2F9C2FB0E = {isa = PBXGroup; children = ( + A33A96CB09D5729EA880B97A = {isa = PBXGroup; children = ( 9FE8D5E52AC84BCDEE8B414B, 266A60D0C3095B8F7F16751E, 1A366C1E8FF34F708C0AF994, 20F2CFC88281301E30E08682, ); name = format; sourceTree = ""; }; - 1EF68EEF952C0E97F8366154 = {isa = PBXGroup; children = ( + 4C869058A5235AFEB424065F = {isa = PBXGroup; children = ( + BEC603E981665029272775AE, 23EA0178C7150CBA80E79215, 1CC05551F14FFC0161D8E12A, 966F24941F855EA74A2A8914, @@ -1556,13 +1561,12 @@ B7612EA3B34C6AC48079A447, 58C9B8F93CF63036CA33A6C3, AD0DBF0531130EAD4DF2A8FA, + 7204C6A7EFEF25B1A2FD34BC, 6C32663096AA8DFE514E6F70, 8E0D42B79853ED7FC60F931B, D8F75466ADD0287144087C5B, 794DEE7E5CC51940507F676F, ); name = "format_types"; sourceTree = ""; }; - 9D1668FDF155A70D5F26AA72 = {isa = PBXGroup; children = ( - 09B659F4A61EA3BDC6521FEC, - EF7A3AF54294E08EB489D9AF, + C48BED114519383CD4437DAF = {isa = PBXGroup; children = ( 52057B317B0FC98209D5BEC9, A4E723D11ADD694C4A3D318C, B97C816F9CBDE00E567E3144, @@ -1594,9 +1598,9 @@ 8684BC420922F40BD629C51C, 49EE14EEEF6EADB9F20306E4, ); name = utilities; sourceTree = ""; }; B0A8A78F56D39E5C52AB1C76 = {isa = PBXGroup; children = ( - 006D02511CFE26C2F9C2FB0E, - 1EF68EEF952C0E97F8366154, - 9D1668FDF155A70D5F26AA72, + A33A96CB09D5729EA880B97A, + 4C869058A5235AFEB424065F, + C48BED114519383CD4437DAF, F3B6A6258B3BDBEC1CD06FA1, 1B61782F94F534A6144C3496, 5531660E59F73238C0AC3B7F, diff --git a/examples/OpenGLAppExample/Builds/VisualStudio2010/OpenGLAppExample.vcxproj b/examples/OpenGLAppExample/Builds/VisualStudio2010/OpenGLAppExample.vcxproj index ab8c56da74..d571a30019 100644 --- a/examples/OpenGLAppExample/Builds/VisualStudio2010/OpenGLAppExample.vcxproj +++ b/examples/OpenGLAppExample/Builds/VisualStudio2010/OpenGLAppExample.vcxproj @@ -125,6 +125,9 @@ + + true + true @@ -476,9 +479,6 @@ true - - true - true @@ -1666,6 +1666,7 @@ + @@ -1819,15 +1820,16 @@ + + - diff --git a/examples/OpenGLAppExample/Builds/VisualStudio2010/OpenGLAppExample.vcxproj.filters b/examples/OpenGLAppExample/Builds/VisualStudio2010/OpenGLAppExample.vcxproj.filters index 11ee8fb6b4..1b59871542 100644 --- a/examples/OpenGLAppExample/Builds/VisualStudio2010/OpenGLAppExample.vcxproj.filters +++ b/examples/OpenGLAppExample/Builds/VisualStudio2010/OpenGLAppExample.vcxproj.filters @@ -364,6 +364,9 @@ OpenGLAppExample\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -733,9 +736,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2049,6 +2049,9 @@ OpenGLAppExample\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2508,6 +2511,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2523,6 +2529,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2532,9 +2541,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/OpenGLAppExample/Builds/iOS/OpenGLAppExample.xcodeproj/project.pbxproj b/examples/OpenGLAppExample/Builds/iOS/OpenGLAppExample.xcodeproj/project.pbxproj index 06b3130331..d5abc8e30c 100644 --- a/examples/OpenGLAppExample/Builds/iOS/OpenGLAppExample.xcodeproj/project.pbxproj +++ b/examples/OpenGLAppExample/Builds/iOS/OpenGLAppExample.xcodeproj/project.pbxproj @@ -70,7 +70,6 @@ 0917DAAA83C16F4D430A4961 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiBuffer.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; 0950F9F7698F791C6BC7626A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilter.h"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.h"; sourceTree = "SOURCE_ROOT"; }; 097B8DA5C29B16C544CEA626 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; - 09B659F4A61EA3BDC6521FEC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 0A2608950EEA0BB719B538D6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngtrans.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngtrans.c"; sourceTree = "SOURCE_ROOT"; }; 0B26EC9D2A47B858246A76EF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDBurner.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDBurner.mm"; sourceTree = "SOURCE_ROOT"; }; 0BB6230BB8EFC6D0CF7BFADD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitreader.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitreader.h"; sourceTree = "SOURCE_ROOT"; }; @@ -468,6 +467,7 @@ 5F43D23FA8A72E66792AE5C7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; 5F49099628EF3662332FDB0D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AiffAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; 5F6BDD2491C4086940AAE045 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 60283D945E6E23648B74C670 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 60359F3EE85F679C1D118136 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; }; 60B2BAA3043C667FE98E94CC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../../../modules/juce_core/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; }; 60F110007A8248E4318D9B0D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadower.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -560,6 +560,7 @@ 7156B58188258F7EBE617E15 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CPlusPlusCodeTokeniser.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; }; 718E39433D13021F56FCA2AC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_extra.cpp"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.cpp"; sourceTree = "SOURCE_ROOT"; }; 71F494877324567960FC3F84 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../../modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; + 7204C6A7EFEF25B1A2FD34BC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; 7207669F41206DC961E08FD2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; 7246A65F3B8646D764F3A355 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; 7264370AC60580E5E9B414E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = md5.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/md5.c"; sourceTree = "SOURCE_ROOT"; }; @@ -903,6 +904,7 @@ BE635BACA572437D8DFDEEC8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; BEA260469BBB48EB998AA4DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; BEAB03E92089D87D7D6A2353 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; + BEC603E981665029272775AE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; BEFB2034FC381E2DD019E372 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../../../modules/juce_core/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; }; C007BC3372F44746BD6E98C0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; C02F8C844FAD835F09408406 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1038,6 +1040,7 @@ DC3E9EDCD85270B2E9D33BF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_linux_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; DC9D4AE01FB7CF8D2877B198 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.h"; sourceTree = "SOURCE_ROOT"; }; DCB52EFF8A9F5D9F6CF3D3FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; }; + DD4BAA40B619A941A61CEA8F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; DD542B6F61E6C27A0D5A5F2A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectSound.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_DirectSound.cpp"; sourceTree = "SOURCE_ROOT"; }; DDE0FBFAC8D2239A971F3C94 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = transupp.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/transupp.c"; sourceTree = "SOURCE_ROOT"; }; DDF7D7828813BEC0173FD43A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_curl_Network.cpp"; path = "../../../../modules/juce_core/native/juce_curl_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1120,7 +1123,6 @@ EF0061905AEAC90A86145D40 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; EF073EC891B2731068542C61 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; EF70C0EA201D702D22D06396 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; - EF7A3AF54294E08EB489D9AF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; EFDD05E3C006BA460761594C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; }; F0074D8C86D3265AF7889CCF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; F0260E36C06C76C1BE1F7D8A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPESynthesiser.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1212,6 +1214,8 @@ 853E25E8F0EA391EE8D4A3B8 = {isa = PBXGroup; children = ( 3FD01CA071C629C30000EC75, ); name = OpenGLAppExample; sourceTree = ""; }; BD8BD7AD59B318355DEFDCD5 = {isa = PBXGroup; children = ( + DD4BAA40B619A941A61CEA8F, + 60283D945E6E23648B74C670, 11614D602849B43F5ED92934, 6B5D185CB49DC6746B357183, 47E94C2476E8A7171A484CF0, @@ -1538,12 +1542,13 @@ 0737A415932C93579574CE2D, FBDBBE33AEF062A1457DAA42, 0737A415932C93579574CE2D, ); name = "juce_audio_formats"; sourceTree = ""; }; - 006D02511CFE26C2F9C2FB0E = {isa = PBXGroup; children = ( + A33A96CB09D5729EA880B97A = {isa = PBXGroup; children = ( 9FE8D5E52AC84BCDEE8B414B, 266A60D0C3095B8F7F16751E, 1A366C1E8FF34F708C0AF994, 20F2CFC88281301E30E08682, ); name = format; sourceTree = ""; }; - 1EF68EEF952C0E97F8366154 = {isa = PBXGroup; children = ( + 4C869058A5235AFEB424065F = {isa = PBXGroup; children = ( + BEC603E981665029272775AE, 23EA0178C7150CBA80E79215, 1CC05551F14FFC0161D8E12A, 966F24941F855EA74A2A8914, @@ -1552,13 +1557,12 @@ B7612EA3B34C6AC48079A447, 58C9B8F93CF63036CA33A6C3, AD0DBF0531130EAD4DF2A8FA, + 7204C6A7EFEF25B1A2FD34BC, 6C32663096AA8DFE514E6F70, 8E0D42B79853ED7FC60F931B, D8F75466ADD0287144087C5B, 794DEE7E5CC51940507F676F, ); name = "format_types"; sourceTree = ""; }; - 9D1668FDF155A70D5F26AA72 = {isa = PBXGroup; children = ( - 09B659F4A61EA3BDC6521FEC, - EF7A3AF54294E08EB489D9AF, + C48BED114519383CD4437DAF = {isa = PBXGroup; children = ( 52057B317B0FC98209D5BEC9, A4E723D11ADD694C4A3D318C, B97C816F9CBDE00E567E3144, @@ -1590,9 +1594,9 @@ 8684BC420922F40BD629C51C, 49EE14EEEF6EADB9F20306E4, ); name = utilities; sourceTree = ""; }; B0A8A78F56D39E5C52AB1C76 = {isa = PBXGroup; children = ( - 006D02511CFE26C2F9C2FB0E, - 1EF68EEF952C0E97F8366154, - 9D1668FDF155A70D5F26AA72, + A33A96CB09D5729EA880B97A, + 4C869058A5235AFEB424065F, + C48BED114519383CD4437DAF, F3B6A6258B3BDBEC1CD06FA1, 1B61782F94F534A6144C3496, 5531660E59F73238C0AC3B7F, diff --git a/examples/PluckedStringsDemo/Builds/MacOSX/PluckedStringsDemo.xcodeproj/project.pbxproj b/examples/PluckedStringsDemo/Builds/MacOSX/PluckedStringsDemo.xcodeproj/project.pbxproj index b2c1266b82..1c7194ddb0 100644 --- a/examples/PluckedStringsDemo/Builds/MacOSX/PluckedStringsDemo.xcodeproj/project.pbxproj +++ b/examples/PluckedStringsDemo/Builds/MacOSX/PluckedStringsDemo.xcodeproj/project.pbxproj @@ -108,6 +108,7 @@ 0E27E32E44CDE4F786209EA0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReverbAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; 0E2F963D8586DCC6CC882F04 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; }; 0EA5903594EF4DADFF6812DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; }; + 0EBD611932725BD0D9F9E9A1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 0F8897FBD797A8C287075808 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; 0FE7C873F21FB9963F55E0FD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableObjectResizer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h"; sourceTree = "SOURCE_ROOT"; }; 10797BCF6AB6944C7FB2E608 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_BluetoothMidiDevicePairingDialogue.cpp"; path = "../../../../modules/juce_audio_utils/native/juce_linux_BluetoothMidiDevicePairingDialogue.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -269,7 +270,6 @@ 356F3858F9A4DE6055FAA59F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActiveXControlComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h"; sourceTree = "SOURCE_ROOT"; }; 3582770C043EBB6E67DBCE62 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inflate.h; path = "../../../../modules/juce_core/zip/zlib/inflate.h"; sourceTree = "SOURCE_ROOT"; }; 35C65A78610026BAA448D956 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Viewport.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3610BCE8F9B56531CFC35E07 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 365EC6C15E12BCBDD0657D0F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; 366EF1FAB22EAE0059C61C20 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; 36854C5E554CFF0CDE0CE3C6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -290,6 +290,7 @@ 392555C3ACC301829471BB99 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; }; 3926616EC56E25F66F6CD790 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterProcessLock.h"; path = "../../../../modules/juce_core/threads/juce_InterProcessLock.h"; sourceTree = "SOURCE_ROOT"; }; 3972CE07B664956A2998CFB5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "win_utf8_io.h"; path = "../../../../modules/juce_audio_formats/codecs/flac/win_utf8_io.h"; sourceTree = "SOURCE_ROOT"; }; + 39951617D26B13773E60BFC8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 3A13DA48EBDD0DCD7C18FE75 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jccolor.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jccolor.c"; sourceTree = "SOURCE_ROOT"; }; 3A17A2128C147903DAF8C7B6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TimeSliceThread.h"; path = "../../../../modules/juce_core/threads/juce_TimeSliceThread.h"; sourceTree = "SOURCE_ROOT"; }; 3A607B65328748D6F1D742FD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPlayHead.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPlayHead.h"; sourceTree = "SOURCE_ROOT"; }; @@ -423,6 +424,7 @@ 582FBB461EE1EB7CB6523F08 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeEditorComponent.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 584B4CCDAF7106E99AC52813 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_QuickTimeAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; 584E5E26ACA7AD527A7C6751 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdpostct.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdpostct.c"; sourceTree = "SOURCE_ROOT"; }; + 585A8231D1CB7C47FA6421E3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; 5895CBDE3C1717110102E430 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SliderPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; 58FC211C847065896BF74E4D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; }; 5906AD70A7E2AA3CEB98F5FE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CachedValue.h"; path = "../../../../modules/juce_data_structures/values/juce_CachedValue.h"; sourceTree = "SOURCE_ROOT"; }; @@ -723,6 +725,7 @@ 9AFA9168356B94F7B6383514 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPENote.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPENote.h"; sourceTree = "SOURCE_ROOT"; }; 9AFF4A0F14B8749DC0E0D4C5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; }; 9B6A795A588B873B421EA141 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_JSON.h"; path = "../../../../modules/juce_core/javascript/juce_JSON.h"; sourceTree = "SOURCE_ROOT"; }; + 9BF8D673836B293D70FB2A40 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 9C0EA946F5233DCA6D462CC1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../../../modules/juce_core/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; }; 9C66FAB8BEB89C9F359235AF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_UIViewComponentPeer.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; 9C8F8E92078570992957DF89 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1035,7 +1038,6 @@ E69D60F04BCEA7B1F039F157 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreAudio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; E6B57B097825330545DE5F94 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; E6D261C9F51AF0BE729403BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdmerge.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdmerge.c"; sourceTree = "SOURCE_ROOT"; }; - E70E79938BA521CADD5969F1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; E711C9ED44AC78BC687F2DE8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_basics.mm"; path = "../../JuceLibraryCode/juce_gui_basics.mm"; sourceTree = "SOURCE_ROOT"; }; E73D11EE1A91B746E05B594A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; }; E748AF5DD3ECF3F3B38BE624 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileChooserDialogBox.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1163,6 +1165,8 @@ BBDA2DD68415C10F0E4A2E7F = {isa = PBXGroup; children = ( AC4A50CFED2BAA67D69B4304, ); name = PluckedStringsDemo; sourceTree = ""; }; FFC8A7E00AB7793664792318 = {isa = PBXGroup; children = ( + 39951617D26B13773E60BFC8, + 9BF8D673836B293D70FB2A40, 6C925C01C9CE27D48B8D4F23, D0B644D77B9391EE809D5729, 1A338ED27F04799A114753A9, @@ -1489,12 +1493,13 @@ 00DE16C7A681D2B27139271C, E2B2428CBB8BF06CD4A23DF7, 00DE16C7A681D2B27139271C, ); name = "juce_audio_formats"; sourceTree = ""; }; - E64F9ED00CCF57B0567DD01D = {isa = PBXGroup; children = ( + 3CF68E13D284BC7C2B4F9CC1 = {isa = PBXGroup; children = ( 9639A177FA54F29024B9144A, DFE372DB89F74CFFF38F79F1, EABEAA187BB08079ADF9C71F, E2A0935487433A10A8839CCB, ); name = format; sourceTree = ""; }; - E62137DEFB52FA82239F8155 = {isa = PBXGroup; children = ( + EF040D89E07B355EB724FA58 = {isa = PBXGroup; children = ( + 0EBD611932725BD0D9F9E9A1, 9FE22FA506D161BA152CE6E4, 3EE734341645DBB78BA4A05B, B8DC9E6368B53B15909A65C7, @@ -1503,13 +1508,12 @@ 54420A7FCB25BAEEEB0FEEA0, B3CD2EAF0DAB67CFA880BF8A, 826E3E424F0A7BDF5FECE7F0, + 585A8231D1CB7C47FA6421E3, 09CF8D79F80BB15318B260CC, 237404D7EAAD696962C85B05, 92E9E50DCD5CC8113296C700, 6B5E4C82FF829907B7AAD9E3, ); name = "format_types"; sourceTree = ""; }; - F83C6BFC736E431166EE423B = {isa = PBXGroup; children = ( - 3610BCE8F9B56531CFC35E07, - E70E79938BA521CADD5969F1, + F77D98290F22A1FA9AC85F2C = {isa = PBXGroup; children = ( 3A607B65328748D6F1D742FD, 091FA27535E993FACA7E0FF9, A32EE20C70F0CF71D1C20A7C, @@ -1541,9 +1545,9 @@ 549EB2D372E93DD52A2B530C, BF8E69AF5C7E25E40C5EE291, ); name = utilities; sourceTree = ""; }; 9C7B8FD05619E353C4F00D95 = {isa = PBXGroup; children = ( - E64F9ED00CCF57B0567DD01D, - E62137DEFB52FA82239F8155, - F83C6BFC736E431166EE423B, + 3CF68E13D284BC7C2B4F9CC1, + EF040D89E07B355EB724FA58, + F77D98290F22A1FA9AC85F2C, 7B6728B0005B8FB7BA3EF3A3, 212F4ABE69E383D3A19B2CED, 4A448CCDA3A5973D256FA6AD, diff --git a/examples/PluckedStringsDemo/Builds/VisualStudio2013/PluckedStringsDemo.vcxproj b/examples/PluckedStringsDemo/Builds/VisualStudio2013/PluckedStringsDemo.vcxproj index 7c89ef7330..ae7c630fc1 100644 --- a/examples/PluckedStringsDemo/Builds/VisualStudio2013/PluckedStringsDemo.vcxproj +++ b/examples/PluckedStringsDemo/Builds/VisualStudio2013/PluckedStringsDemo.vcxproj @@ -130,6 +130,9 @@ + + true + true @@ -481,9 +484,6 @@ true - - true - true @@ -1634,6 +1634,7 @@ + @@ -1787,15 +1788,16 @@ + + - diff --git a/examples/PluckedStringsDemo/Builds/VisualStudio2013/PluckedStringsDemo.vcxproj.filters b/examples/PluckedStringsDemo/Builds/VisualStudio2013/PluckedStringsDemo.vcxproj.filters index a13c3ea238..d959130bc4 100644 --- a/examples/PluckedStringsDemo/Builds/VisualStudio2013/PluckedStringsDemo.vcxproj.filters +++ b/examples/PluckedStringsDemo/Builds/VisualStudio2013/PluckedStringsDemo.vcxproj.filters @@ -334,6 +334,9 @@ PluckedStringsDemo\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -703,9 +706,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -1974,6 +1974,9 @@ PluckedStringsDemo\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2433,6 +2436,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2448,6 +2454,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2457,9 +2466,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/PlugInSamples/Arpeggiator/Arpeggiator.jucer b/examples/PlugInSamples/Arpeggiator/Arpeggiator.jucer index aa1eaf2617..7a97993f26 100644 --- a/examples/PlugInSamples/Arpeggiator/Arpeggiator.jucer +++ b/examples/PlugInSamples/Arpeggiator/Arpeggiator.jucer @@ -2,7 +2,7 @@ Disabled EditAndContinue - c:\SDKs\VST3 SDK;..\..\JuceLibraryCode;c:\SDKs\AAX;c:\SDKs\AAX\Interfaces;c:\SDKs\AAX\Interfaces\ACF;..\..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;JucePlugin_AAXLibs_path="c:\\SDKs\\AAX\\Libs";WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions) + ..\..\JuceLibraryCode;..\..\..\..\..\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -85,14 +85,6 @@ true $(IntDir)\Arpeggiator.bsc - - copy /Y "$(OutDir)\$(TargetFileName)" "$(OutDir)\$(TargetName).vst3" -mkdir "$(OutDir)\$(TargetName).aaxplugin" -mkdir "$(OutDir)\$(TargetName).aaxplugin\Contents" -mkdir "$(OutDir)\$(TargetName).aaxplugin\Contents\Win32" -copy /Y "$(OutDir)\$(TargetFileName)" "$(OutDir)\$(TargetName).aaxplugin\Contents\Win32\$(TargetName).aaxplugin" -c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\Contents\Win32" "c:\SDKs\AAX\Utilities\PlugIn.ico" - @@ -104,8 +96,8 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ Full - c:\SDKs\VST3 SDK;..\..\JuceLibraryCode;c:\SDKs\AAX;c:\SDKs\AAX\Interfaces;c:\SDKs\AAX\Interfaces\ACF;..\..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;JucePlugin_AAXLibs_path="c:\\SDKs\\AAX\\Libs";WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions) + ..\..\JuceLibraryCode;..\..\..\..\..\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions) MultiThreadedDLL true @@ -135,17 +127,12 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ true $(IntDir)\Arpeggiator.bsc - - copy /Y "$(OutDir)\$(TargetFileName)" "$(OutDir)\$(TargetName).vst3" -mkdir "$(OutDir)\$(TargetName).aaxplugin" -mkdir "$(OutDir)\$(TargetName).aaxplugin\Contents" -mkdir "$(OutDir)\$(TargetName).aaxplugin\Contents\Win32" -copy /Y "$(OutDir)\$(TargetFileName)" "$(OutDir)\$(TargetName).aaxplugin\Contents\Win32\$(TargetName).aaxplugin" -c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\Contents\Win32" "c:\SDKs\AAX\Utilities\PlugIn.ico" - + + true + true @@ -622,9 +609,6 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ true - - true - true @@ -1798,10 +1782,8 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ - - @@ -1814,6 +1796,7 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ + @@ -2002,7 +1985,6 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ - @@ -2010,22 +1992,22 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ - + + - @@ -2466,6 +2448,7 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ + diff --git a/examples/PlugInSamples/Arpeggiator/Builds/VisualStudio2015/Arpeggiator.vcxproj.filters b/examples/PlugInSamples/Arpeggiator/Builds/VisualStudio2015/Arpeggiator.vcxproj.filters index 629225c6a8..b273a56364 100644 --- a/examples/PlugInSamples/Arpeggiator/Builds/VisualStudio2015/Arpeggiator.vcxproj.filters +++ b/examples/PlugInSamples/Arpeggiator/Builds/VisualStudio2015/Arpeggiator.vcxproj.filters @@ -385,6 +385,9 @@ Arpeggiator\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -904,9 +907,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2182,18 +2182,12 @@ Juce Library Code - - Juce Library Code - Juce Library Code Juce Library Code - - Juce Library Code - Juce Library Code @@ -2226,6 +2220,9 @@ + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2790,9 +2787,6 @@ Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses - - Juce Modules\juce_audio_plugin_client\AU - Juce Modules\juce_audio_plugin_client\RTAS @@ -2814,9 +2808,6 @@ Juce Modules\juce_audio_plugin_client\utility - - Juce Modules\juce_audio_plugin_client\utility - Juce Modules\juce_audio_plugin_client\utility @@ -2835,6 +2826,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2850,6 +2844,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2859,9 +2856,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -4178,6 +4172,9 @@ Juce Modules\juce_audio_plugin_client\AU + + Juce Modules\juce_audio_plugin_client + Juce Modules\juce_audio_plugin_client diff --git a/examples/PlugInSamples/Arpeggiator/JuceLibraryCode/AppConfig.h b/examples/PlugInSamples/Arpeggiator/JuceLibraryCode/AppConfig.h index 264ce4e749..a2daea63b7 100644 --- a/examples/PlugInSamples/Arpeggiator/JuceLibraryCode/AppConfig.h +++ b/examples/PlugInSamples/Arpeggiator/JuceLibraryCode/AppConfig.h @@ -235,7 +235,7 @@ #define JucePlugin_Build_VST 1 #endif #ifndef JucePlugin_Build_VST3 - #define JucePlugin_Build_VST3 1 + #define JucePlugin_Build_VST3 0 #endif #ifndef JucePlugin_Build_AU #define JucePlugin_Build_AU 1 @@ -247,7 +247,7 @@ #define JucePlugin_Build_RTAS 0 #endif #ifndef JucePlugin_Build_AAX - #define JucePlugin_Build_AAX 1 + #define JucePlugin_Build_AAX 0 #endif #ifndef JucePlugin_Build_STANDALONE #define JucePlugin_Build_STANDALONE 0 diff --git a/examples/PlugInSamples/Arpeggiator/Source/Arpeggiator.cpp b/examples/PlugInSamples/Arpeggiator/Source/Arpeggiator.cpp index 4414c71a30..4a0156ca31 100644 --- a/examples/PlugInSamples/Arpeggiator/Source/Arpeggiator.cpp +++ b/examples/PlugInSamples/Arpeggiator/Source/Arpeggiator.cpp @@ -34,22 +34,13 @@ public: //============================================================================== Arpeggiator() + : AudioProcessor (BusesProperties()) // add no audio buses at all { addParameter (speed = new AudioParameterFloat ("speed", "Arpeggiator Speed", 0.0, 1.0, 0.5)); } ~Arpeggiator() {} - //============================================================================== - bool setPreferredBusArrangement (bool isInputBus, int busIndex, - const AudioChannelSet& preferred) override - { - ignoreUnused (isInputBus, busIndex, preferred); - - // we don't support any audio buses - return false; - } - //============================================================================== void prepareToPlay (double sampleRate, int samplesPerBlock) override { @@ -108,6 +99,9 @@ public: time = (time + numSamples) % noteDuration; } + //============================================================================== + bool isMidiEffect() const override { return true; } + //============================================================================== AudioProcessorEditor* createEditor() override { return new GenericEditor (*this); } bool hasEditor() const override { return true; } @@ -115,8 +109,8 @@ public: //============================================================================== const String getName() const override { return "Arpeggiator"; } - bool acceptsMidi() const override { return false; } - bool producesMidi() const override { return false; } + bool acceptsMidi() const override { return true; } + bool producesMidi() const override { return true; } double getTailLengthSeconds() const override { return 0; } //============================================================================== diff --git a/examples/PlugInSamples/GainPlugIn/Builds/MacOSX/GainPlugIn.xcodeproj/project.pbxproj b/examples/PlugInSamples/GainPlugIn/Builds/MacOSX/GainPlugIn.xcodeproj/project.pbxproj index 38c10cc8c7..a5245604f8 100644 --- a/examples/PlugInSamples/GainPlugIn/Builds/MacOSX/GainPlugIn.xcodeproj/project.pbxproj +++ b/examples/PlugInSamples/GainPlugIn/Builds/MacOSX/GainPlugIn.xcodeproj/project.pbxproj @@ -9,7 +9,6 @@ 0F026B7B55C2BE2C84B2DAB4 = {isa = PBXBuildFile; fileRef = 169146CE0C9730602B3D31BD; }; AB55966A405A5A2262B2258C = {isa = PBXBuildFile; fileRef = E5C2175FF96CED1519F2B7D6; }; 068A921912EBCF967623E359 = {isa = PBXBuildFile; fileRef = F8D93BA03DB14514E2F9D007; }; - CE5290A38E4167322311FE73 = {isa = PBXBuildFile; fileRef = C43A527A45129CF421296BD0; }; 221F64B3B662038BA2BF5FC3 = {isa = PBXBuildFile; fileRef = 074F1E0FAFBD4B127B869BC2; }; FA171B2FEC24575B5157EB15 = {isa = PBXBuildFile; fileRef = 71B73129FAEF3B7CB3FF6993; }; 46AB8BC7FA7E34563E5F005C = {isa = PBXBuildFile; fileRef = 9D6BD8DE6FC16E28FE2169F0; }; @@ -31,7 +30,6 @@ BE1CCB2BA25C1B9CC93BD180 = {isa = PBXBuildFile; fileRef = 2A42EB4E6808C916CD805B55; }; 6A823DA60FD178B0AE4F7795 = {isa = PBXBuildFile; fileRef = 539D8FB917601AE0FEF2EDD0; }; 6859170B30F156B4628F7476 = {isa = PBXBuildFile; fileRef = 3F62CC0D964ADA2C5FEE8780; }; - 920289CA43FF41424E0F0AE9 = {isa = PBXBuildFile; fileRef = 09EBA9B824955D1E0C3FFD47; }; 27BAA78181CB9EA282A6AC64 = {isa = PBXBuildFile; fileRef = CD8FCD56FD26EAE31AC22952; }; 7EFB529B9EA74539375A96E0 = {isa = PBXBuildFile; fileRef = 9F805238C9CE8C52469C6355; }; 339CCDD31A03CAA2BD693844 = {isa = PBXBuildFile; fileRef = A0F05FB7BDBD3AFAA1004003; }; @@ -100,7 +98,6 @@ 08D82B3EB51F3BD62279463D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WebBrowserComponent.h"; path = "../../../../../modules/juce_gui_extra/misc/juce_WebBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; 094D7AD9353A04229B7268D7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; 09AA3BA21CA8D651D23CDD20 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = res0.c; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/res0.c"; sourceTree = "SOURCE_ROOT"; }; - 09EBA9B824955D1E0C3FFD47 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AAX.mm"; path = "../../JuceLibraryCode/juce_audio_plugin_client_AAX.mm"; sourceTree = "SOURCE_ROOT"; }; 0A4DABB2172A1DA1F32B14F7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel.h"; path = "../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; 0A91FE71C03112448C0D92B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SHA256.h"; path = "../../../../../modules/juce_cryptography/hashing/juce_SHA256.h"; sourceTree = "SOURCE_ROOT"; }; 0AA92ADED1984DA556BF1ED5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAMutex.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAMutex.h"; sourceTree = "SOURCE_ROOT"; }; @@ -666,6 +663,7 @@ 7994DDE43DEA787F20F3F49A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../../../modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; 7A1318088B0D8CB9D9EA8C48 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; 7A493F619E3F23E831414EDC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../../../../modules/juce_graphics/image_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7A88A30488FC54BC991C2C02 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; 7AC84CB7C43F47FCE3CEC890 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_events.mm"; path = "../../JuceLibraryCode/juce_events.mm"; sourceTree = "SOURCE_ROOT"; }; 7B33DF98BB4976C787FCA2A4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ComponentBase.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/ComponentBase.h"; sourceTree = "SOURCE_ROOT"; }; 7B4B931B90ADD3ACF741A4E3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Midi.cpp"; path = "../../../../../modules/juce_audio_devices/native/juce_android_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -756,7 +754,6 @@ 8C68CCB04F23709D332A85A3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTPluginFormat.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; 8C6C84652D446F0FA1C71637 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectWriteTypeface.cpp"; path = "../../../../../modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; 8C96B65675D85EE1DC3E075C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPress.cpp"; path = "../../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8CABBDFF3D48FA622F561D56 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../../modules/juce_audio_plugin_client/AU/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 8CD7B01A646341ACCBB0A732 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReaderSource.h"; path = "../../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.h"; sourceTree = "SOURCE_ROOT"; }; 8CE9CC147B5ACCAFF12E599F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEInstrument.cpp"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPEInstrument.cpp"; sourceTree = "SOURCE_ROOT"; }; 8CFA7D0D77CB2381C95ECDC6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jconfig.h; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jconfig.h"; sourceTree = "SOURCE_ROOT"; }; @@ -798,6 +795,7 @@ 95C7AB7104F78ADD7CE55E2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutResizerBar.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp"; sourceTree = "SOURCE_ROOT"; }; 95E2D4C4A02FA14CE26392EF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../../../../modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; 95F5B0723C24598C877C8DAA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WavAudioFormat.cpp"; path = "../../../../../modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 95F6031C35A1D094A2A2624F = {isa = PBXFileReference; lastKnownFileType = file.r; name = AUResources.r; path = "../../../../../modules/juce_audio_plugin_client/AUResources.r"; sourceTree = "SOURCE_ROOT"; }; 95FC2D683A0E0F41FAD02E8B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsDisplayComponent.h"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h"; sourceTree = "SOURCE_ROOT"; }; 96ABA944DF943A3CD8ED8F27 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jccolor.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jccolor.c"; sourceTree = "SOURCE_ROOT"; }; 9740A9390ECA80CAA92382D4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InterprocessConnection.h"; path = "../../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h"; sourceTree = "SOURCE_ROOT"; }; @@ -821,7 +819,6 @@ 9AD03390BB5791C7C1A74655 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextDiff.h"; path = "../../../../../modules/juce_core/text/juce_TextDiff.h"; sourceTree = "SOURCE_ROOT"; }; 9AD0E63EA728EFA10E465DA8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pnginfo.h; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pnginfo.h"; sourceTree = "SOURCE_ROOT"; }; 9AEC23F3D59EE86B7C9BA366 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorEditor.h"; path = "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; - 9B41DFBF585A9C722050767C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginBusUtilities.h"; path = "../../../../../modules/juce_audio_plugin_client/utility/juce_PluginBusUtilities.h"; sourceTree = "SOURCE_ROOT"; }; 9B5CE97BAC0AAD8EEAF75ABF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CarbonVisibility.h"; path = "../../../../../modules/juce_audio_plugin_client/utility/juce_CarbonVisibility.h"; sourceTree = "SOURCE_ROOT"; }; 9C0EC72DF39C49F84958CCE0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../../../../modules/juce_core/javascript/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; }; 9C317F8D5362324F67C5C044 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LiveConstantEditor.h"; path = "../../../../../modules/juce_gui_extra/misc/juce_LiveConstantEditor.h"; sourceTree = "SOURCE_ROOT"; }; @@ -829,7 +826,6 @@ 9C82E908622CB0CAC2B1469B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CarbonEventHandler.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CarbonEventHandler.h"; sourceTree = "SOURCE_ROOT"; }; 9C8C01A4D3DD95FC110686B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; }; 9D16C4F30F042930E0D9EFB3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_RTAS_utils.mm"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_utils.mm"; sourceTree = "SOURCE_ROOT"; }; - 9D1C58BBAA0B7F70D6EB7724 = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-AAX.plist"; path = "Info-AAX.plist"; sourceTree = "SOURCE_ROOT"; }; 9D34A2CF22F94CB8E1E3E93C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../../../modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; 9D5724D3AB9FE56E2AD0B93B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitrate.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/bitrate.h"; sourceTree = "SOURCE_ROOT"; }; 9D6BD8DE6FC16E28FE2169F0 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; @@ -837,7 +833,6 @@ 9D75C7F0055E9976C989D769 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BlowFish.h"; path = "../../../../../modules/juce_cryptography/encryption/juce_BlowFish.h"; sourceTree = "SOURCE_ROOT"; }; 9DD46A24ECE14E75B1C158CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = smallft.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.h"; sourceTree = "SOURCE_ROOT"; }; 9E0CDFA686934102489C5083 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9E16DD9C4AA8FD94DF161ECF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 9E2A17A739BE8605D8C13CFD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUBaseHelper.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBaseHelper.h"; sourceTree = "SOURCE_ROOT"; }; 9E4C67EE120E7FE1F994CFB0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XMLCodeTokeniser.cpp"; path = "../../../../../modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.cpp"; sourceTree = "SOURCE_ROOT"; }; 9E8230460D5C4094B17679B1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; @@ -969,6 +964,7 @@ BB36CEA13A709AB5A9474E51 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniserFunctions.h"; path = "../../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h"; sourceTree = "SOURCE_ROOT"; }; BB577DFECBF45C9FA42A79A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativePointPath.cpp"; path = "../../../../../modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp"; sourceTree = "SOURCE_ROOT"; }; BB5F8B6F5F3E6AADB448DCB5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; }; + BB6A39C9CA3BF196E20548BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; BB877598B32E54D42661CFF3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BooleanPropertyComponent.h"; path = "../../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; BB8C3D7D3297D944BF1D3378 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdapistd.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jdapistd.c"; sourceTree = "SOURCE_ROOT"; }; BB969E05025ABE5B3BFA9430 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1106,6 +1102,7 @@ D64812D922FF1D6C33CDC6DF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = md5.c; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/md5.c"; sourceTree = "SOURCE_ROOT"; }; D6E7F3951FC4EA8338F2485C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; D70B910003F47D2B45347B66 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; }; + D70D19852F567CDC77C60258 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; D783707AC81F40FE49620182 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jmemnobs.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jmemnobs.c"; sourceTree = "SOURCE_ROOT"; }; D79AD5A507E39490F4C0DA79 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF16.h"; path = "../../../../../modules/juce_core/text/juce_CharPointer_UTF16.h"; sourceTree = "SOURCE_ROOT"; }; D7B5D9E6C0F17D46BF8FB23C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../../../../modules/juce_graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1166,6 +1163,7 @@ E221C545F4A08B1422CC6708 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../../../modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; }; E22A8C6006C3BD972035B132 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../../../../modules/juce_core/native/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; E2C54EC051B9509356592AE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPEZone.h"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPEZone.h"; sourceTree = "SOURCE_ROOT"; }; + E32D756B2FBB748E6BA6F534 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; E394CA84B664710B3771ACAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V3.cpp"; path = "../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp"; sourceTree = "SOURCE_ROOT"; }; E3958C99991C2CDD36DB609D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormat.h"; path = "../../../../../modules/juce_audio_formats/format/juce_AudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; E3B06A2E7B68EB444FF7D2CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_cryptography.cpp"; path = "../../../../../modules/juce_cryptography/juce_cryptography.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1246,42 +1244,41 @@ F16850088BAC467F2DDF47B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = all.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/all.h"; sourceTree = "SOURCE_ROOT"; }; F18474D1FC76E023231638CA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core.mm"; path = "../../JuceLibraryCode/juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; F19532C9A9B834EF732E2C52 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEZoneLayout.cpp"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPEZoneLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; - F1A0F0881D3C62C8E705120E = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-VST3.plist"; path = "Info-VST3.plist"; sourceTree = "SOURCE_ROOT"; }; - F1B4EC755365729CF9850E27 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; F1B858A448D0BA6929408B97 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jchuff.h; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jchuff.h"; sourceTree = "SOURCE_ROOT"; }; F1C1D72B4B911227DF608946 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModifierKeys.cpp"; path = "../../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp"; sourceTree = "SOURCE_ROOT"; }; F2317300350CF81B3EC383A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = transupp.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/transupp.c"; sourceTree = "SOURCE_ROOT"; }; - F28941FBBB1C31040CDFEA67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../../../../modules/juce_gui_basics/widgets/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; }; F2BA131A7254C150C15D9306 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "lpc_flac.c"; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/lpc_flac.c"; sourceTree = "SOURCE_ROOT"; }; F30FCD23E36D9A46A5A69AA3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngget.c; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngget.c"; sourceTree = "SOURCE_ROOT"; }; F3500A2990DBE4DEBE4405B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; F3B8EEB02E5588D99021DD10 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AiffAudioFormat.h"; path = "../../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; F3BFC5ADFAD663890D658894 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferingAudioSource.h"; path = "../../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; F3FC0F1212CEA1EE597AF0DC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_opengl.cpp"; path = "../../../../../modules/juce_opengl/juce_opengl.cpp"; sourceTree = "SOURCE_ROOT"; }; - F4D0076B169A0FEB870639F1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; }; - F507AE61AF55B2101383B1E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectShowComponent.h"; path = "../../../../../modules/juce_video/playback/juce_DirectShowComponent.h"; sourceTree = "SOURCE_ROOT"; }; F527FEA0852AA21984AD9F47 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; }; F549ECCF4D91FC7A30105297 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../../../../modules/juce_core/network/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; }; - F5520ECBE03E369AD2B56550 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyMappingEditorComponent.cpp"; path = "../../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; F5668CB3DFA61B679030C25F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; + F5C623942E20C541382097E9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../../../modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + F6AC635E17C2745BA801256F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; + F8D93BA03DB14514E2F9D007 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GainPlugIn.component; sourceTree = "BUILT_PRODUCTS_DIR"; }; + 074F1E0FAFBD4B127B869BC2 = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libGainPlugIn.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; + F1A0F0881D3C62C8E705120E = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-VST3.plist"; path = "Info-VST3.plist"; sourceTree = "SOURCE_ROOT"; }; + F1B4EC755365729CF9850E27 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + F28941FBBB1C31040CDFEA67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../../../../modules/juce_gui_basics/widgets/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; }; + F405F19EE310FBC6BB4A1472 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAXException.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAXException.h"; sourceTree = "SOURCE_ROOT"; }; + F4D0076B169A0FEB870639F1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlexItem.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexItem.h"; sourceTree = "SOURCE_ROOT"; }; + F507AE61AF55B2101383B1E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectShowComponent.h"; path = "../../../../../modules/juce_video/playback/juce_DirectShowComponent.h"; sourceTree = "SOURCE_ROOT"; }; + F5520ECBE03E369AD2B56550 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyMappingEditorComponent.cpp"; path = "../../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; F56D86C6CA26D7CAC01053B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageComponent.h"; path = "../../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.h"; sourceTree = "SOURCE_ROOT"; }; F5A89587D43966DDC7C9F4BC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPress.h"; path = "../../../../../modules/juce_gui_basics/keyboard/juce_KeyPress.h"; sourceTree = "SOURCE_ROOT"; }; F5A96B9783E559CB9FB56B93 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GZIPDecompressorInputStream.cpp"; path = "../../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; F5BA7AF6CEAD6AEB13F0FBA1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; }; - F5C623942E20C541382097E9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../../../modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; F5EAFB838EC3E83930E9C8F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jddctmgr.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jddctmgr.c"; sourceTree = "SOURCE_ROOT"; }; - F6AC635E17C2745BA801256F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; + F6D0C31C49847196CB56EF7C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core.mm"; path = "../../../../../modules/juce_core/juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; F6D61FC781A1532ACF955A56 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserListener.h"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h"; sourceTree = "SOURCE_ROOT"; }; + F6F268E5CE4AC0C5EFF2A414 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUCarbonViewControl.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewControl.h"; sourceTree = "SOURCE_ROOT"; }; F73E61CD3ACE30495293E399 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcphuff.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jcphuff.c"; sourceTree = "SOURCE_ROOT"; }; F758A3A014E70D7F75D889D1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; }; - F7837342DC31305E98733379 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorGraph.cpp"; path = "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp"; sourceTree = "SOURCE_ROOT"; }; - F8D93BA03DB14514E2F9D007 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GainPlugIn.component; sourceTree = "BUILT_PRODUCTS_DIR"; }; - C43A527A45129CF421296BD0 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GainPlugIn.aaxplugin; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 074F1E0FAFBD4B127B869BC2 = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libGainPlugIn.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; - F405F19EE310FBC6BB4A1472 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAXException.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAXException.h"; sourceTree = "SOURCE_ROOT"; }; - F6D0C31C49847196CB56EF7C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core.mm"; path = "../../../../../modules/juce_core/juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; - F6F268E5CE4AC0C5EFF2A414 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUCarbonViewControl.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewControl.h"; sourceTree = "SOURCE_ROOT"; }; F76BAD45163B80F58A11FE42 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatManager.cpp"; path = "../../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; + F7837342DC31305E98733379 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorGraph.cpp"; path = "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp"; sourceTree = "SOURCE_ROOT"; }; F79776F078375AA287A24AB1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_video.mm"; path = "../../JuceLibraryCode/juce_video.mm"; sourceTree = "SOURCE_ROOT"; }; F7BB750285C1A56C05A6B437 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngconf.h"; sourceTree = "SOURCE_ROOT"; }; F7FA3CA65C2B371C902CA9EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../../../modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1306,7 +1303,6 @@ FA8D7F0CB75953BD21B37929 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLContext.cpp"; path = "../../../../../modules/juce_opengl/opengl/juce_OpenGLContext.cpp"; sourceTree = "SOURCE_ROOT"; }; FA905D2AD00F1A5ED9D55D36 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertiesFile.h"; path = "../../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.h"; sourceTree = "SOURCE_ROOT"; }; FAD1FB98450C939FAB191F42 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; - FB543B91C7E0C32D35F9936B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; FB56059A51DF315A718B19D4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdinput.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jdinput.c"; sourceTree = "SOURCE_ROOT"; }; FB923D7CA027BA4C19CE393B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_44.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44.h"; sourceTree = "SOURCE_ROOT"; }; FB954DE9B8BEC80A9B7E33DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_basics.mm"; path = "../../../../../modules/juce_gui_basics/juce_gui_basics.mm"; sourceTree = "SOURCE_ROOT"; }; @@ -1335,6 +1331,8 @@ A1FE33C49F2701A6520F72A4 = {isa = PBXGroup; children = ( C8F3DE8D004443AC01CDFCAE, ); name = GainPlugIn; sourceTree = ""; }; FD9FC27F2AE903B815E9E0E8 = {isa = PBXGroup; children = ( + BB6A39C9CA3BF196E20548BD, + D70D19852F567CDC77C60258, E93AD18DA3D2B5074595F805, B1D2A0DC0B0B8F43AF0635C1, 237733D1EA87B4C27665E50C, @@ -1661,7 +1659,7 @@ 18B7B5B0C06A1C96ED45C9AB, 56FF5DCB746A2F7485406F63, 18B7B5B0C06A1C96ED45C9AB, ); name = "juce_audio_formats"; sourceTree = ""; }; - F1C57B1BE7D3A85714FB7C7A = {isa = PBXGroup; children = ( + 8B5E3655F615AAF2C29FC22A = {isa = PBXGroup; children = ( EEB2A8271DE160CC76165242, B41DB1D9877BC61AB0558A69, ); name = AAX; sourceTree = ""; }; AB9348DF000622E4B2C60AD4 = {isa = PBXGroup; children = ( @@ -1723,10 +1721,9 @@ 5E148B6D2D4D3ACADBD369BA, ); name = CoreAudioUtilityClasses; sourceTree = ""; }; F2D5F877258DB2BBF0433F23 = {isa = PBXGroup; children = ( AB9348DF000622E4B2C60AD4, - 8CABBDFF3D48FA622F561D56, B15D003DE2F4E963EC111711, 8782AADF74783EA3DD066529, ); name = AU; sourceTree = ""; }; - 1DDAAEC5B6DB8099FC652515 = {isa = PBXGroup; children = ( + F38605076B8BF4EBE8A9D71F = {isa = PBXGroup; children = ( B7EC6979B78232E97C67586D, 2B7C784CF333CA6BEEF5038A, CF608BF804CB06BCBB51B9C2, @@ -1734,32 +1731,31 @@ 6701AB4D2F5DAD2EA72ACFE9, DC55FBABEB3A839B6602D678, DBF11B9083F40C0C849B9302, ); name = RTAS; sourceTree = ""; }; - ABE3EC02D9B5D528025BF690 = {isa = PBXGroup; children = ( + FF48527F1599C91933F2BB08 = {isa = PBXGroup; children = ( 43B51F79EFF2E9673AA1BCE6, 8323AB8EF5430A81A4FDD26E, ); name = Standalone; sourceTree = ""; }; - AAB881B99070695DB74EB217 = {isa = PBXGroup; children = ( + EB0E3ADB9BCE975012AC8624 = {isa = PBXGroup; children = ( 9B5CE97BAC0AAD8EEAF75ABF, 38687DB2FEC47B8E4826346E, E219774D186DF70D694D2768, 2BC8F8214792631A55C86182, BE5CCCF1AF368672C05133F0, - 9B41DFBF585A9C722050767C, 9F56E1F9CF75D555C677A38D, E9FEFC46FF2B51B8C3A520F4, 21F8A643A1D07AE29337D139, ); name = utility; sourceTree = ""; }; - D78074DEDA44278DDA6376E6 = {isa = PBXGroup; children = ( + 61918B5C81D3B75E3E043E12 = {isa = PBXGroup; children = ( 9548631628595F1576CD7B73, C3D43F992D8AAA5EF9D23288, ); name = VST; sourceTree = ""; }; - C02CF34EACB3A93904174BD4 = {isa = PBXGroup; children = ( + 9C81895B79C248126CA96CD5 = {isa = PBXGroup; children = ( 8676D218DB100E6B4636A82E, ); name = VST3; sourceTree = ""; }; F7173AE77C51F8BD4B4476AC = {isa = PBXGroup; children = ( - F1C57B1BE7D3A85714FB7C7A, + 8B5E3655F615AAF2C29FC22A, F2D5F877258DB2BBF0433F23, - 1DDAAEC5B6DB8099FC652515, - ABE3EC02D9B5D528025BF690, - AAB881B99070695DB74EB217, - D78074DEDA44278DDA6376E6, - C02CF34EACB3A93904174BD4, + F38605076B8BF4EBE8A9D71F, + FF48527F1599C91933F2BB08, + EB0E3ADB9BCE975012AC8624, + 61918B5C81D3B75E3E043E12, + 9C81895B79C248126CA96CD5, B5F601E64CCEDC477481A4ED, BBBE3DABDB9284A6397CE7B8, FEDE864FABF0E3C4883CF664, @@ -1779,12 +1775,13 @@ 56D1A4956C00A125A6772AF9, 0B5112493545E822ED5CAB38, B5F601E64CCEDC477481A4ED, ); name = "juce_audio_plugin_client"; sourceTree = ""; }; - DC60B9DD7D58AF5115E6E77D = {isa = PBXGroup; children = ( + 4E6D38CDC8F873F9B92AA25A = {isa = PBXGroup; children = ( 8978DDECC8749C80F3C959C6, E877FE89092942CF21E4EC77, 75F9EE2CA69812F94F813F00, 2CA124DED3BC606AF1A3A15F, ); name = format; sourceTree = ""; }; - 0399C83FFCC7CAC5B1A58E63 = {isa = PBXGroup; children = ( + 21D264C9FD2F5E802B2172E8 = {isa = PBXGroup; children = ( + E32D756B2FBB748E6BA6F534, B5D4DB73568113270FAA6E28, A815FDA15080EB5374693B3C, 29BC321A44EEE9AD6D3184B8, @@ -1793,13 +1790,12 @@ 3E750A56336FE91FE4190D0B, CE57E03FD67001AF17AE9348, 115075E87FFDE3A0562DAB11, + 7A88A30488FC54BC991C2C02, 1708A4A271D6457F239F1981, B480AA30CA4A3E925CD4D7BA, 8BE1CAAB600CECDD6390B937, 8C68CCB04F23709D332A85A3, ); name = "format_types"; sourceTree = ""; }; - B6605B3CCE34B5362E97AC55 = {isa = PBXGroup; children = ( - FB543B91C7E0C32D35F9936B, - 9E16DD9C4AA8FD94DF161ECF, + 70A026102E138757CCC9E60D = {isa = PBXGroup; children = ( AFDF57386DA66E87DABD6E76, DA7D3EB865447AC849541886, 30BE36DBBC172E9A9D70A6FA, @@ -1831,9 +1827,9 @@ E447A920E1B94499D9CD8007, 37CC2B12CFD3D4CB4295C7FA, ); name = utilities; sourceTree = ""; }; 2EDCD855F108DE8D7599C742 = {isa = PBXGroup; children = ( - DC60B9DD7D58AF5115E6E77D, - 0399C83FFCC7CAC5B1A58E63, - B6605B3CCE34B5362E97AC55, + 4E6D38CDC8F873F9B92AA25A, + 21D264C9FD2F5E802B2172E8, + 70A026102E138757CCC9E60D, 33CBFEB5F3FE009018034328, 7630C889BDA939A6A2109BAE, 15C342AEE8864E35F6E73D57, @@ -2830,7 +2826,6 @@ 2A42EB4E6808C916CD805B55, 539D8FB917601AE0FEF2EDD0, 3F62CC0D964ADA2C5FEE8780, - 09EBA9B824955D1E0C3FFD47, CD8FCD56FD26EAE31AC22952, 9F805238C9CE8C52469C6355, A0F05FB7BDBD3AFAA1004003, @@ -2852,7 +2847,6 @@ 909354451447E566493F48C1, F1A0F0881D3C62C8E705120E, EDFE3B976573F01C8D3AA486, - 9D1C58BBAA0B7F70D6EB7724, E13512F9451169A200CA63BF, ); name = Resources; sourceTree = ""; }; 00DE399BF0EF1D2BB5C99DF6 = {isa = PBXGroup; children = ( 71B73129FAEF3B7CB3FF6993, @@ -2873,7 +2867,6 @@ 169146CE0C9730602B3D31BD, E5C2175FF96CED1519F2B7D6, F8D93BA03DB14514E2F9D007, - C43A527A45129CF421296BD0, 074F1E0FAFBD4B127B869BC2, ); name = Products; sourceTree = ""; }; 807311746F9F870D03BE88D9 = {isa = PBXGroup; children = ( BF909DFBC9B899C6119F556B, @@ -2910,7 +2903,7 @@ "JUCE_APP_VERSION_HEX=0x10000", ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GENERATE_PKGINFO_FILE = YES; - HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "~/SDKs/AAX", "~/SDKs/AAX/Interfaces", "~/SDKs/AAX/Interfaces/ACF", "../../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../../modules", "$(inherited)"); INFOPLIST_FILE = Info-VST.plist; INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST/"; LIBRARY_STYLE = Bundle; @@ -2947,7 +2940,7 @@ GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GENERATE_PKGINFO_FILE = YES; - HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "~/SDKs/AAX", "~/SDKs/AAX/Interfaces", "~/SDKs/AAX/Interfaces/ACF", "../../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../../modules", "$(inherited)"); INFOPLIST_FILE = Info-VST.plist; INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST/"; LIBRARY_STYLE = Bundle; @@ -2983,7 +2976,7 @@ "JUCE_APP_VERSION_HEX=0x10000", ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GENERATE_PKGINFO_FILE = YES; - HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "~/SDKs/AAX", "~/SDKs/AAX/Interfaces", "~/SDKs/AAX/Interfaces/ACF", "../../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../../modules", "$(inherited)"); INFOPLIST_FILE = Info-VST3.plist; INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST3/"; LIBRARY_STYLE = Bundle; @@ -3020,7 +3013,7 @@ GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GENERATE_PKGINFO_FILE = YES; - HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "~/SDKs/AAX", "~/SDKs/AAX/Interfaces", "~/SDKs/AAX/Interfaces/ACF", "../../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../../modules", "$(inherited)"); INFOPLIST_FILE = Info-VST3.plist; INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST3/"; LIBRARY_STYLE = Bundle; @@ -3056,7 +3049,7 @@ "JUCE_APP_VERSION_HEX=0x10000", ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GENERATE_PKGINFO_FILE = YES; - HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "~/SDKs/AAX", "~/SDKs/AAX/Interfaces", "~/SDKs/AAX/Interfaces/ACF", "../../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../../modules", "$(inherited)"); INFOPLIST_FILE = Info-AU.plist; INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/"; LIBRARY_STYLE = Bundle; @@ -3094,7 +3087,7 @@ GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GENERATE_PKGINFO_FILE = YES; - HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "~/SDKs/AAX", "~/SDKs/AAX/Interfaces", "~/SDKs/AAX/Interfaces/ACF", "../../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../../modules", "$(inherited)"); INFOPLIST_FILE = Info-AU.plist; INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/"; LIBRARY_STYLE = Bundle; @@ -3106,81 +3099,6 @@ PRODUCT_BUNDLE_IDENTIFIER = com.ROLI.GainPlugIn; SDKROOT_ppc = macosx10.5; WRAPPER_EXTENSION = component; }; name = Release; }; - 71BC79A3E5FEBDB257DE068E = {isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_LINK_OBJC_RUNTIME = NO; - COMBINE_HIDPI_IMAGES = YES; - CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)"; - COPY_PHASE_STRIP = NO; - DEPLOYMENT_LOCATION = YES; - DSTROOT = /; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "_DEBUG=1", - "DEBUG=1", - "JucePlugin_Build_VST=0", - "JucePlugin_Build_VST3=0", - "JucePlugin_Build_AU=0", - "JucePlugin_Build_AUv3=0", - "JucePlugin_Build_RTAS=0", - "JucePlugin_Build_AAX=1", - "JucePlugin_Build_Standalone=0", - "JUCER_XCODE_MAC_F6D2F4CF=1", - "JUCE_APP_VERSION=1.0.0", - "JUCE_APP_VERSION_HEX=0x10000", ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GENERATE_PKGINFO_FILE = YES; - HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "~/SDKs/AAX", "~/SDKs/AAX/Interfaces", "~/SDKs/AAX/Interfaces/ACF", "../../../../../modules", "$(inherited)"); - INFOPLIST_FILE = Info-AAX.plist; - INSTALL_PATH = "/Library/Application Support/Avid/Audio/Plug-Ins/"; - LIBRARY_SEARCH_PATHS = ("$(inherited)", "\"$(HOME)/SDKs/AAX/Libs/Debug\""); - LIBRARY_STYLE = Bundle; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; - OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion"; - OTHER_LDFLAGS = "-bundle -lAAXLibrary -lGainPlugIn"; - PRODUCT_BUNDLE_IDENTIFIER = com.ROLI.GainPlugIn; - SDKROOT_ppc = macosx10.5; - WRAPPER_EXTENSION = aaxplugin; }; name = Debug; }; - A1AD203AE69C428760D3AD4A = {isa = XCBuildConfiguration; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_LINK_OBJC_RUNTIME = NO; - COMBINE_HIDPI_IMAGES = YES; - CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)"; - DEAD_CODE_STRIPPING = YES; - DEPLOYMENT_LOCATION = YES; - DSTROOT = /; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_OPTIMIZATION_LEVEL = 3; - GCC_PREPROCESSOR_DEFINITIONS = ( - "_NDEBUG=1", - "NDEBUG=1", - "JucePlugin_Build_VST=0", - "JucePlugin_Build_VST3=0", - "JucePlugin_Build_AU=0", - "JucePlugin_Build_AUv3=0", - "JucePlugin_Build_RTAS=0", - "JucePlugin_Build_AAX=1", - "JucePlugin_Build_Standalone=0", - "JUCER_XCODE_MAC_F6D2F4CF=1", - "JUCE_APP_VERSION=1.0.0", - "JUCE_APP_VERSION_HEX=0x10000", ); - GCC_SYMBOLS_PRIVATE_EXTERN = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GENERATE_PKGINFO_FILE = YES; - HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "~/SDKs/AAX", "~/SDKs/AAX/Interfaces", "~/SDKs/AAX/Interfaces/ACF", "../../../../../modules", "$(inherited)"); - INFOPLIST_FILE = Info-AAX.plist; - INSTALL_PATH = "/Library/Application Support/Avid/Audio/Plug-Ins/"; - LIBRARY_SEARCH_PATHS = ("$(inherited)", "\"$(HOME)/SDKs/AAX/Libs/Release\""); - LIBRARY_STYLE = Bundle; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; - OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion"; - OTHER_LDFLAGS = "-bundle -lAAXLibrary -lGainPlugIn"; - PRODUCT_BUNDLE_IDENTIFIER = com.ROLI.GainPlugIn; - SDKROOT_ppc = macosx10.5; - WRAPPER_EXTENSION = aaxplugin; }; name = Release; }; 2CB812B0DEE790549B33EA23 = {isa = XCBuildConfiguration; buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_LINK_OBJC_RUNTIME = NO; @@ -3198,13 +3116,13 @@ "JucePlugin_Build_AU=1", "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", - "JucePlugin_Build_AAX=1", + "JucePlugin_Build_AAX=0", "JucePlugin_Build_Standalone=0", "JUCER_XCODE_MAC_F6D2F4CF=1", "JUCE_APP_VERSION=1.0.0", "JUCE_APP_VERSION_HEX=0x10000", ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "~/SDKs/AAX", "~/SDKs/AAX/Interfaces", "~/SDKs/AAX/Interfaces/ACF", "../../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../../modules", "$(inherited)"); INSTALL_PATH = "@executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; @@ -3228,14 +3146,14 @@ "JucePlugin_Build_AU=1", "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", - "JucePlugin_Build_AAX=1", + "JucePlugin_Build_AAX=0", "JucePlugin_Build_Standalone=0", "JUCER_XCODE_MAC_F6D2F4CF=1", "JUCE_APP_VERSION=1.0.0", "JUCE_APP_VERSION_HEX=0x10000", ); GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "~/SDKs/AAX", "~/SDKs/AAX/Interfaces", "~/SDKs/AAX/Interfaces/ACF", "../../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../../modules", "$(inherited)"); INSTALL_PATH = "@executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; @@ -3277,7 +3195,6 @@ 60FCED8B68702AB28A4297C4 = {isa = PBXTargetDependency; target = BBE761975F619DAA1B4D0F57; }; 0F3A38F7A210718AC51B5B67 = {isa = PBXTargetDependency; target = 8777AC1501FECCF360363C10; }; 6FBE3D1D1900F691ECD1E9CF = {isa = PBXTargetDependency; target = 95B232D53C8384ECDA8C519B; }; - 18134589BE12E7F4D2D82DFB = {isa = PBXTargetDependency; target = AD71869D70E2F5CD06AF8831; }; 88ABDE275ED6C6AF05876C8F = {isa = PBXTargetDependency; target = EF7E12AA943CABF4C9ACE9FC; }; 738DD13F786359A977312E92 = {isa = XCConfigurationList; buildConfigurations = ( 12107CEF96782BFB9B82B7AC, @@ -3289,7 +3206,6 @@ 60FCED8B68702AB28A4297C4, 0F3A38F7A210718AC51B5B67, 6FBE3D1D1900F691ECD1E9CF, - 18134589BE12E7F4D2D82DFB, 88ABDE275ED6C6AF05876C8F, ); name = "GainPlugIn (All)"; productName = GainPlugIn; }; BFCD4A7D0A1F6DB0A953047C = {isa = XCConfigurationList; buildConfigurations = ( 2258034E5AABF301ACB109C1, @@ -3372,31 +3288,6 @@ 7CD5DF20930E5FD4B8978F68, 0466EDF982628A74C5EF25A0, ); buildRules = ( ); dependencies = ( 88ABDE275ED6C6AF05876C8F, ); name = "GainPlugIn (AU)"; productName = GainPlugIn; productReference = F8D93BA03DB14514E2F9D007; productType = "com.apple.product-type.bundle"; }; - 4BDDEC55EDB7DC56497AC19A = {isa = XCConfigurationList; buildConfigurations = ( - 71BC79A3E5FEBDB257DE068E, - A1AD203AE69C428760D3AD4A, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 87D9874ECD12A1F70BE4B01C = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 434F6E14A0DACDAA2BF2212B, ); runOnlyForDeploymentPostprocessing = 0; }; - 5ED60E79CB2B11C45637CA8A = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 920289CA43FF41424E0F0AE9, ); runOnlyForDeploymentPostprocessing = 0; }; - B4837EEA7868B856A37F43BD = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FA171B2FEC24575B5157EB15, - 46AB8BC7FA7E34563E5F005C, - CE59F17AE351D2C1CE9576C3, - 353BAEC02C6386CEE3594B18, - C4CDB09203A906EA7EAA2026, - FBB6DF69B4E4774056CA59CE, - 428763007D4B4F27095FC927, - 9A8029F7D3A5673112C6CD48, - E35621718EE50BEA328E3CD9, - 0F58D649AF5E12F772510165, - 6B4E64CC0DA5E1DC53159376, - 14E482AFF9CC9F18BA3798BD, ); runOnlyForDeploymentPostprocessing = 0; }; - AD71869D70E2F5CD06AF8831 = {isa = PBXNativeTarget; buildConfigurationList = 4BDDEC55EDB7DC56497AC19A; buildPhases = ( - 87D9874ECD12A1F70BE4B01C, - 5ED60E79CB2B11C45637CA8A, - B4837EEA7868B856A37F43BD, ); buildRules = ( ); dependencies = ( - 88ABDE275ED6C6AF05876C8F, ); name = "GainPlugIn (AAX)"; productName = GainPlugIn; productReference = C43A527A45129CF421296BD0; productType = "com.apple.product-type.bundle"; }; 2D1D1BFA76D5FF752D06187F = {isa = XCConfigurationList; buildConfigurations = ( 2CB812B0DEE790549B33EA23, 1A69EAB78F178B933E748B51, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; @@ -3419,7 +3310,7 @@ DBB093FB9913BE37F564E2AE, ); runOnlyForDeploymentPostprocessing = 0; }; EF7E12AA943CABF4C9ACE9FC = {isa = PBXNativeTarget; buildConfigurationList = 2D1D1BFA76D5FF752D06187F; buildPhases = ( E57E58AA3A8632B697CF894F, ); buildRules = ( ); dependencies = ( ); name = "GainPlugIn (Shared Code)"; productName = GainPlugIn; productReference = 074F1E0FAFBD4B127B869BC2; productType = "com.apple.product-type.library.static"; }; - 14B1FDE882BA4A9678780A26 = {isa = PBXProject; buildConfigurationList = 738DD13F786359A977312E92; attributes = { LastUpgradeCheck = 0440; TargetAttributes = { 67946078D4B1207C2A6BDB4F = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };BBE761975F619DAA1B4D0F57 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };8777AC1501FECCF360363C10 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };95B232D53C8384ECDA8C519B = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };AD71869D70E2F5CD06AF8831 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };EF7E12AA943CABF4C9ACE9FC = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = 807311746F9F870D03BE88D9; projectDirPath = ""; projectRoot = ""; targets = (67946078D4B1207C2A6BDB4F, BBE761975F619DAA1B4D0F57, 8777AC1501FECCF360363C10, 95B232D53C8384ECDA8C519B, AD71869D70E2F5CD06AF8831, EF7E12AA943CABF4C9ACE9FC); }; + 14B1FDE882BA4A9678780A26 = {isa = PBXProject; buildConfigurationList = 738DD13F786359A977312E92; attributes = { LastUpgradeCheck = 0440; TargetAttributes = { 67946078D4B1207C2A6BDB4F = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };BBE761975F619DAA1B4D0F57 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };8777AC1501FECCF360363C10 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };95B232D53C8384ECDA8C519B = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };EF7E12AA943CABF4C9ACE9FC = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = 807311746F9F870D03BE88D9; projectDirPath = ""; projectRoot = ""; targets = (67946078D4B1207C2A6BDB4F, BBE761975F619DAA1B4D0F57, 8777AC1501FECCF360363C10, 95B232D53C8384ECDA8C519B, EF7E12AA943CABF4C9ACE9FC); }; }; rootObject = 14B1FDE882BA4A9678780A26; } diff --git a/examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj b/examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj index ad711d51a6..abbb1f4485 100644 --- a/examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj +++ b/examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj @@ -55,8 +55,8 @@ Disabled EditAndContinue - c:\SDKs\VST3 SDK;..\..\JuceLibraryCode;c:\SDKs\AAX;c:\SDKs\AAX\Interfaces;c:\SDKs\AAX\Interfaces\ACF;..\..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;JucePlugin_AAXLibs_path="c:\\SDKs\\AAX\\Libs";WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions) + c:\SDKs\VST3 SDK;..\..\JuceLibraryCode;..\..\..\..\..\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -86,12 +86,7 @@ $(IntDir)\GainPlugIn.bsc - copy /Y "$(OutDir)\$(TargetFileName)" "$(OutDir)\$(TargetName).vst3" -mkdir "$(OutDir)\$(TargetName).aaxplugin" -mkdir "$(OutDir)\$(TargetName).aaxplugin\Contents" -mkdir "$(OutDir)\$(TargetName).aaxplugin\Contents\Win32" -copy /Y "$(OutDir)\$(TargetFileName)" "$(OutDir)\$(TargetName).aaxplugin\Contents\Win32\$(TargetName).aaxplugin" -c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\Contents\Win32" "c:\SDKs\AAX\Utilities\PlugIn.ico" + copy /Y "$(OutDir)\$(TargetFileName)" "$(OutDir)\$(TargetName).vst3" @@ -104,8 +99,8 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ Full - c:\SDKs\VST3 SDK;..\..\JuceLibraryCode;c:\SDKs\AAX;c:\SDKs\AAX\Interfaces;c:\SDKs\AAX\Interfaces\ACF;..\..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;JucePlugin_AAXLibs_path="c:\\SDKs\\AAX\\Libs";WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions) + c:\SDKs\VST3 SDK;..\..\JuceLibraryCode;..\..\..\..\..\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;%(PreprocessorDefinitions) MultiThreadedDLL true @@ -136,16 +131,14 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ $(IntDir)\GainPlugIn.bsc - copy /Y "$(OutDir)\$(TargetFileName)" "$(OutDir)\$(TargetName).vst3" -mkdir "$(OutDir)\$(TargetName).aaxplugin" -mkdir "$(OutDir)\$(TargetName).aaxplugin\Contents" -mkdir "$(OutDir)\$(TargetName).aaxplugin\Contents\Win32" -copy /Y "$(OutDir)\$(TargetFileName)" "$(OutDir)\$(TargetName).aaxplugin\Contents\Win32\$(TargetName).aaxplugin" -c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\Contents\Win32" "c:\SDKs\AAX\Utilities\PlugIn.ico" + copy /Y "$(OutDir)\$(TargetFileName)" "$(OutDir)\$(TargetName).vst3" + + true + true @@ -622,9 +615,6 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ true - - true - true @@ -1798,7 +1788,6 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ - @@ -1814,6 +1803,7 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ + @@ -2002,7 +1992,6 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ - @@ -2010,22 +1999,22 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ - + + - @@ -2466,6 +2455,7 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ + diff --git a/examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj.filters b/examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj.filters index 1ebbd59960..93c35b061b 100644 --- a/examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj.filters +++ b/examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj.filters @@ -385,6 +385,9 @@ GainPlugIn\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -904,9 +907,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2182,9 +2182,6 @@ Juce Library Code - - Juce Library Code - Juce Library Code @@ -2226,6 +2223,9 @@ + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2790,9 +2790,6 @@ Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses - - Juce Modules\juce_audio_plugin_client\AU - Juce Modules\juce_audio_plugin_client\RTAS @@ -2814,9 +2811,6 @@ Juce Modules\juce_audio_plugin_client\utility - - Juce Modules\juce_audio_plugin_client\utility - Juce Modules\juce_audio_plugin_client\utility @@ -2835,6 +2829,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2850,6 +2847,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2859,9 +2859,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -4178,6 +4175,9 @@ Juce Modules\juce_audio_plugin_client\AU + + Juce Modules\juce_audio_plugin_client + Juce Modules\juce_audio_plugin_client diff --git a/examples/PlugInSamples/GainPlugIn/GainPlugIn.jucer b/examples/PlugInSamples/GainPlugIn/GainPlugIn.jucer index c104d91d82..583536c758 100644 --- a/examples/PlugInSamples/GainPlugIn/GainPlugIn.jucer +++ b/examples/PlugInSamples/GainPlugIn/GainPlugIn.jucer @@ -2,7 +2,7 @@ kVST2MaxChannels) - return false; - - // always have the same channel layout on both input and output on the main bus - if (! AudioProcessor::setPreferredBusArrangement (! isInputBus, busIndex, preferred)) - return false; + const AudioChannelSet& mainInLayout = layouts.getChannelSet (true, 0); + const AudioChannelSet& mainOutLayout = layouts.getChannelSet (false, 0); - return AudioProcessor::setPreferredBusArrangement (isInputBus, busIndex, preferred); + return (mainInLayout == mainOutLayout && (! mainInLayout.isDisabled())); } private: diff --git a/examples/PlugInSamples/MultiOutSynth/Builds/MacOSX/MultiOutSynth.xcodeproj/project.pbxproj b/examples/PlugInSamples/MultiOutSynth/Builds/MacOSX/MultiOutSynth.xcodeproj/project.pbxproj index bf58fcb18d..6bf0d2fa9d 100644 --- a/examples/PlugInSamples/MultiOutSynth/Builds/MacOSX/MultiOutSynth.xcodeproj/project.pbxproj +++ b/examples/PlugInSamples/MultiOutSynth/Builds/MacOSX/MultiOutSynth.xcodeproj/project.pbxproj @@ -63,6 +63,7 @@ 0199A3783B3278540F853BA3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inffixed.h; path = "../../../../../modules/juce_core/zip/zlib/inffixed.h"; sourceTree = "SOURCE_ROOT"; }; 020ADF783703D9BA9DCD3D7D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; }; 0289EF17A9CF704ED287401D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; + 029A3821DE4D96F4699F5628 = {isa = PBXFileReference; lastKnownFileType = file.r; name = AUResources.r; path = "../../../../../modules/juce_audio_plugin_client/AUResources.r"; sourceTree = "SOURCE_ROOT"; }; 02BE4D478499FA3B15E06637 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../../../modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; 02BE7DDA751D5D884950257C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../../../modules/juce_core/files/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; 02D638817E036991BCAF490E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = registry.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/registry.h"; sourceTree = "SOURCE_ROOT"; }; @@ -122,7 +123,6 @@ 0DC017A282117A49F8DF3D31 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDBurner.mm"; path = "../../../../../modules/juce_audio_devices/native/juce_mac_AudioCDBurner.mm"; sourceTree = "SOURCE_ROOT"; }; 0E52162DFFFCCD06B941AE62 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; 0E765A821D0225720051C82F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "stream_encoder.h"; path = "../../../../../modules/juce_audio_formats/codecs/flac/stream_encoder.h"; sourceTree = "SOURCE_ROOT"; }; - 0E7D3CC3B54770916D277DA4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginBusUtilities.h"; path = "../../../../../modules/juce_audio_plugin_client/utility/juce_PluginBusUtilities.h"; sourceTree = "SOURCE_ROOT"; }; 0E90BC5C291C83083E252819 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../../../../modules/juce_core/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; 0EB4F4B3C10D44C4017146B0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AppleRemote.h"; path = "../../../../../modules/juce_gui_extra/misc/juce_AppleRemote.h"; sourceTree = "SOURCE_ROOT"; }; 0EBC8AD3685484272DA7BB28 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NativeMessageBox.h"; path = "../../../../../modules/juce_gui_basics/windows/juce_NativeMessageBox.h"; sourceTree = "SOURCE_ROOT"; }; @@ -197,7 +197,6 @@ 1BBAEAACC602F3E31B035366 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; 1C5587350978A9E93CE80711 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDReader.h"; path = "../../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.h"; sourceTree = "SOURCE_ROOT"; }; 1C7188521CC944FBE6765AE8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MountedVolumeListChangeDetector.h"; path = "../../../../../modules/juce_events/messages/juce_MountedVolumeListChangeDetector.h"; sourceTree = "SOURCE_ROOT"; }; - 1CC9DE40A962B61BE5D6D1AF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 1CCFF393CC392ACBB119305C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcphuff.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jcphuff.c"; sourceTree = "SOURCE_ROOT"; }; 1CE552A87C9B220EC1EB955D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = transupp.h; path = "../../../../../modules/juce_graphics/image_formats/jpglib/transupp.h"; sourceTree = "SOURCE_ROOT"; }; 1CEDDCD15AC89113C91DB85D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AU_2.mm"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_2.mm"; sourceTree = "SOURCE_ROOT"; }; @@ -270,7 +269,6 @@ 2BC2C95249F61193FAA46A13 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SHA256.cpp"; path = "../../../../../modules/juce_cryptography/hashing/juce_SHA256.cpp"; sourceTree = "SOURCE_ROOT"; }; 2C122BFD1C85AD66AFA8ADD7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Draggable3DOrientation.h"; path = "../../../../../modules/juce_opengl/geometry/juce_Draggable3DOrientation.h"; sourceTree = "SOURCE_ROOT"; }; 2C90CCBB0A3A412308060408 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUInputFormatConverter.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUInputFormatConverter.h"; sourceTree = "SOURCE_ROOT"; }; - 2CA49E8DB449CDE8F92A928D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 2CC0DDEFE8DADE574DA9897D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; 2CD7132D2CF34E16279E945C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_JackAudio.cpp"; path = "../../../../../modules/juce_audio_devices/native/juce_linux_JackAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; 2CD9FAF998B90D80DB720CA4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Windowing.mm"; path = "../../../../../modules/juce_gui_basics/native/juce_mac_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; @@ -468,6 +466,7 @@ 50A69D7239BB8E2B2393100C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../../../../modules/juce_events/native/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; 50DC7EC85DFFD11A5E01C92A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CarbonViewWrapperComponent.h"; path = "../../../../../modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h"; sourceTree = "SOURCE_ROOT"; }; 5133C078BB9446266946B9D8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctint.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jidctint.c"; sourceTree = "SOURCE_ROOT"; }; + 515126BF6D60C7AD716DC388 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; 51517ED5596D69AD72E93F55 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = vorbisenc.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/vorbisenc.h"; sourceTree = "SOURCE_ROOT"; }; 5153F3454BDD24FA293C40BF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageCollector.cpp"; path = "../../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp"; sourceTree = "SOURCE_ROOT"; }; 51BCD6A3FDE52592E1AC6097 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseEvent.h"; path = "../../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -509,7 +508,6 @@ 59EDAD9049313256F1C76C0F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcprepct.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jcprepct.c"; sourceTree = "SOURCE_ROOT"; }; 5A0208D5B99D6214AE9686AF = {isa = PBXFileReference; lastKnownFileType = text.txt; name = "libpng_readme.txt"; path = "../../../../../modules/juce_graphics/image_formats/pnglib/libpng_readme.txt"; sourceTree = "SOURCE_ROOT"; }; 5A2373DB9260B06091BFEEDA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PerformanceCounter.h"; path = "../../../../../modules/juce_core/time/juce_PerformanceCounter.h"; sourceTree = "SOURCE_ROOT"; }; - 5A56163B25252D8E74389F96 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../../modules/juce_audio_plugin_client/AU/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 5A59400CB33DE0F1901E6568 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputSource.cpp"; path = "../../../../../modules/juce_core/streams/juce_FileInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; 5A68DC5FF7837FFD42084A9B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = os.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/os.h"; sourceTree = "SOURCE_ROOT"; }; 5A9132A3307532C0CE193FCF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; @@ -803,6 +801,7 @@ 918ECC9726F9792AEA2BF389 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; 9191498AD661685C4E50D690 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_basics.mm"; path = "../../JuceLibraryCode/juce_gui_basics.mm"; sourceTree = "SOURCE_ROOT"; }; 91F5F4AA4BF054A9A39BB454 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_CameraDevice.cpp"; path = "../../../../../modules/juce_video/native/juce_android_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; + 92570EA70E83584533C01B2F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 9258742D60F34F9BAD67803F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_RTAS_2.cpp"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_2.cpp"; sourceTree = "SOURCE_ROOT"; }; 926B8C8B338554673FFFD294 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MP3AudioFormat.cpp"; path = "../../../../../modules/juce_audio_formats/codecs/juce_MP3AudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; 92E3265AE5ED5E5AF742B2E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_opengl.h"; path = "../../../../../modules/juce_opengl/juce_opengl.h"; sourceTree = "SOURCE_ROOT"; }; @@ -902,6 +901,7 @@ A53147DCDEB082194C22B621 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; A531A8EF845CA83185289794 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; A54BD09649A116C594A3A5A4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Path.cpp"; path = "../../../../../modules/juce_graphics/geometry/juce_Path.cpp"; sourceTree = "SOURCE_ROOT"; }; + A54D2F67B21DF880BE664C5D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; A5517A628BE856C29017BA31 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPENote.h"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPENote.h"; sourceTree = "SOURCE_ROOT"; }; A55654BC7CDD19A53079BF19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcmainct.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jcmainct.c"; sourceTree = "SOURCE_ROOT"; }; A567D37B782CBF389A777AA7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_utils.cpp"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_utils.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1040,15 +1040,14 @@ C22FE56BBF0303AEDC80881E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdmerge.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jdmerge.c"; sourceTree = "SOURCE_ROOT"; }; C23A59C9F6176FA257A41F85 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cpu.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/cpu.h"; sourceTree = "SOURCE_ROOT"; }; C24225BBC1A782BEB1B1A631 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; - C2433DAD055E36EC02370A5F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = window.c; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/window.c"; sourceTree = "SOURCE_ROOT"; }; C2800EE214F48F4A1A754A13 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; C2EF85C94EA976606FFA4D9B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiInput.h"; path = "../../../../../modules/juce_audio_devices/midi_io/juce_MidiInput.h"; sourceTree = "SOURCE_ROOT"; }; C30136753CC983A267920749 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorEditor.cpp"; path = "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; C31833453401D61E252001B9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_basics.h"; path = "../../../../../modules/juce_audio_basics/juce_audio_basics.h"; sourceTree = "SOURCE_ROOT"; }; + C35C8ED9BF3CC7C67CA3F037 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; C3913D94746B4D7DC9A4E8CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = floor1.c; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/floor1.c"; sourceTree = "SOURCE_ROOT"; }; C3D0A23DF844C5A6ADF37600 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../../../../modules/juce_core/native/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; }; C3DD39031B0142481AEB5469 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LuaCodeTokeniser.h"; path = "../../../../../modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; - C41E4C0F2E8630E6240FB593 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitmath.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitmath.h"; sourceTree = "SOURCE_ROOT"; }; C4325E86FCBE01FC9E65C6FA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Fonts.cpp"; path = "../../../../../modules/juce_graphics/native/juce_win32_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; C44C58F5A4D9D8EEC658DDB1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CameraDevice.mm"; path = "../../../../../modules/juce_video/native/juce_mac_CameraDevice.mm"; sourceTree = "SOURCE_ROOT"; }; C453837C3342293C205C2F83 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LiveConstantEditor.h"; path = "../../../../../modules/juce_gui_extra/misc/juce_LiveConstantEditor.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1060,9 +1059,7 @@ C5BDC880AF3D6D7908579D75 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; C5C2EC39931BD2F4F037C7E3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdphuff.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jdphuff.c"; sourceTree = "SOURCE_ROOT"; }; C5DC2ECDDAB3A46934EF8550 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcinit.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jcinit.c"; sourceTree = "SOURCE_ROOT"; }; - C601E3B7474CCAD421297824 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CatmullRomInterpolator.cpp"; path = "../../../../../modules/juce_audio_basics/effects/juce_CatmullRomInterpolator.cpp"; sourceTree = "SOURCE_ROOT"; }; C6416871206E496758E0AEAD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CaretComponent.cpp"; path = "../../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - C6527E22690701CDEB628259 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../../../modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; C669B2C94347112865575479 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; C6765BF98421489E663C9713 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_AAX.cpp"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AAX.cpp"; sourceTree = "SOURCE_ROOT"; }; C6AD5270E37301FDDD0D7B00 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jquant2.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jquant2.c"; sourceTree = "SOURCE_ROOT"; }; @@ -1070,20 +1067,34 @@ C70AF24CE449413957076690 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLContext.h"; path = "../../../../../modules/juce_opengl/opengl/juce_OpenGLContext.h"; sourceTree = "SOURCE_ROOT"; }; C7570B6C472BBE132D6EA308 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; C7620DBAD9E38AA49607E8A4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiRPN.cpp"; path = "../../../../../modules/juce_audio_basics/midi/juce_MidiRPN.cpp"; sourceTree = "SOURCE_ROOT"; }; - C776CA9A1CF4DA8FD93B8223 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = crc.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/crc.h"; sourceTree = "SOURCE_ROOT"; }; - C78B08A40E0F71F8091C8F58 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemStats.cpp"; path = "../../../../../modules/juce_core/native/juce_win32_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; C7A1DF50E15C11D93375BD53 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; C89360329ADE7BE3C58AB6ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MouseCursor.mm"; path = "../../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm"; sourceTree = "SOURCE_ROOT"; }; + CA3B897A065AD461112CFB91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_VST2.cpp"; path = "../../JuceLibraryCode/juce_audio_plugin_client_VST2.cpp"; sourceTree = "SOURCE_ROOT"; }; + CA5EBD7676B224123E102A1D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; }; + D06DCC799C2F8567B19C2B0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../../../../modules/juce_audio_basics/effects/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; }; + DA5881053EBA06F96F1D1CF3 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MultiOutSynth.vst3; sourceTree = "BUILT_PRODUCTS_DIR"; }; + DAC36A924C848D4620ACBBDB = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; + F06A0C9E80A5DD8CB3AFDD0E = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MultiOutSynth.component; sourceTree = "BUILT_PRODUCTS_DIR"; }; + 4E98D6E65CE3E073DB1F9113 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MultiOutSynth.aaxplugin; sourceTree = "BUILT_PRODUCTS_DIR"; }; + 03B7AAA7C11BC7F21B857177 = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMultiOutSynth.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; + C2433DAD055E36EC02370A5F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = window.c; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/window.c"; sourceTree = "SOURCE_ROOT"; }; + C41E4C0F2E8630E6240FB593 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitmath.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitmath.h"; sourceTree = "SOURCE_ROOT"; }; + C601E3B7474CCAD421297824 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CatmullRomInterpolator.cpp"; path = "../../../../../modules/juce_audio_basics/effects/juce_CatmullRomInterpolator.cpp"; sourceTree = "SOURCE_ROOT"; }; + C6527E22690701CDEB628259 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../../../modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; + C776CA9A1CF4DA8FD93B8223 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = crc.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/crc.h"; sourceTree = "SOURCE_ROOT"; }; + C785485A7DC04A2134F4F2B3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEValue.cpp"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPEValue.cpp"; sourceTree = "SOURCE_ROOT"; }; + C78B08A40E0F71F8091C8F58 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemStats.cpp"; path = "../../../../../modules/juce_core/native/juce_win32_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + C7FF15427F8871470BFA4820 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilterAudioSource.cpp"; path = "../../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; C8FDFE252C3E17D4A02C256E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardState.h"; path = "../../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.h"; sourceTree = "SOURCE_ROOT"; }; C9AC8DFDE453BE474266B236 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ogg.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/ogg.h"; sourceTree = "SOURCE_ROOT"; }; C9D607D1006DC507DED7889F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; C9F38DEE0CD76DA4FF6BBDF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../../../modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; CA19680927E09A35A0695AAD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUOutputBase.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputBase.h"; sourceTree = "SOURCE_ROOT"; }; - CA3B897A065AD461112CFB91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_VST2.cpp"; path = "../../JuceLibraryCode/juce_audio_plugin_client_VST2.cpp"; sourceTree = "SOURCE_ROOT"; }; - CA5EBD7676B224123E102A1D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; }; CA8CF02AC2665E599ECF7A7C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReader.cpp"; path = "../../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; }; CAAE1D22DACE9CACB93B2129 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V3.cpp"; path = "../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp"; sourceTree = "SOURCE_ROOT"; }; CAF48DE29336FD7E6BA83365 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ConcertinaPanel.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_ConcertinaPanel.h"; sourceTree = "SOURCE_ROOT"; }; + CB1789262FD3A919F45A7FD3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KnownPluginList.h"; path = "../../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.h"; sourceTree = "SOURCE_ROOT"; }; + CB841032A149EE040BB59594 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; CBDE271C4C5387CE39BD348F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_basics.mm"; path = "../../JuceLibraryCode/juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; }; CC1F87E59205712A0B2B08D5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginHostType.h"; path = "../../../../../modules/juce_audio_plugin_client/utility/juce_PluginHostType.h"; sourceTree = "SOURCE_ROOT"; }; CC8E350DE3898296FD1CA6AB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_extra.cpp"; path = "../../../../../modules/juce_gui_extra/juce_gui_extra.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1092,30 +1103,18 @@ CCF97D006BD017722C74B6A7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MusicDeviceBase.cpp; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/MusicDeviceBase.cpp"; sourceTree = "SOURCE_ROOT"; }; CD02F270DE7AE1635A3E423E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; CD111D36AD8E9D73CE9739F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../../../modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; - CD4A4B5DF38D0F6C1B5CA961 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - CE1C954808FDA669FEEFDC2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; - CF2A59FABE1AEC5251A7C9A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAAudioChannelLayout.cpp; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAudioChannelLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; - D01619CC43F88EC81883B673 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; - D5445BE1A8D52195956FD045 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormat.h"; path = "../../../../../modules/juce_audio_formats/format/juce_AudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; - D6889EB5ED8960BD2093A686 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../../../../modules/juce_audio_devices/native/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; - DA5881053EBA06F96F1D1CF3 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MultiOutSynth.vst3; sourceTree = "BUILT_PRODUCTS_DIR"; }; - DAC36A924C848D4620ACBBDB = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; - F06A0C9E80A5DD8CB3AFDD0E = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MultiOutSynth.component; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 4E98D6E65CE3E073DB1F9113 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MultiOutSynth.aaxplugin; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 03B7AAA7C11BC7F21B857177 = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMultiOutSynth.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; - C785485A7DC04A2134F4F2B3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEValue.cpp"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPEValue.cpp"; sourceTree = "SOURCE_ROOT"; }; - C7FF15427F8871470BFA4820 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilterAudioSource.cpp"; path = "../../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - CB1789262FD3A919F45A7FD3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KnownPluginList.h"; path = "../../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.h"; sourceTree = "SOURCE_ROOT"; }; - CB841032A149EE040BB59594 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; CD26D70DEFE69EB620F09443 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; CD2CEC703F63930859D26DBA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTPluginFormat.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + CD4A4B5DF38D0F6C1B5CA961 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; CD4CB495D75A2ABAA66A2951 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MixerAudioSource.h"; path = "../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; CDB15D2B8437758B0F7434B0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../../../modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; }; + CE1C954808FDA669FEEFDC2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; CE756CA0F5505BA8084D5CA8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngconf.h"; sourceTree = "SOURCE_ROOT"; }; CE7AB9CEBC2AD27B236A69F8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StandaloneFilterApp.cpp"; path = "../../../../../modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp"; sourceTree = "SOURCE_ROOT"; }; CEA5C634122F13B61BC06B2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemTrayIcon.cpp"; path = "../../../../../modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; CEEC9947F99D7F39C77DE79B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; - D06DCC799C2F8567B19C2B0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../../../../modules/juce_audio_basics/effects/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; }; + CF2A59FABE1AEC5251A7C9A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAAudioChannelLayout.cpp; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAudioChannelLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; + D01619CC43F88EC81883B673 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; D08EBD01477B270E49ADD283 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = bitwise.c; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/bitwise.c"; sourceTree = "SOURCE_ROOT"; }; D18DE409087FFFDCA4187D4F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableText.cpp"; path = "../../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp"; sourceTree = "SOURCE_ROOT"; }; D1D5978F5EE20BB506361B3A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AU_1.mm"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm"; sourceTree = "SOURCE_ROOT"; }; @@ -1128,10 +1127,12 @@ D4EC0887DABB7D5A7E911549 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlexBox.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_FlexBox.cpp"; sourceTree = "SOURCE_ROOT"; }; D503329DCE178787E5B2D8C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; D50539AB3F3030B5B6EE1E27 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../../../modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; + D5445BE1A8D52195956FD045 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormat.h"; path = "../../../../../modules/juce_audio_formats/format/juce_AudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; D5BD3DE485D0F4E7C3BB6A0F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../../../modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; D6257EA24F3F7E3AED2A21BE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; }; D62F1F169DFB880C99CD8735 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_FileChooser.cpp"; path = "../../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; D65B12939D2497DB1D262101 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; + D6889EB5ED8960BD2093A686 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../../../../modules/juce_audio_devices/native/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; D6A2647F0D5451971FFC64F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../../../../modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; D6D9CE7EF2B63E615A58D470 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = adler32.c; path = "../../../../../modules/juce_core/zip/zlib/adler32.c"; sourceTree = "SOURCE_ROOT"; }; D719C3CB67E409229DF1DC12 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1342,6 +1343,8 @@ F420488E4B593F5D56857291 = {isa = PBXGroup; children = ( CB82B39C8895C61C028CCEAC, ); name = MultiOutSynth; sourceTree = ""; }; B8BFC45138D99677A9B9101D = {isa = PBXGroup; children = ( + C35C8ED9BF3CC7C67CA3F037, + A54D2F67B21DF880BE664C5D, C08649E52B86DF11BFEA005C, 6EF302CF91EB40A0E5077602, 26DB004476F7F4944A6A9AA2, @@ -1668,7 +1671,7 @@ 4B4395FD0B981840C14E2344, 0D4AA39D67CF9EB2B8FC06C9, 4B4395FD0B981840C14E2344, ); name = "juce_audio_formats"; sourceTree = ""; }; - EC8818482FE69DEA2472407C = {isa = PBXGroup; children = ( + 6917AA14026C433F4EDD90B7 = {isa = PBXGroup; children = ( 8F929BB1E10DD57C1056FF50, 069622CB01111075080B6F60, ); name = AAX; sourceTree = ""; }; 93B4691809E49A377D666871 = {isa = PBXGroup; children = ( @@ -1730,10 +1733,9 @@ 75300D231C75A269DD7D523F, ); name = CoreAudioUtilityClasses; sourceTree = ""; }; 7B934098FF9E066D257F3FC8 = {isa = PBXGroup; children = ( 93B4691809E49A377D666871, - 5A56163B25252D8E74389F96, 836EAC1C5D126C6C8907E8C7, 675627DA901E329524A4B7CD, ); name = AU; sourceTree = ""; }; - B034C01D71A8349088379345 = {isa = PBXGroup; children = ( + C71DF3358E0CFC90B5A9A42B = {isa = PBXGroup; children = ( 1DDD52E2562F45C7BF44E3BA, 86FD2BEB554C25724A2AF813, E8F14A4246A337084B54E9C1, @@ -1741,32 +1743,31 @@ 6E9CF164968692ECBF14BFA4, A99BE51ABD7D9EC4B325A59C, 3DC291F8A448B57C4E7B85C9, ); name = RTAS; sourceTree = ""; }; - F4395C66021B50FE5AAB303C = {isa = PBXGroup; children = ( + BCF887576433BF90C7A14FA5 = {isa = PBXGroup; children = ( CE7AB9CEBC2AD27B236A69F8, 8379A87D62F44DFFC9366AD6, ); name = Standalone; sourceTree = ""; }; - B973D84EF8EAD532ECB42F83 = {isa = PBXGroup; children = ( + E253DDFB80FD8CD63E1AF4C6 = {isa = PBXGroup; children = ( 9407A9BBA5CC55FAB981363F, 1B468DBA17F78A4C46EFDB34, 8BC913A5669953BFE5A456F6, 4FB37F202AB613AEDFC644B3, 08AE4605E96BEA8D681F7211, - 0E7D3CC3B54770916D277DA4, CC1F87E59205712A0B2B08D5, EE10601535426EBE973755EE, 45A7DB93A834F903CFB76794, ); name = utility; sourceTree = ""; }; - 794BD365073742451788E5DF = {isa = PBXGroup; children = ( + EAD6540D0E9A5C57AE3A3BCF = {isa = PBXGroup; children = ( 21F7313455725884DEC213E7, F7D1FD08E57CD55F824DB44D, ); name = VST; sourceTree = ""; }; - 27252EE648860860662C12D6 = {isa = PBXGroup; children = ( + 5C3A39EFBC69EAEC356560C0 = {isa = PBXGroup; children = ( A9BFA5468698DC8F32062A9B, ); name = VST3; sourceTree = ""; }; B7199B2DD8BEEA7DBC08C672 = {isa = PBXGroup; children = ( - EC8818482FE69DEA2472407C, + 6917AA14026C433F4EDD90B7, 7B934098FF9E066D257F3FC8, - B034C01D71A8349088379345, - F4395C66021B50FE5AAB303C, - B973D84EF8EAD532ECB42F83, - 794BD365073742451788E5DF, - 27252EE648860860662C12D6, + C71DF3358E0CFC90B5A9A42B, + BCF887576433BF90C7A14FA5, + E253DDFB80FD8CD63E1AF4C6, + EAD6540D0E9A5C57AE3A3BCF, + 5C3A39EFBC69EAEC356560C0, 04DAC3B6E82E983D25C6700E, C6765BF98421489E663C9713, AC1D5EC23242A02FFBB90928, @@ -1786,12 +1787,13 @@ B0114050F18D46F699CFF91A, 195D56D8D48473E1EAFAD117, 04DAC3B6E82E983D25C6700E, ); name = "juce_audio_plugin_client"; sourceTree = ""; }; - FE5B5B653118FF426AD1B47A = {isa = PBXGroup; children = ( + CA8A62220B6A78035EAC1C15 = {isa = PBXGroup; children = ( 7F38AB084E4DEAC474F6E5D1, 27CEF3DA924AB39D4B0A2636, E6FFA40FF94303BAAA8F59F4, BC700DF8CCA6B0D1F1B316EF, ); name = format; sourceTree = ""; }; - DB4F61DF4C238632CDF6E9F8 = {isa = PBXGroup; children = ( + A9548DBA366974037E58FB28 = {isa = PBXGroup; children = ( + 92570EA70E83584533C01B2F, 9BC7159383824FCEC506721E, E0C299CCA30DD1E51258BC08, 65C5CBAFC7A92739CF90FBD4, @@ -1800,13 +1802,12 @@ 60EBEDFDF4A6E7DED70B9185, AA59E230F960D32E4BF578AF, 676CB38425FD7162414A9EBA, + 515126BF6D60C7AD716DC388, 8F20F683BBA8F2FF5F05E341, 27B53FF2B2CA458D1BFF27DA, 3F2F67CDD0CE06807A6EE36E, CD2CEC703F63930859D26DBA, ); name = "format_types"; sourceTree = ""; }; - F52D83A5E6D7E15A0799D7EB = {isa = PBXGroup; children = ( - 1CC9DE40A962B61BE5D6D1AF, - 2CA49E8DB449CDE8F92A928D, + 3E08A0EEF09037BBDA43376D = {isa = PBXGroup; children = ( 45425684D864D3DCC04AB8FD, 27170419E6F8EC6BD7C8BCA2, 227566216FC118FEC57AA657, @@ -1838,9 +1839,9 @@ 5E312F41CC4B89D71CCAEA67, 9CF8D99020C1E9434D7EEB02, ); name = utilities; sourceTree = ""; }; 36387B9A19B898DE9917B36C = {isa = PBXGroup; children = ( - FE5B5B653118FF426AD1B47A, - DB4F61DF4C238632CDF6E9F8, - F52D83A5E6D7E15A0799D7EB, + CA8A62220B6A78035EAC1C15, + A9548DBA366974037E58FB28, + 3E08A0EEF09037BBDA43376D, 005E6B92EC80BA372A882F34, 8CB8096CD6EBCC7D9F2A1B95, 572121865FF2620080B60083, diff --git a/examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj b/examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj index 65cd4209f3..d66281d3af 100644 --- a/examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj +++ b/examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj @@ -146,6 +146,9 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ + + true + true @@ -622,9 +625,6 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ true - - true - true @@ -1815,6 +1815,7 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ + @@ -2003,7 +2004,6 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ - @@ -2011,22 +2011,22 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ - + + - @@ -2469,6 +2469,7 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ + diff --git a/examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj.filters b/examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj.filters index 45fee19a60..7c790d9742 100644 --- a/examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj.filters +++ b/examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj.filters @@ -388,6 +388,9 @@ MultiOutSynth\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -907,9 +910,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2232,6 +2232,9 @@ + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2796,9 +2799,6 @@ Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses - - Juce Modules\juce_audio_plugin_client\AU - Juce Modules\juce_audio_plugin_client\RTAS @@ -2820,9 +2820,6 @@ Juce Modules\juce_audio_plugin_client\utility - - Juce Modules\juce_audio_plugin_client\utility - Juce Modules\juce_audio_plugin_client\utility @@ -2841,6 +2838,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2856,6 +2856,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2865,9 +2868,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -4190,6 +4190,9 @@ Juce Modules\juce_audio_plugin_client\AU + + Juce Modules\juce_audio_plugin_client + Juce Modules\juce_audio_plugin_client diff --git a/examples/PlugInSamples/MultiOutSynth/Source/MultiOutSynth.cpp b/examples/PlugInSamples/MultiOutSynth/Source/MultiOutSynth.cpp index bfc1d7e2f0..2ff97ceaf6 100644 --- a/examples/PlugInSamples/MultiOutSynth/Source/MultiOutSynth.cpp +++ b/examples/PlugInSamples/MultiOutSynth/Source/MultiOutSynth.cpp @@ -39,15 +39,24 @@ public: //============================================================================== MultiOutSynth() + : AudioProcessor (BusesProperties() + .withOutput ("Output #1", AudioChannelSet::stereo(), true) + .withOutput ("Output #2", AudioChannelSet::stereo(), false) + .withOutput ("Output #3", AudioChannelSet::stereo(), false) + .withOutput ("Output #4", AudioChannelSet::stereo(), false) + .withOutput ("Output #5", AudioChannelSet::stereo(), false) + .withOutput ("Output #6", AudioChannelSet::stereo(), false) + .withOutput ("Output #7", AudioChannelSet::stereo(), false) + .withOutput ("Output #8", AudioChannelSet::stereo(), false) + .withOutput ("Output #9", AudioChannelSet::stereo(), false) + .withOutput ("Output #10", AudioChannelSet::stereo(), false) + .withOutput ("Output #11", AudioChannelSet::stereo(), false) + .withOutput ("Output #12", AudioChannelSet::stereo(), false) + .withOutput ("Output #13", AudioChannelSet::stereo(), false) + .withOutput ("Output #14", AudioChannelSet::stereo(), false) + .withOutput ("Output #15", AudioChannelSet::stereo(), false) + .withOutput ("Output #16", AudioChannelSet::stereo(), false)) { - // The base class constructor will already add a main stereo output bus - // If you want to add your own main channel then simply call clear the - // output buses (busArrangement.outputBuses.clear()) and then add your own - - // Add additional output buses but disable these by default - for (int busNr = 1; busNr < maxMidiChannel; ++busNr) - busArrangement.outputBuses.add (AudioProcessorBus (String ("Output #") += String (busNr + 1), AudioChannelSet::disabled())); - // initialize other stuff (not related to buses) formatManager.registerBasicFormats(); @@ -65,21 +74,8 @@ public: ~MultiOutSynth() {} //============================================================================== - bool setPreferredBusArrangement (bool isInputBus, int busIndex, - const AudioChannelSet& preferred) override - { - const int numChannels = preferred.size(); - const bool isMainBus = (busIndex == 0); - - // do not allow disabling the main output bus - if (isMainBus && preferred.isDisabled()) return false; - - // only support mono or stereo (or disabling) buses - if (numChannels > 2) return false; - - // pass the call on to the base class - return AudioProcessor::setPreferredBusArrangement (isInputBus, busIndex, preferred); - } + bool canAddBus (bool isInput) const override { return (! isInput && getBusCount (false) < maxMidiChannel); } + bool canRemoveBus (bool isInput) const override { return (! isInput && getBusCount (false) > 1); } //============================================================================== void prepareToPlay (double newSampleRate, int samplesPerBlock) override @@ -94,13 +90,13 @@ public: void processBlock (AudioSampleBuffer& buffer, MidiBuffer& midiBuffer) override { - for (int busNr = 0; busNr < maxMidiChannel; ++busNr) + const int busCount = getBusCount (false); + for (int busNr = 0; busNr < busCount; ++busNr) { MidiBuffer midiChannelBuffer = filterMidiMessagesForChannel (midiBuffer, busNr + 1); - AudioSampleBuffer audioBusBuffer = busArrangement.getBusBuffer (buffer, false, busNr); + AudioSampleBuffer audioBusBuffer = getBusBuffer (buffer, false, busNr); - if (! busArrangement.outputBuses.getReference (busNr).channels.isDisabled()) - synth [busNr]->renderNextBlock (audioBusBuffer, midiChannelBuffer, 0, audioBusBuffer.getNumSamples()); + synth [busNr]->renderNextBlock (audioBusBuffer, midiChannelBuffer, 0, audioBusBuffer.getNumSamples()); } } diff --git a/examples/PlugInSamples/NoiseGate/Builds/MacOSX/Info-Shared_Code.plist b/examples/PlugInSamples/NoiseGate/Builds/MacOSX/Info-Shared_Code.plist deleted file mode 100644 index 22b14cda45..0000000000 --- a/examples/PlugInSamples/NoiseGate/Builds/MacOSX/Info-Shared_Code.plist +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleName - NoiseGate - CFBundleDisplayName - NoiseGate - CFBundlePackageType - FMWK - CFBundleSignature - ???? - CFBundleShortVersionString - 1.0.0 - CFBundleVersion - 1.0.0 - NSHumanReadableCopyright - - NSHighResolutionCapable - - - diff --git a/examples/PlugInSamples/NoiseGate/Builds/MacOSX/NoiseGate.xcodeproj/project.pbxproj b/examples/PlugInSamples/NoiseGate/Builds/MacOSX/NoiseGate.xcodeproj/project.pbxproj index 7f808956ed..1fd472cf81 100644 --- a/examples/PlugInSamples/NoiseGate/Builds/MacOSX/NoiseGate.xcodeproj/project.pbxproj +++ b/examples/PlugInSamples/NoiseGate/Builds/MacOSX/NoiseGate.xcodeproj/project.pbxproj @@ -285,7 +285,6 @@ 30158F901439510F05BBC97D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyboardFocusTraverser.h"; path = "../../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h"; sourceTree = "SOURCE_ROOT"; }; 30A0CF70C234FD895D7F6A58 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors.mm"; path = "../../JuceLibraryCode/juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; 30B076BD20CDD8F27B6604CB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ConcertinaPanel.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_ConcertinaPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3105E167622313C70055B903 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../../modules/juce_audio_plugin_client/AU/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 310A059FDFF472B87EFA55CB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; 310CDB13DD4A06E399C9D49D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_44.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44.h"; sourceTree = "SOURCE_ROOT"; }; 3119C964C1406136A1A5E5BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Socket.cpp"; path = "../../../../../modules/juce_core/network/juce_Socket.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -302,7 +301,6 @@ 33ACD86399527378559A8B1F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 33FA8E14DC58451E1AF0776E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextDiff.h"; path = "../../../../../modules/juce_core/text/juce_TextDiff.h"; sourceTree = "SOURCE_ROOT"; }; 3475B492491BFF4A3650B06B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = memory.c; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/memory.c"; sourceTree = "SOURCE_ROOT"; }; - 3489215355E69474A575950B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 355EAB1BFEA4C1D23E555933 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BlowFish.cpp"; path = "../../../../../modules/juce_cryptography/encryption/juce_BlowFish.cpp"; sourceTree = "SOURCE_ROOT"; }; 359EDCF3631597C425AB9A47 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectSound.cpp"; path = "../../../../../modules/juce_audio_devices/native/juce_win32_DirectSound.cpp"; sourceTree = "SOURCE_ROOT"; }; 35C0F90051E357DBCC214EDF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BubbleMessageComponent.cpp"; path = "../../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -344,7 +342,6 @@ 3D194634199BFF294C166E5B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WASAPI.cpp"; path = "../../../../../modules/juce_audio_devices/native/juce_win32_WASAPI.cpp"; sourceTree = "SOURCE_ROOT"; }; 3D5320F03934A467C2042FE0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngrutil.c; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngrutil.c"; sourceTree = "SOURCE_ROOT"; }; 3D72706E8ABB733A6490F014 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; - 3DC1CD01357795B9A88D002A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 3E224AA9A88BBA37C77D51F4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ConnectedChildProcess.cpp"; path = "../../../../../modules/juce_events/interprocess/juce_ConnectedChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; }; 3E7F468F2F123CE89D0B6F77 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginListComponent.cpp"; path = "../../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 3E81DB0EB7E7BB8A5C960909 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AppleRemote.h"; path = "../../../../../modules/juce_gui_extra/misc/juce_AppleRemote.h"; sourceTree = "SOURCE_ROOT"; }; @@ -414,7 +411,6 @@ 4C2CF6BC5BDC337F11F8E64B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; }; 4C3FC93FCFD846D2CD7038F1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrowButton.h"; path = "../../../../../modules/juce_gui_basics/buttons/juce_ArrowButton.h"; sourceTree = "SOURCE_ROOT"; }; 4C69398466F6DD914602C907 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyPressMappingSet.h"; path = "../../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h"; sourceTree = "SOURCE_ROOT"; }; - 4CB640E85926E8E652D21FD3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginBusUtilities.h"; path = "../../../../../modules/juce_audio_plugin_client/utility/juce_PluginBusUtilities.h"; sourceTree = "SOURCE_ROOT"; }; 4CBF728D82FD84A9D32E517C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarComponent.h"; path = "../../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.h"; sourceTree = "SOURCE_ROOT"; }; 4CF9F8DC65832C1AB574EC9C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; 4D374200F6FC355F4C84DA74 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -429,6 +425,7 @@ 4F225451B48FF49D7C2B53D7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterChoice.h"; path = "../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterChoice.h"; sourceTree = "SOURCE_ROOT"; }; 4F2A53CD273ACD3B0904771B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; 4F5E3FD38D93207727544C6A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorGraph.h"; path = "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h"; sourceTree = "SOURCE_ROOT"; }; + 4F99E39D2B567CFF9DD388B8 = {isa = PBXFileReference; lastKnownFileType = file.r; name = AUResources.r; path = "../../../../../modules/juce_audio_plugin_client/AUResources.r"; sourceTree = "SOURCE_ROOT"; }; 4F9DC6FC10A9860EB85F5FC6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PixelFormats.h"; path = "../../../../../modules/juce_graphics/colour/juce_PixelFormats.h"; sourceTree = "SOURCE_ROOT"; }; 4FC3D138F39ADF9ACC9EC688 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DragAndDropContainer.cpp"; path = "../../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp"; sourceTree = "SOURCE_ROOT"; }; 504AFDA26EACE4139DE5B900 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitreader.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitreader.h"; sourceTree = "SOURCE_ROOT"; }; @@ -770,11 +767,9 @@ 944C96F1603C3E777C12AAB5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPool.h"; path = "../../../../../modules/juce_core/text/juce_StringPool.h"; sourceTree = "SOURCE_ROOT"; }; 9459C80646EDC1167F484982 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Audio.cpp"; path = "../../../../../modules/juce_audio_devices/native/juce_android_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; 946AE7659626D557F8AAED75 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; - 9492CF7B606C6F3A68ED8048 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "res_books_uncoupled.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/uncoupled/res_books_uncoupled.h"; sourceTree = "SOURCE_ROOT"; }; 949DD226687D344E9283CB08 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; 94E9B55296D347A134AFCA1A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResamplingAudioSource.cpp"; path = "../../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; 94F3D0138EBB7EB31E15940C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CheckSettingMacros.h"; path = "../../../../../modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h"; sourceTree = "SOURCE_ROOT"; }; - 951E7EF0AD1CB490C165CC73 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_44u.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44u.h"; sourceTree = "SOURCE_ROOT"; }; 9527265F186C8189FB684288 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioIODevice.cpp"; path = "../../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.cpp"; sourceTree = "SOURCE_ROOT"; }; 9527C3863B515C3C37475E6F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Time.cpp"; path = "../../../../../modules/juce_core/time/juce_Time.cpp"; sourceTree = "SOURCE_ROOT"; }; 956732F0A83B46EA964E64E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../../../../modules/juce_gui_basics/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -798,6 +793,7 @@ 98AA1B3E2E60CBE1E9EFB73A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; }; 99025567594494D7CF194D7F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../../../../modules/juce_gui_basics/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; 99711B22BB54CC86045B2C95 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = masking.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/masking.h"; sourceTree = "SOURCE_ROOT"; }; + 9998DD31ABBEB8513422A48B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fixed.c; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/fixed.c"; sourceTree = "SOURCE_ROOT"; }; 999B9F4C3F6091ADBA9421E0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiRPN.cpp"; path = "../../../../../modules/juce_audio_basics/midi/juce_MidiRPN.cpp"; sourceTree = "SOURCE_ROOT"; }; 99CFD965842860C4248EFB4F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemStats.cpp"; path = "../../../../../modules/juce_core/native/juce_win32_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; 99DBD2D02979E38C288F1C7D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; @@ -813,21 +809,22 @@ 9C779471720BDDE417ED9BE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 9CBD130337083207F2B56452 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../../../modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; 9CC8CDF595616EEF33071A40 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableEdgeComponent.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9CCA07FAE3B4A4D2257497BA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; 9CDA4A2E17BF5DB191F883D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9D0EADD58202012822195D8F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_VST2.cpp"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp"; sourceTree = "SOURCE_ROOT"; }; 9D14B147B6A2CA89387ADD72 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../../../modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; 9D67E9F6247EDE2E207EFE8C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CameraDevice.cpp"; path = "../../../../../modules/juce_video/capture/juce_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; 9D91048D35939171C41AFA99 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9DAB02E651736622947A4879 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; 9DEA01475DB585366B99507A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; }; 9DF06DEA20D7CC5B7784ABB5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = zlib.h; path = "../../../../../modules/juce_core/zip/zlib/zlib.h"; sourceTree = "SOURCE_ROOT"; }; - 9E0C3CD23088388B14CFE298 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 9E1B841AC727490DBAD510C7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwio.c; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngwio.c"; sourceTree = "SOURCE_ROOT"; }; - 9EB05C378008BD43BC552E33 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../../../../modules/juce_core/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; }; - 9EB8F8C25EC50AA2C1289551 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 9E3C9508D07D11C753F6F4EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BlowFish.h"; path = "../../../../../modules/juce_cryptography/encryption/juce_BlowFish.h"; sourceTree = "SOURCE_ROOT"; }; + 9E65E218A429E2B64829B4E0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9EA4A85998E5730634754DA6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../../../../modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; 9F0F2E14CFA9F3D6A25E2B38 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; 9F5C521FCFAB9BD273073B55 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; 9FC8B1D81C0535EC5B6D0C75 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_basics.cpp"; path = "../../../../../modules/juce_audio_basics/juce_audio_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; + A06D19395CD8A48E64CE9E16 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_RTAS.r"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r"; sourceTree = "SOURCE_ROOT"; }; + A466C5F100D695F2DC325C90 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; AFB3197B2BE07ED91A0C5FEA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CatmullRomInterpolator.cpp"; path = "../../../../../modules/juce_audio_basics/effects/juce_CatmullRomInterpolator.cpp"; sourceTree = "SOURCE_ROOT"; }; B135B7ABB572DE03324CFD7A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = memory.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/memory.h"; sourceTree = "SOURCE_ROOT"; }; B449D9952E702909C133BF21 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDataConverters.cpp"; path = "../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -835,17 +832,19 @@ E39A67D3DE5B2F2092769CE7 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NoiseGate.vst3; sourceTree = "BUILT_PRODUCTS_DIR"; }; 8D84B63F343660AEE31FD166 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NoiseGate.component; sourceTree = "BUILT_PRODUCTS_DIR"; }; 938C9D9676264FCB2150FCEC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_devices.cpp"; path = "../../../../../modules/juce_audio_devices/juce_audio_devices.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9492CF7B606C6F3A68ED8048 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "res_books_uncoupled.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/uncoupled/res_books_uncoupled.h"; sourceTree = "SOURCE_ROOT"; }; + 951E7EF0AD1CB490C165CC73 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_44u.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44u.h"; sourceTree = "SOURCE_ROOT"; }; 970832BB3D7B3F1D404D36CE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_X.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_X.h"; sourceTree = "SOURCE_ROOT"; }; - 9998DD31ABBEB8513422A48B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fixed.c; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/fixed.c"; sourceTree = "SOURCE_ROOT"; }; 9C62742BCA5D3C9524DE3029 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NoiseGate.aaxplugin; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 9D0EADD58202012822195D8F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_VST2.cpp"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9CCA07FAE3B4A4D2257497BA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; 9D366DD91CD44CED6934A26A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = bitreader.c; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/bitreader.c"; sourceTree = "SOURCE_ROOT"; }; 9D67999CB8A7EA49B548EF9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mdct.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mdct.h"; sourceTree = "SOURCE_ROOT"; }; + 9DAB02E651736622947A4879 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; + 9E0C3CD23088388B14CFE298 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 9E2841D274BDF096C1567AA0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AAX.mm"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AAX.mm"; sourceTree = "SOURCE_ROOT"; }; - 9E3C9508D07D11C753F6F4EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BlowFish.h"; path = "../../../../../modules/juce_cryptography/encryption/juce_BlowFish.h"; sourceTree = "SOURCE_ROOT"; }; - 9E65E218A429E2B64829B4E0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; 9E685F6C42796C5B486A08BF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUPlugInDispatch.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUPlugInDispatch.h"; sourceTree = "SOURCE_ROOT"; }; - 9EA4A85998E5730634754DA6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../../../../modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + 9EB05C378008BD43BC552E33 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../../../../modules/juce_core/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; }; + 9EB8F8C25EC50AA2C1289551 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; 9F385C17D1F088F19F3A12F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiOutput.cpp"; path = "../../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp"; sourceTree = "SOURCE_ROOT"; }; 9F39266110C56F8A0C97FA65 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jversion.h; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jversion.h"; sourceTree = "SOURCE_ROOT"; }; 9F53388B3A4667994AD93E8D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitwriter.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitwriter.h"; sourceTree = "SOURCE_ROOT"; }; @@ -855,7 +854,6 @@ 9FD8096E8A6E070EB0D3E6F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ActiveXComponent.cpp"; path = "../../../../../modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; A0189ED3EEAACC00AD4649EE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = codebook.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codebook.h"; sourceTree = "SOURCE_ROOT"; }; A067B55828A6944BF5F96152 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - A06D19395CD8A48E64CE9E16 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_RTAS.r"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r"; sourceTree = "SOURCE_ROOT"; }; A092D24F3C62D06CF5928A64 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = scales.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/scales.h"; sourceTree = "SOURCE_ROOT"; }; A0B50A729CB25919EE133A4D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSourcePlayer.cpp"; path = "../../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; A0CB59F4AD5D67685CD8673D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_SystemStats.cpp"; path = "../../../../../modules/juce_core/native/juce_android_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -890,6 +888,7 @@ A761BD7A248A08CC60A9E4FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableComposite.cpp"; path = "../../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp"; sourceTree = "SOURCE_ROOT"; }; A771637F51328BD121F5B4D2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; A777DFBFEF3B792691DF6D62 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../../../modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; }; + A78CF97C7A5D3DAB79E9567A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; A79A2F454A734BF87399A9F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HashMap.h"; path = "../../../../../modules/juce_core/containers/juce_HashMap.h"; sourceTree = "SOURCE_ROOT"; }; A7AD58E5CDFBA2D7B3C135B3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngmem.c; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngmem.c"; sourceTree = "SOURCE_ROOT"; }; A7B7B61591A2DA73045A701E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jmemmgr.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jmemmgr.c"; sourceTree = "SOURCE_ROOT"; }; @@ -1059,6 +1058,7 @@ C803EBF8CEF28BD5F77E070D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../../../modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; C80695FBDC045BF4610B9CE2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyMappingEditorComponent.cpp"; path = "../../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; C816EA1619D99EF2A329B031 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = trees.h; path = "../../../../../modules/juce_core/zip/zlib/trees.h"; sourceTree = "SOURCE_ROOT"; }; + C834E698951454E89E54FC8A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; C87EF309B572BC3315310202 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlElement.h"; path = "../../../../../modules/juce_core/xml/juce_XmlElement.h"; sourceTree = "SOURCE_ROOT"; }; C8C90957F833D794D3E41A55 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoManager.h"; path = "../../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"; sourceTree = "SOURCE_ROOT"; }; C8E71B461A5D6DC76ECD0FF3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctint.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jidctint.c"; sourceTree = "SOURCE_ROOT"; }; @@ -1230,6 +1230,7 @@ EB4E1684047679E02F10405F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../../../modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; EBAB55A995E6C7708895833F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GIFLoader.cpp"; path = "../../../../../modules/juce_graphics/image_formats/juce_GIFLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; EBCA6DB76022CE8410954E33 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_video.mm"; path = "../../JuceLibraryCode/juce_video.mm"; sourceTree = "SOURCE_ROOT"; }; + EC1BBCD621FEC78313CDCD77 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; EC29D7BAE8B0830382603A53 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RSAKey.cpp"; path = "../../../../../modules/juce_cryptography/encryption/juce_RSAKey.cpp"; sourceTree = "SOURCE_ROOT"; }; ECA8035326160B53372BE525 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; ECAF353698739976F56D6A02 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedAudioFormatReader.h"; path = "../../../../../modules/juce_audio_formats/format/juce_MemoryMappedAudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1335,6 +1336,8 @@ E6820288B676579226126D88 = {isa = PBXGroup; children = ( C3D51E70C31B55C5F37D897D, ); name = NoiseGate; sourceTree = ""; }; 3931BEFB2C2889D69B504B91 = {isa = PBXGroup; children = ( + EC1BBCD621FEC78313CDCD77, + A466C5F100D695F2DC325C90, B449D9952E702909C133BF21, E97DCF658698D013CDD4A807, 99DBD2D02979E38C288F1C7D, @@ -1661,7 +1664,7 @@ 259860F50BF88025C9451A37, 5BB1BBCB34B72DCE9B16B695, 259860F50BF88025C9451A37, ); name = "juce_audio_formats"; sourceTree = ""; }; - C87C608E9A5C5E6E7E794076 = {isa = PBXGroup; children = ( + D91841D794436BCDF62D2F41 = {isa = PBXGroup; children = ( 86691FA1B2CDD3570ABEA9C7, 218937DFF1E643C7E9392D3D, ); name = AAX; sourceTree = ""; }; 0F13F4CD7D902B9D2DA69DC9 = {isa = PBXGroup; children = ( @@ -1723,10 +1726,9 @@ F899FD17F2789DA5C2BC257A, ); name = CoreAudioUtilityClasses; sourceTree = ""; }; 3D494EE356FF362ACDC1098E = {isa = PBXGroup; children = ( 0F13F4CD7D902B9D2DA69DC9, - 3105E167622313C70055B903, CB425D61E072DED92F6CAC85, C6C096547CAD0C12FA4746CF, ); name = AU; sourceTree = ""; }; - 5A8AB44A44CEA32DC33D5765 = {isa = PBXGroup; children = ( + 4C0EB667F9E6957A6B3D147A = {isa = PBXGroup; children = ( F4E8427587734D0D2B94F4D8, E09DC8AF27C6E40AB436E821, 6033F6DD0B905B8819C115E2, @@ -1734,32 +1736,31 @@ F8AB7D10F5C9ABF34829AE8F, F785317A2BB8414F5D8E2813, D0A3F2265D323BB3F90F3DD5, ); name = RTAS; sourceTree = ""; }; - A0C36FF148057D22D568BE59 = {isa = PBXGroup; children = ( + 0F0F0874FF8A90051D855E75 = {isa = PBXGroup; children = ( F4D616BD3FAFE9587EC29FC6, 5202ABFCC92AA0AFBC9400BE, ); name = Standalone; sourceTree = ""; }; - 3AE05782CAEEEB1F04B31F1A = {isa = PBXGroup; children = ( + 074A46BC4A8864B519341179 = {isa = PBXGroup; children = ( 210E0DDAE66818EF2B278274, 94F3D0138EBB7EB31E15940C, F4C02954B36F8FCE5D4E647C, 69D08C7859B6E11D7178EDE6, 9FB3DAAD402A11A090B0521C, - 4CB640E85926E8E652D21FD3, A29D254460762F8F6990D54C, B9A21AE64CC4B86FC1F67061, F35CA755BCEF635E1D3A905C, ); name = utility; sourceTree = ""; }; - CBE8572BAED059334FB2FDF2 = {isa = PBXGroup; children = ( + 687E4E092A901620FFA53BC0 = {isa = PBXGroup; children = ( 906428E1A9963444AF1B0D60, 69A29D8420DB0B53507E223D, ); name = VST; sourceTree = ""; }; - 2CFD285766D4639C6B7C7457 = {isa = PBXGroup; children = ( + 7CCBFDB1A7B2E1A5A6DC0B06 = {isa = PBXGroup; children = ( CDE1B83C996A1861A93C93A7, ); name = VST3; sourceTree = ""; }; 3935AB4CC6A0A44A4A93B7E8 = {isa = PBXGroup; children = ( - C87C608E9A5C5E6E7E794076, + D91841D794436BCDF62D2F41, 3D494EE356FF362ACDC1098E, - 5A8AB44A44CEA32DC33D5765, - A0C36FF148057D22D568BE59, - 3AE05782CAEEEB1F04B31F1A, - CBE8572BAED059334FB2FDF2, - 2CFD285766D4639C6B7C7457, + 4C0EB667F9E6957A6B3D147A, + 0F0F0874FF8A90051D855E75, + 074A46BC4A8864B519341179, + 687E4E092A901620FFA53BC0, + 7CCBFDB1A7B2E1A5A6DC0B06, 163F8CC7509513B483860103, AF02EDDBD4B4B8081DC18DA4, 9E2841D274BDF096C1567AA0, @@ -1779,12 +1780,13 @@ 9D0EADD58202012822195D8F, C5ADD5DD0AFBC087E7ACCCED, 163F8CC7509513B483860103, ); name = "juce_audio_plugin_client"; sourceTree = ""; }; - 949CEE4B50C9FCC64A4C9ADB = {isa = PBXGroup; children = ( + 76C359A17AAF1A3204E8D97A = {isa = PBXGroup; children = ( E542BB1541FF0594DC31C41B, 11FC9FFEFA7831562BF81237, D0EC72DA701E189E29375541, 6DE13E77994751144B4E8BFF, ); name = format; sourceTree = ""; }; - AC844506822152AE0161DCE1 = {isa = PBXGroup; children = ( + 5D7AE1BEE357107F079EFD23 = {isa = PBXGroup; children = ( + C834E698951454E89E54FC8A, 4BACF3260C3D989D1134FD27, B57BAEBC65AD0A82BCA41C25, 2E7C45A3DE967DA2042E77D8, @@ -1793,13 +1795,12 @@ 15D9387120B61E7C407F2C76, 05085296947E594C821B4B99, E59436CDDCF0D85D9D70069D, + A78CF97C7A5D3DAB79E9567A, 3F3CDD8265781AA6E58916D5, FF8FFE608168896DE86209DD, 380147C3BE63B15FFA951023, 899CCE2491A041C70D8B77C7, ); name = "format_types"; sourceTree = ""; }; - 971E5781732B5E6A389383C1 = {isa = PBXGroup; children = ( - 3489215355E69474A575950B, - 3DC1CD01357795B9A88D002A, + 3CDBEF3BEFF89C48FAFF59C0 = {isa = PBXGroup; children = ( 509F5E0BB415297C76CB79F4, 5AE60C61A6222805D614A7D8, B416D8DB72CABF1B27455D2A, @@ -1831,9 +1832,9 @@ 45F28DC1BCF1DA9E48DE7C13, B344E0D80D145578D5EC63A0, ); name = utilities; sourceTree = ""; }; 53E84A87793B1E891A92D8AE = {isa = PBXGroup; children = ( - 949CEE4B50C9FCC64A4C9ADB, - AC844506822152AE0161DCE1, - 971E5781732B5E6A389383C1, + 76C359A17AAF1A3204E8D97A, + 5D7AE1BEE357107F079EFD23, + 3CDBEF3BEFF89C48FAFF59C0, 061B5DC88D5AC0B6693BFFCE, B55E5E5FF300B7364E863B66, B5D049755C51850643A8FDD6, diff --git a/examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj b/examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj index a370a4ef8c..6f5f6e27dc 100644 --- a/examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj +++ b/examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj @@ -146,6 +146,9 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ + + true + true @@ -622,9 +625,6 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ true - - true - true @@ -1814,6 +1814,7 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ + @@ -2002,7 +2003,6 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ - @@ -2010,22 +2010,22 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ - + + - @@ -2466,6 +2466,7 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ + diff --git a/examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj.filters b/examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj.filters index 25c27df72a..aab878a347 100644 --- a/examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj.filters +++ b/examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj.filters @@ -385,6 +385,9 @@ NoiseGate\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -904,9 +907,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2226,6 +2226,9 @@ + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2790,9 +2793,6 @@ Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses - - Juce Modules\juce_audio_plugin_client\AU - Juce Modules\juce_audio_plugin_client\RTAS @@ -2814,9 +2814,6 @@ Juce Modules\juce_audio_plugin_client\utility - - Juce Modules\juce_audio_plugin_client\utility - Juce Modules\juce_audio_plugin_client\utility @@ -2835,6 +2832,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2850,6 +2850,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2859,9 +2862,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -4178,6 +4178,9 @@ Juce Modules\juce_audio_plugin_client\AU + + Juce Modules\juce_audio_plugin_client + Juce Modules\juce_audio_plugin_client diff --git a/examples/PlugInSamples/NoiseGate/Source/NoiseGate.cpp b/examples/PlugInSamples/NoiseGate/Source/NoiseGate.cpp index 90567a4788..1ab03abf81 100644 --- a/examples/PlugInSamples/NoiseGate/Source/NoiseGate.cpp +++ b/examples/PlugInSamples/NoiseGate/Source/NoiseGate.cpp @@ -28,50 +28,25 @@ class NoiseGate : public AudioProcessor { public: + //============================================================================== //============================================================================== NoiseGate() + : AudioProcessor (BusesProperties().withInput ("Input", AudioChannelSet::stereo()) + .withOutput ("Output", AudioChannelSet::stereo()) + .withInput ("Sidechain", AudioChannelSet::mono())) { addParameter (threshold = new AudioParameterFloat ("threshold", "Threshold", 0.0f, 1.0f, 0.5f)); addParameter (alpha = new AudioParameterFloat ("alpha", "Alpha", 0.0f, 1.0f, 0.8f)); - - // add single side-chain bus - busArrangement.inputBuses.add (AudioProcessorBus ("Sidechain In", AudioChannelSet::mono())); - - // To be compatible with all VST2 DAWs, it's best to pass through the sidechain - if (isVST2()) - busArrangement.outputBuses.add (AudioProcessorBus ("Sidechain Out", AudioChannelSet::mono())); } ~NoiseGate() {} //============================================================================== - bool setPreferredBusArrangement (bool isInputBus, int busIndex, const AudioChannelSet& preferred) override + bool isBusesLayoutSupported (const BusesLayout& layouts) const override { - const bool isMainBus = (busIndex == 0); - const bool isSideChain = (busIndex == 1); - - const int numChannels = preferred.size(); - - // do not allow disabling channels on main bus - if (numChannels == 0 && isMainBus) return false; - - // VST2 does not natively support sidechains/aux buses. - // But many DAWs treat the third input of a plug-in - // as a sidechain. So limit the main bus to stereo! - if (isVST2()) - { - if (isMainBus && numChannels != 2) return false; - - // we only allow mono sidechains in VST-2 - if (isSideChain && numChannels != 1) - return false; - } - - // always have the same channel layout on both input and output on the main bus - if (isMainBus && ! AudioProcessor::setPreferredBusArrangement (! isInputBus, busIndex, preferred)) - return false; - - return AudioProcessor::setPreferredBusArrangement (isInputBus, busIndex, preferred); + // the sidechain can take any layout, the main bus needs to be the same on the input and output + return (layouts.getMainInputChannelSet() == layouts.getMainOutputChannelSet() && + (! layouts.getMainInputChannelSet().isDisabled())); } //============================================================================== @@ -80,8 +55,8 @@ public: void processBlock (AudioSampleBuffer& buffer, MidiBuffer&) override { - AudioSampleBuffer mainInputOutput = busArrangement.getBusBuffer (buffer, true, 0); - AudioSampleBuffer sideChainInput = busArrangement.getBusBuffer (buffer, true, 1); + AudioSampleBuffer mainInputOutput = getBusBuffer(buffer, true, 0); + AudioSampleBuffer sideChainInput = getBusBuffer(buffer, true, 1); float alphaCopy = *alpha; float thresholdCopy = *threshold; @@ -105,9 +80,6 @@ public: if (sampleCountDown > 0) --sampleCountDown; } - - // VST-2 passes this through so clear the audio in this channel - sideChainInput.clear(); } //============================================================================== diff --git a/examples/PlugInSamples/Surround/Builds/MacOSX/Surround.xcodeproj/project.pbxproj b/examples/PlugInSamples/Surround/Builds/MacOSX/Surround.xcodeproj/project.pbxproj index 0a27b4fd62..d41fec81cb 100644 --- a/examples/PlugInSamples/Surround/Builds/MacOSX/Surround.xcodeproj/project.pbxproj +++ b/examples/PlugInSamples/Surround/Builds/MacOSX/Surround.xcodeproj/project.pbxproj @@ -90,6 +90,7 @@ 06CF19E1F0DF4A044230278E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_VST3.cpp"; path = "../../JuceLibraryCode/juce_audio_plugin_client_VST3.cpp"; sourceTree = "SOURCE_ROOT"; }; 06DDE24D31E77F83DA06B7A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPESynthesiser.h"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiser.h"; sourceTree = "SOURCE_ROOT"; }; 072F4B3C29A6C04BB17B1355 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../../../../modules/juce_core/misc/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0743C6FE48DD286E8790C59D = {isa = PBXFileReference; lastKnownFileType = file.r; name = AUResources.r; path = "../../../../../modules/juce_audio_plugin_client/AUResources.r"; sourceTree = "SOURCE_ROOT"; }; 075A41C17AEE46B78F1E8766 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdphuff.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jdphuff.c"; sourceTree = "SOURCE_ROOT"; }; 0761C9CA82D7B3B28E30742D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Matrix3D.h"; path = "../../../../../modules/juce_opengl/geometry/juce_Matrix3D.h"; sourceTree = "SOURCE_ROOT"; }; 078FC78D692AA90FD57D8E44 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../../../../modules/juce_gui_basics/widgets/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; }; @@ -105,7 +106,6 @@ 0977881EAF41DFC35199C670 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLContext.cpp"; path = "../../../../../modules/juce_opengl/opengl/juce_OpenGLContext.cpp"; sourceTree = "SOURCE_ROOT"; }; 09EF8164769B6C1C465043E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_VST2.cpp"; path = "../../JuceLibraryCode/juce_audio_plugin_client_VST2.cpp"; sourceTree = "SOURCE_ROOT"; }; 0A3EE1B4EE7FEF26D9E5578C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = masking.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/masking.h"; sourceTree = "SOURCE_ROOT"; }; - 0A5ADDE20162C3152A42CE9E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginBusUtilities.h"; path = "../../../../../modules/juce_audio_plugin_client/utility/juce_PluginBusUtilities.h"; sourceTree = "SOURCE_ROOT"; }; 0A88AADC41E465FAE7085BBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; }; 0ABB990275F24497DEDF9412 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../../../../modules/juce_events/native/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; 0AE5F1F1382361500E63BDB0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginInstance.h"; path = "../../../../../modules/juce_audio_processors/processors/juce_AudioPluginInstance.h"; sourceTree = "SOURCE_ROOT"; }; @@ -383,6 +383,7 @@ 43BACD20FB9287908F5F2D1C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = psy.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.h"; sourceTree = "SOURCE_ROOT"; }; 4449FFBC295C0EB93B13419A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Base64.h"; path = "../../../../../modules/juce_core/text/juce_Base64.h"; sourceTree = "SOURCE_ROOT"; }; 44B541AD4F960567EE0ECC87 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; + 44D46614FF8D639468A35932 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 44E64F895D6561C7F402FFAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarButton.cpp"; path = "../../../../../modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp"; sourceTree = "SOURCE_ROOT"; }; 44F55939DAE240E085F0E71B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorEditor.h"; path = "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h"; sourceTree = "SOURCE_ROOT"; }; 4571F26DCD01A1F55C9B534F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WeakReference.h"; path = "../../../../../modules/juce_core/memory/juce_WeakReference.h"; sourceTree = "SOURCE_ROOT"; }; @@ -658,6 +659,7 @@ 7A92E35CDEF1FCF3C7E445F1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; 7A9E2E8CF87D5390CB92A864 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = float.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/float.h"; sourceTree = "SOURCE_ROOT"; }; 7AF78655BE7A898AF6795F51 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LocalisedStrings.cpp"; path = "../../../../../modules/juce_core/text/juce_LocalisedStrings.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7B002478D9CBC13567054938 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectSound.cpp"; path = "../../../../../modules/juce_audio_devices/native/juce_win32_DirectSound.cpp"; sourceTree = "SOURCE_ROOT"; }; 7B0A88689774E44EBED72E5B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures.mm"; path = "../../JuceLibraryCode/juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; }; 7B0C46F2447F8BFBBF0DA34B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentMovementWatcher.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp"; sourceTree = "SOURCE_ROOT"; }; 7B0E2DCDF4BFA8DF381674BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterFloat.h"; path = "../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterFloat.h"; sourceTree = "SOURCE_ROOT"; }; @@ -676,6 +678,7 @@ 7DD98A1039A1A3CAD965B9E0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = format.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/format.h"; sourceTree = "SOURCE_ROOT"; }; 7DDE5E94DED6CAC6867415DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilenameComponent.h"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h"; sourceTree = "SOURCE_ROOT"; }; 7E08F28DB14A6D7D2844B6C5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 7E4528E31F83EB3DE3C759A8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDataConverters.cpp"; path = "../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp"; sourceTree = "SOURCE_ROOT"; }; 7EA3555E21692E5DF2440B10 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableRectangle.cpp"; path = "../../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; 7EBAED2F7E0534DBE53EC076 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = format.c; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/format.c"; sourceTree = "SOURCE_ROOT"; }; 7F0FB2F4C1A707652E7288BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -689,6 +692,7 @@ 80DF1F37EE64FF1C97B10234 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Memory.h"; path = "../../../../../modules/juce_core/memory/juce_Memory.h"; sourceTree = "SOURCE_ROOT"; }; 80EA2404E65720795807D3AE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../../../../modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; }; 80EC192E3258108B55EC9899 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorParameterWithID.h"; path = "../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h"; sourceTree = "SOURCE_ROOT"; }; + 80EFB73C0DD18C003A15150B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiFile.cpp"; path = "../../../../../modules/juce_audio_basics/midi/juce_MidiFile.cpp"; sourceTree = "SOURCE_ROOT"; }; 81240159F2C3C59ED09942C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../../../../modules/juce_core/native/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; }; 818ADA13F83B5D4610CF0A0C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../../../../modules/juce_gui_basics/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; }; 81A1CB2F3AA0DF4F64D16011 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctint.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jidctint.c"; sourceTree = "SOURCE_ROOT"; }; @@ -710,60 +714,53 @@ 863578C8C35502444456B6EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V3.cpp"; path = "../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp"; sourceTree = "SOURCE_ROOT"; }; 86382EEFD2D874C080F395EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_video.mm"; path = "../../JuceLibraryCode/juce_video.mm"; sourceTree = "SOURCE_ROOT"; }; 86422EC835DBE9E12ACAA844 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = memory.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/memory.h"; sourceTree = "SOURCE_ROOT"; }; + 86C60AB46BC50B750493C0C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; 870B95887E00B482EC3BCBC4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; }; + 878E3A6EA611E5474CCCF740 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; 87CBFFF0A410C24D08C77B9D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AffineTransform.cpp"; path = "../../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp"; sourceTree = "SOURCE_ROOT"; }; 884753558BC1F3FA3CD36289 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 8884CB197E61E62731D1A4B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../../../../modules/juce_core/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; }; 889215816EC0BE292B4FC278 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 88B47C0A3A0E52A0A69E85DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTouchMapper.h"; path = "../../../../../modules/juce_gui_basics/native/juce_MultiTouchMapper.h"; sourceTree = "SOURCE_ROOT"; }; 88EBFB20CA512CF5BE712220 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcapimin.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jcapimin.c"; sourceTree = "SOURCE_ROOT"; }; 8923277431C31D4E6A967800 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBoundsConstrainer.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp"; sourceTree = "SOURCE_ROOT"; }; 89276E21CE2AB6ED85513AA8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathIterator.cpp"; path = "../../../../../modules/juce_graphics/geometry/juce_PathIterator.cpp"; sourceTree = "SOURCE_ROOT"; }; - 89685AA70302A3738E626A4B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; 897466367AE90A6757BD78AA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_VST_Wrapper.mm"; path = "../../../../../modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.mm"; sourceTree = "SOURCE_ROOT"; }; 89A480D06355B8786C5FCAC2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwio.c; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngwio.c"; sourceTree = "SOURCE_ROOT"; }; 89DB87A634C78DA7F3891C19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLRenderer.h"; path = "../../../../../modules/juce_opengl/opengl/juce_OpenGLRenderer.h"; sourceTree = "SOURCE_ROOT"; }; 89F91578BC83BFC96AC2610F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; }; - 8A41776B06DC327163E64BF3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_JackAudio.cpp"; path = "../../../../../modules/juce_audio_devices/native/juce_linux_JackAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; 8A604B4BD445F2F0F2ED6C96 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourSelector.cpp"; path = "../../../../../modules/juce_gui_extra/misc/juce_ColourSelector.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8AB1217C7D9CEC5CA4CE87B9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AnimatedPositionBehaviours.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h"; sourceTree = "SOURCE_ROOT"; }; 8B2B33EB8FE2027523BD9ADD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyMappingEditorComponent.h"; path = "../../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 8D2F64C046BBAAA084369818 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ProgressBar.cpp"; path = "../../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8C3432BC2BDC534720A9DBB9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngrutil.c; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngrutil.c"; sourceTree = "SOURCE_ROOT"; }; 8D3B6133B6EFF1551DA6A0B4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_8.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_8.h"; sourceTree = "SOURCE_ROOT"; }; 8DC3D1402CD78E1E728A885C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_VST_Wrapper.cpp"; path = "../../../../../modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8E11074D4A9A023AE33D2777 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CheckSettingMacros.h"; path = "../../../../../modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h"; sourceTree = "SOURCE_ROOT"; }; + 8DCC53AC83A1540BF58AF95D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; 8E5677A16F98C56CAA7F2842 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_16.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_16.h"; sourceTree = "SOURCE_ROOT"; }; - 8EE2300EB5893E6FE4447464 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AAX_Modifier_Injector.h"; path = "../../../../../modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h"; sourceTree = "SOURCE_ROOT"; }; - 90593FC8C1E0DF38F5C4E13C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_32.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_32.h"; sourceTree = "SOURCE_ROOT"; }; 91B36A38A2515EACFDB74FF2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "stream_encoder.h"; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_encoder.h"; sourceTree = "SOURCE_ROOT"; }; 91DC52EFEE54AA6A25F414F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilter.h"; path = "../../../../../modules/juce_audio_basics/effects/juce_IIRFilter.h"; sourceTree = "SOURCE_ROOT"; }; - 9211728499CBEA14A9129F44 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "stream_decoder.h"; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_decoder.h"; sourceTree = "SOURCE_ROOT"; }; - A676FFA1BC32B4235962B41B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "stream_encoder.h"; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/stream_encoder.h"; sourceTree = "SOURCE_ROOT"; }; - BB118876CBEBD25875FF399B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPEZoneLayout.h"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPEZoneLayout.h"; sourceTree = "SOURCE_ROOT"; }; - C81E581814B8F309B1A76E40 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FloatVectorOperations.cpp"; path = "../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp"; sourceTree = "SOURCE_ROOT"; }; + AAF3F0CAB750C7CD3BF62C90 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; D035D1C2F16559D0BB4F80D0 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Surround.vst3; sourceTree = "BUILT_PRODUCTS_DIR"; }; 79FE5C3ECC20E6354609E715 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Surround.component; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 7B002478D9CBC13567054938 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectSound.cpp"; path = "../../../../../modules/juce_audio_devices/native/juce_win32_DirectSound.cpp"; sourceTree = "SOURCE_ROOT"; }; 7B09ECEA92A79A22173B9A1A = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; }; - 7E4528E31F83EB3DE3C759A8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDataConverters.cpp"; path = "../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp"; sourceTree = "SOURCE_ROOT"; }; 7E9EEE55C07DEB78803DBF5B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPEInstrument.h"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPEInstrument.h"; sourceTree = "SOURCE_ROOT"; }; - 80EFB73C0DD18C003A15150B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiFile.cpp"; path = "../../../../../modules/juce_audio_basics/midi/juce_MidiFile.cpp"; sourceTree = "SOURCE_ROOT"; }; 83C89E3C13A5897E5A1A062E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPEMessages.h"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPEMessages.h"; sourceTree = "SOURCE_ROOT"; }; 85FAAFC7204659F3B375631F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiOutput.cpp"; path = "../../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp"; sourceTree = "SOURCE_ROOT"; }; - 86C60AB46BC50B750493C0C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; - 878E3A6EA611E5474CCCF740 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; - 8884CB197E61E62731D1A4B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StringArray.cpp"; path = "../../../../../modules/juce_core/text/juce_StringArray.cpp"; sourceTree = "SOURCE_ROOT"; }; + 89685AA70302A3738E626A4B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; 89BE99C79A12FAA559AB0958 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioCDReader.cpp"; path = "../../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; 8A0648AE319C0CEA55D7AD88 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenSL.cpp"; path = "../../../../../modules/juce_audio_devices/native/juce_android_OpenSL.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8A41776B06DC327163E64BF3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_JackAudio.cpp"; path = "../../../../../modules/juce_audio_devices/native/juce_linux_JackAudio.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8AB1217C7D9CEC5CA4CE87B9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AnimatedPositionBehaviours.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h"; sourceTree = "SOURCE_ROOT"; }; 8ACBFC171B28F02B7C79EC9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 8B61BBC7490B7EB09164C24E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VST3Headers.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VST3Headers.h"; sourceTree = "SOURCE_ROOT"; }; 8B8C8E45262B02EE3013C440 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeEditorComponent.cpp"; path = "../../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8C3432BC2BDC534720A9DBB9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngrutil.c; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngrutil.c"; sourceTree = "SOURCE_ROOT"; }; 8D136314D0A9E7C7A20F5252 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = infback.c; path = "../../../../../modules/juce_core/zip/zlib/infback.c"; sourceTree = "SOURCE_ROOT"; }; + 8D2F64C046BBAAA084369818 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ProgressBar.cpp"; path = "../../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.cpp"; sourceTree = "SOURCE_ROOT"; }; 8D7431A21F329A0623106F9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StandaloneFilterApp.cpp"; path = "../../../../../modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp"; sourceTree = "SOURCE_ROOT"; }; 8D8276FB197AE7CF5FBB3AB0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TopLevelWindow.cpp"; path = "../../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8DCC53AC83A1540BF58AF95D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 8E11074D4A9A023AE33D2777 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CheckSettingMacros.h"; path = "../../../../../modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h"; sourceTree = "SOURCE_ROOT"; }; 8E28587642CBB61611683FD2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; }; 8E6335DFBAE378576EF03F31 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MountedVolumeListChangeDetector.h"; path = "../../../../../modules/juce_events/messages/juce_MountedVolumeListChangeDetector.h"; sourceTree = "SOURCE_ROOT"; }; + 8EE2300EB5893E6FE4447464 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AAX_Modifier_Injector.h"; path = "../../../../../modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h"; sourceTree = "SOURCE_ROOT"; }; 8F2975B67CB7CCA0D0F60988 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HyperlinkButton.h"; path = "../../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.h"; sourceTree = "SOURCE_ROOT"; }; 8F4F948E9300D459AF943E59 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jmorecfg.h; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jmorecfg.h"; sourceTree = "SOURCE_ROOT"; }; 8F55DF38EC1E6CF8D9997E8C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_win32_ComSmartPtr.h"; path = "../../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h"; sourceTree = "SOURCE_ROOT"; }; @@ -771,6 +768,7 @@ 8FB6FBE0529C3103625CCD7F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLHelpers.h"; path = "../../../../../modules/juce_opengl/opengl/juce_OpenGLHelpers.h"; sourceTree = "SOURCE_ROOT"; }; 90173E41D4452D99A6315DCF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileLogger.cpp"; path = "../../../../../modules/juce_core/logging/juce_FileLogger.cpp"; sourceTree = "SOURCE_ROOT"; }; 903F61DB5200F7F044160307 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 90593FC8C1E0DF38F5C4E13C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_32.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_32.h"; sourceTree = "SOURCE_ROOT"; }; 9074CCFE08F3965E4129AC84 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_events.mm"; path = "../../../../../modules/juce_events/juce_events.mm"; sourceTree = "SOURCE_ROOT"; }; 907ECB8961B34F538328C66D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_formats.h"; path = "../../../../../modules/juce_audio_formats/juce_audio_formats.h"; sourceTree = "SOURCE_ROOT"; }; 909AD17AC8323FE339E5B6E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeEditorComponent.h"; path = "../../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -781,6 +779,7 @@ 91195801FB4FFF7D7DAF68AA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; 9195DEDEEFF11C231AD6E499 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Rectangle.h"; path = "../../../../../modules/juce_graphics/geometry/juce_Rectangle.h"; sourceTree = "SOURCE_ROOT"; }; 91F315675BE1A7FBF2E24F0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = all.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/all.h"; sourceTree = "SOURCE_ROOT"; }; + 9211728499CBEA14A9129F44 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "stream_decoder.h"; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_decoder.h"; sourceTree = "SOURCE_ROOT"; }; 924B473BB36A76EAF10CAF93 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 924E35B4AEA8576E57F72C6D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../../../modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; 92898F19C5760642BD7CA2EC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_44.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44.h"; sourceTree = "SOURCE_ROOT"; }; @@ -798,6 +797,7 @@ 95F3F4EDFF78C11D7800BCF2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Windowing.cpp"; path = "../../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; 963CF5D3B2B91301FCF3A3B2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextLayout.cpp"; path = "../../../../../modules/juce_graphics/fonts/juce_TextLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; 96A4F0328C23FC0CDADA39EB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUOutputElement.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputElement.h"; sourceTree = "SOURCE_ROOT"; }; + 96B0793AFF17F47A6F795480 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; 971E95ECA8E3B77690AD30FF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcmaster.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jcmaster.c"; sourceTree = "SOURCE_ROOT"; }; 97486545E0DEF7983FD5CA4A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VST3PluginFormat.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; 975BB97EED05CDBCFB755C9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; @@ -851,7 +851,6 @@ A225CB6D4E1FEA0E79DDE776 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Path.cpp"; path = "../../../../../modules/juce_graphics/geometry/juce_Path.cpp"; sourceTree = "SOURCE_ROOT"; }; A28E9D58711A59C0AFF79AAF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwrite.c; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngwrite.c"; sourceTree = "SOURCE_ROOT"; }; A367A1757697F29B157B58EF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; - A39E5BE0E10E81989DF6858B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; A4302A67A7EC2D0DCAACD44E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../../../../modules/juce_core/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; }; A4362F1C6092248CA95F5D9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSourcePlayer.cpp"; path = "../../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; A458551FD64CCD79F3BE8C18 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FlacAudioFormat.cpp"; path = "../../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -862,6 +861,7 @@ A5844E2B9968F2C3657EDD5A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseCursor.cpp"; path = "../../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.cpp"; sourceTree = "SOURCE_ROOT"; }; A6294577F75BAB1F17306F70 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Range.h"; path = "../../../../../modules/juce_core/maths/juce_Range.h"; sourceTree = "SOURCE_ROOT"; }; A63DA17D6F3A6015EE7BA412 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Random.cpp"; path = "../../../../../modules/juce_core/maths/juce_Random.cpp"; sourceTree = "SOURCE_ROOT"; }; + A676FFA1BC32B4235962B41B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "stream_encoder.h"; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/stream_encoder.h"; sourceTree = "SOURCE_ROOT"; }; A6C5A9B86B568A68DB4192E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = trees.c; path = "../../../../../modules/juce_core/zip/zlib/trees.c"; sourceTree = "SOURCE_ROOT"; }; A70EECB9198195AFDADBC672 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; }; A71D074B6F3ECE49A86444C0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ButtonPropertyComponent.h"; path = "../../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -963,6 +963,7 @@ BA3594967B27A2A928060559 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUViewLocalizedStringKeys.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUViewLocalizedStringKeys.h"; sourceTree = "SOURCE_ROOT"; }; BA4123F2CAB9039F80B94EB3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLFrameBuffer.cpp"; path = "../../../../../modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; BB03F74A83F9A6F2259918C7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AffineTransform.h"; path = "../../../../../modules/juce_graphics/geometry/juce_AffineTransform.h"; sourceTree = "SOURCE_ROOT"; }; + BB118876CBEBD25875FF399B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPEZoneLayout.h"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPEZoneLayout.h"; sourceTree = "SOURCE_ROOT"; }; BB51D4FAE50C56946D409DA7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSubsectionReader.h"; path = "../../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.h"; sourceTree = "SOURCE_ROOT"; }; BC9BDCFF1ACF147F86BF66B0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAAudioChannelLayout.cpp; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAudioChannelLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; BCC738DF29CDA4AB6B05DAB6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_8.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_8.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1044,6 +1045,7 @@ C78FFBAAEACD3BC09738D6F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBrowserComponent.cpp"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; C7FBC198B3D5BDE2404AA734 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MissingGLDefinitions.h"; path = "../../../../../modules/juce_opengl/native/juce_MissingGLDefinitions.h"; sourceTree = "SOURCE_ROOT"; }; C8028216F65D0A69286115BE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LocalisedStrings.h"; path = "../../../../../modules/juce_core/text/juce_LocalisedStrings.h"; sourceTree = "SOURCE_ROOT"; }; + C81E581814B8F309B1A76E40 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FloatVectorOperations.cpp"; path = "../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp"; sourceTree = "SOURCE_ROOT"; }; C871B22F92AAFA7407C9C4A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../../../../modules/juce_events/native/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; }; C88E906306DDB0582DCE5BAE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginListComponent.cpp"; path = "../../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; C89E0E2EFF2CFBEE17DC31B2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcsample.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jcsample.c"; sourceTree = "SOURCE_ROOT"; }; @@ -1054,6 +1056,7 @@ C93881E59063E7106E77762C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../../../../modules/juce_gui_basics/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; }; C97229429AD64768E560F4AD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_VST3_Wrapper.cpp"; path = "../../../../../modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; C97789C4620368AE1E3F9F22 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarModel.h"; path = "../../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.h"; sourceTree = "SOURCE_ROOT"; }; + C9968C6DEAADC66A107D2E57 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; C9A738CA9F1B20D0BC43A890 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "floor_all.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/floor_all.h"; sourceTree = "SOURCE_ROOT"; }; C9B1759B112A657294509208 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_SystemTrayIcon.cpp"; path = "../../../../../modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; C9C018C9DA67A508FA7F9AAD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1155,7 +1158,6 @@ DC477EBD13032B49B57ED3EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngstruct.h; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngstruct.h"; sourceTree = "SOURCE_ROOT"; }; DC7F4F7D64F6DB5BF360384A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colour.h"; path = "../../../../../modules/juce_graphics/colour/juce_Colour.h"; sourceTree = "SOURCE_ROOT"; }; DCA11D10BC9B65E98E4E64D6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FFT.cpp"; path = "../../../../../modules/juce_audio_basics/effects/juce_FFT.cpp"; sourceTree = "SOURCE_ROOT"; }; - DCB83D5211F0F810B7916BCE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; DCC66A4C74A91E964A7EE148 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PreferencesPanel.h"; path = "../../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.h"; sourceTree = "SOURCE_ROOT"; }; DD15AF1CC687CDCEF70C08B2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEValue.cpp"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPEValue.cpp"; sourceTree = "SOURCE_ROOT"; }; DD38475B019BCACDF8885E87 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_basics.cpp"; path = "../../../../../modules/juce_audio_basics/juce_audio_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1210,7 +1212,6 @@ E7C1051E14A76960ACA9229A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; }; E7E5A36B33CBED5519C867D5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; E8080038C3E5B30024C91399 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDReader.mm"; path = "../../../../../modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm"; sourceTree = "SOURCE_ROOT"; }; - E8154A3245B28F12461708E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../../modules/juce_audio_plugin_client/AU/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; E83CB8AC3821B462D206DBCA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; }; E85368570E19D590974A0B86 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = float.c; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/float.c"; sourceTree = "SOURCE_ROOT"; }; E86E8EC094E7ADDF0BBD0426 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../../../modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1337,6 +1338,8 @@ 3F579A4A6D6B636B2DB71785 = {isa = PBXGroup; children = ( 2DB947CA93ECB4CCB1877027, ); name = Surround; sourceTree = ""; }; FD7B97BF9BEE0E2C82303313 = {isa = PBXGroup; children = ( + C9968C6DEAADC66A107D2E57, + AAF3F0CAB750C7CD3BF62C90, 7E4528E31F83EB3DE3C759A8, 51818ABE8CD0F583889641E6, D30ABE36C88A10D28AED416B, @@ -1663,7 +1666,7 @@ 907ECB8961B34F538328C66D, 35B628AB8DFBC44E9BBF1EF9, 907ECB8961B34F538328C66D, ); name = "juce_audio_formats"; sourceTree = ""; }; - B03491D4B8689C8544B25B87 = {isa = PBXGroup; children = ( + 59EFD71AC381499D7DE5CAF1 = {isa = PBXGroup; children = ( 8EE2300EB5893E6FE4447464, 4B133B1F9874EBA8953DCDF9, ); name = AAX; sourceTree = ""; }; DA59CA30765E869649A5C076 = {isa = PBXGroup; children = ( @@ -1725,10 +1728,9 @@ 9497F6127D98FC93F698D42F, ); name = CoreAudioUtilityClasses; sourceTree = ""; }; 682B81CC505D8F57DEA7E0AC = {isa = PBXGroup; children = ( DA59CA30765E869649A5C076, - E8154A3245B28F12461708E8, 7BD189FD9F797A43D5818C6A, 3A925CFFB7F60920C14EC144, ); name = AU; sourceTree = ""; }; - E314FF34EAECD51445016614 = {isa = PBXGroup; children = ( + C43B54ECAF72491ABBAE8442 = {isa = PBXGroup; children = ( 5583A45CA7C609741BB8B9EF, 55DFDE807E321ABD1E879E41, AB04D06155A5E52B0658F3D6, @@ -1736,32 +1738,31 @@ 7D2CA0CEB4019C90AE75474C, C52ED1AAE029660B7F7E195A, 283ADB95E9375730B1389880, ); name = RTAS; sourceTree = ""; }; - 18C29C50CF51AC97F9938ADF = {isa = PBXGroup; children = ( + 1276C51B85D1492646F93659 = {isa = PBXGroup; children = ( 8D7431A21F329A0623106F9F, F468166F5B1642808084C964, ); name = Standalone; sourceTree = ""; }; - 0B1A4F8E5F393124D0B107B5 = {isa = PBXGroup; children = ( + 8011B99003E3661FF069C705 = {isa = PBXGroup; children = ( EDF3BB834AA5EA021B07F5FA, 8E11074D4A9A023AE33D2777, 377EE4F29DE0ECCB0B0F8EBD, 133D8BD5E70B617551984B9B, 6F7568F9157F0803A2E7EC54, - 0A5ADDE20162C3152A42CE9E, ADCF8757250D34CD709BF18E, F6AE18B04CC3D2BB90189253, D7D538F79741F629EC0B174F, ); name = utility; sourceTree = ""; }; - 2B8EF8A8BCA0AB75EDE7FB7A = {isa = PBXGroup; children = ( + 7674EB31959CA0AF107A3823 = {isa = PBXGroup; children = ( 8DC3D1402CD78E1E728A885C, 897466367AE90A6757BD78AA, ); name = VST; sourceTree = ""; }; - 6BA032A25FA6EF715361DBA9 = {isa = PBXGroup; children = ( + A34BB9DEE120E5701A4123B3 = {isa = PBXGroup; children = ( C97229429AD64768E560F4AD, ); name = VST3; sourceTree = ""; }; 3C13BDA7064F6A67ED81C57C = {isa = PBXGroup; children = ( - B03491D4B8689C8544B25B87, + 59EFD71AC381499D7DE5CAF1, 682B81CC505D8F57DEA7E0AC, - E314FF34EAECD51445016614, - 18C29C50CF51AC97F9938ADF, - 0B1A4F8E5F393124D0B107B5, - 2B8EF8A8BCA0AB75EDE7FB7A, - 6BA032A25FA6EF715361DBA9, + C43B54ECAF72491ABBAE8442, + 1276C51B85D1492646F93659, + 8011B99003E3661FF069C705, + 7674EB31959CA0AF107A3823, + A34BB9DEE120E5701A4123B3, 764CC7C9098B8A13EE1E2BDD, 5E4DECB460D73AB4F75A0807, 98DEEE52698DC2DD0C22A537, @@ -1781,12 +1782,13 @@ DB693059E35EA80E207B901F, 2C6292FF430C369E7500CD98, 764CC7C9098B8A13EE1E2BDD, ); name = "juce_audio_plugin_client"; sourceTree = ""; }; - 1F033224B11870E39FE7A4E1 = {isa = PBXGroup; children = ( + 54B80031949B06FC3DA6A7AC = {isa = PBXGroup; children = ( 298205CEB528B1048E7572B7, 6E3908F6B6B28178135530FE, BD66E983F2E3845F261B1F69, CFBCAC450FE065C81127FF44, ); name = format; sourceTree = ""; }; - 490FD3018F03DE75DFB18E1C = {isa = PBXGroup; children = ( + A2F8370B752D9FA5287DFABF = {isa = PBXGroup; children = ( + 44D46614FF8D639468A35932, A9EC026B8F9D008D1870D46E, CDB072F338849BCCED75AECC, 9D6DC6AF988E805DF79A9732, @@ -1795,13 +1797,12 @@ 8B61BBC7490B7EB09164C24E, C3DA1C57A25DCB12F2DF99AB, 97486545E0DEF7983FD5CA4A, + 96B0793AFF17F47A6F795480, 84339DDD6E22F3870FA464D5, 0865F1C307283AE02E351740, 6EA1D72172113F26FB6B928E, 9BA022320B40176B7D34174A, ); name = "format_types"; sourceTree = ""; }; - 142E98D2FD115DB9A72B3501 = {isa = PBXGroup; children = ( - A39E5BE0E10E81989DF6858B, - DCB83D5211F0F810B7916BCE, + 9224EF46BF85D7ADD711F9BF = {isa = PBXGroup; children = ( 188DD1909D466AF4B6E69E4F, 0AE5F1F1382361500E63BDB0, 46EBECAA8BC65AD7DF5B3E9F, @@ -1833,9 +1834,9 @@ 3DA9B49B4D22E5DA94F64E93, DE8FC4A46D98C042706FD720, ); name = utilities; sourceTree = ""; }; C6916C9DD58668909AC4986C = {isa = PBXGroup; children = ( - 1F033224B11870E39FE7A4E1, - 490FD3018F03DE75DFB18E1C, - 142E98D2FD115DB9A72B3501, + 54B80031949B06FC3DA6A7AC, + A2F8370B752D9FA5287DFABF, + 9224EF46BF85D7ADD711F9BF, E09940A3E11C887BDEFFC89B, 037559B8391F8F7FBAEB7C46, BEC55BA6148BD8041D098862, diff --git a/examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj b/examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj index db611ce1f6..893fbd5739 100644 --- a/examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj +++ b/examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj @@ -145,6 +145,9 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ + + true + true @@ -621,9 +624,6 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ true - - true - true @@ -1814,6 +1814,7 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ + @@ -2002,7 +2003,6 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ - @@ -2010,22 +2010,22 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ - + + - @@ -2466,6 +2466,7 @@ c:\SDKs\AAX\Utilities\CreatePackage.bat "$(OutDir)\$(TargetName).aaxplugin\ + diff --git a/examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj.filters b/examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj.filters index 7e31411e3b..53e1ec0c3a 100644 --- a/examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj.filters +++ b/examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj.filters @@ -385,6 +385,9 @@ Surround\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -904,9 +907,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2229,6 +2229,9 @@ Surround\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2793,9 +2796,6 @@ Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses - - Juce Modules\juce_audio_plugin_client\AU - Juce Modules\juce_audio_plugin_client\RTAS @@ -2817,9 +2817,6 @@ Juce Modules\juce_audio_plugin_client\utility - - Juce Modules\juce_audio_plugin_client\utility - Juce Modules\juce_audio_plugin_client\utility @@ -2838,6 +2835,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2853,6 +2853,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2862,9 +2865,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -4181,6 +4181,9 @@ Juce Modules\juce_audio_plugin_client\AU + + Juce Modules\juce_audio_plugin_client + Juce Modules\juce_audio_plugin_client diff --git a/examples/PlugInSamples/Surround/Source/SurroundEditor.h b/examples/PlugInSamples/Surround/Source/SurroundEditor.h index 23871c0710..cde04a5288 100644 --- a/examples/PlugInSamples/Surround/Source/SurroundEditor.h +++ b/examples/PlugInSamples/Surround/Source/SurroundEditor.h @@ -89,67 +89,71 @@ public: } } -private: - String getLayoutName() const + void updateGUI() { - if (AudioProcessor* p = getAudioProcessor()) - return p->busArrangement.outputBuses.getReference (0).channels.getDescription(); - - return "Unknown"; - } + const AudioChannelSet& channelSet = getAudioProcessor()->getChannelLayoutOfBus (false, 0); - void timerCallback() override - { - if (getAudioProcessor()->isSuspended() != lastSuspended) + if (channelSet != currentChannelLayout) { - lastSuspended = getAudioProcessor()->isSuspended(); + currentChannelLayout = channelSet; - const AudioChannelSet& channelSet = getAudioProcessor()->busArrangement.outputBuses.getReference (0).channels; + layoutTitle.setText (currentChannelLayout.getDescription(), NotificationType::dontSendNotification); + channelButtons.clear(); + activeChannels.resize (currentChannelLayout.size()); - if (channelSet != currentChannelLayout) + if (currentChannelLayout == AudioChannelSet::disabled()) { - currentChannelLayout = channelSet; - - layoutTitle.setText (currentChannelLayout.getDescription(), NotificationType::dontSendNotification); - channelButtons.clear(); - activeChannels.resize (currentChannelLayout.size()); + noChannelsLabel.setVisible (true); + } + else + { + const int numChannels = currentChannelLayout.size(); - if (currentChannelLayout == AudioChannelSet::disabled()) - { - noChannelsLabel.setVisible (true); - } - else + for (int i = 0; i < numChannels; ++i) { - const int numChannels = currentChannelLayout.size(); + const String channelName = + AudioChannelSet::getAbbreviatedChannelTypeName (currentChannelLayout.getTypeOfChannel (i)); - for (int i = 0; i < numChannels; ++i) - { - const String channelName = - AudioChannelSet::getAbbreviatedChannelTypeName (currentChannelLayout.getTypeOfChannel (i)); - - TextButton* newButton; - channelButtons.add (newButton = new TextButton (channelName, channelName)); + TextButton* newButton; + channelButtons.add (newButton = new TextButton (channelName, channelName)); - newButton->addListener (this); - addAndMakeVisible (newButton); - } - - noChannelsLabel.setVisible (false); - resized(); + newButton->addListener (this); + addAndMakeVisible (newButton); } - if (ChannelClickListener* listener = dynamic_cast (getAudioProcessor())) + noChannelsLabel.setVisible (false); + resized(); + } + + if (ChannelClickListener* listener = dynamic_cast (getAudioProcessor())) + { + for (int i = 0; i < activeChannels.size(); ++i) { - for (int i = 0; i < activeChannels.size(); ++i) - { - bool isActive = listener->isChannelActive (i); - activeChannels.getReference (i) = isActive; - channelButtons [i]->setColour (TextButton::buttonColourId, isActive ? Colours::lightsalmon : Colours::lightgrey); - channelButtons [i]->repaint(); - } + bool isActive = listener->isChannelActive (i); + activeChannels.getReference (i) = isActive; + channelButtons [i]->setColour (TextButton::buttonColourId, isActive ? Colours::lightsalmon : Colours::lightgrey); + channelButtons [i]->repaint(); } } } + } + +private: + String getLayoutName() const + { + if (AudioProcessor* p = getAudioProcessor()) + return p->getChannelLayoutOfBus (false, 0).getDescription(); + + return "Unknown"; + } + + void timerCallback() override + { + if (getAudioProcessor()->isSuspended() != lastSuspended) + { + lastSuspended = getAudioProcessor()->isSuspended(); + updateGUI(); + } if (! lastSuspended) { diff --git a/examples/PlugInSamples/Surround/Source/SurroundProcessor.cpp b/examples/PlugInSamples/Surround/Source/SurroundProcessor.cpp index 60a0757996..24075260b0 100644 --- a/examples/PlugInSamples/Surround/Source/SurroundProcessor.cpp +++ b/examples/PlugInSamples/Surround/Source/SurroundProcessor.cpp @@ -29,10 +29,15 @@ /** */ class SurroundProcessor : public AudioProcessor, - public ChannelClickListener + public ChannelClickListener, + private AsyncUpdater { public: - SurroundProcessor() {} + SurroundProcessor() + : AudioProcessor(BusesProperties().withInput ("Input", AudioChannelSet::stereo()) + .withOutput ("Output", AudioChannelSet::stereo())) + {} + ~SurroundProcessor() {} //============================================================================== @@ -41,11 +46,13 @@ public: channelClicked = 0; sampleOffset = static_cast (std::ceil (sampleRate)); - const int numChannels = busArrangement.inputBuses.getReference(0).channels.size(); + const int numChannels = getChannelCountOfBus (true, 0); channelActive.resize (numChannels); alphaCoeffs.resize (numChannels); reset(); + triggerAsyncUpdate(); + ignoreUnused (samplesPerBlock); } @@ -73,11 +80,14 @@ public: const int fillSamples = jmin (static_cast (std::ceil (getSampleRate())) - sampleOffset, buffer.getNumSamples()); - float* const channelBuffer = buffer.getWritePointer (channelClicked); - const float freq = (float) (440.0 / getSampleRate()); + if (isPositiveAndBelow (channelClicked, buffer.getNumChannels())) + { + float* const channelBuffer = buffer.getWritePointer (channelClicked); + const float freq = (float) (440.0 / getSampleRate()); - for (int i = 0; i < fillSamples; ++i) - channelBuffer[i] += std::sin (2.0f * float_Pi * freq * static_cast (sampleOffset++)); + for (int i = 0; i < fillSamples; ++i) + channelBuffer[i] += std::sin (2.0f * float_Pi * freq * static_cast (sampleOffset++)); + } } //============================================================================== @@ -85,18 +95,12 @@ public: bool hasEditor() const override { return true; } //============================================================================== - bool setPreferredBusArrangement (bool isInputBus, int busIndex, - const AudioChannelSet& preferred) override + bool isBusesLayoutSupported (const BusesLayout& layouts) const override { - if (! preferred.isDiscreteLayout()) - { - if (! AudioProcessor::setPreferredBusArrangement (! isInputBus, busIndex, preferred)) - return false; - - return AudioProcessor::setPreferredBusArrangement (isInputBus, busIndex, preferred); - } - - return false; + return ((! layouts.getMainInputChannelSet() .isDiscreteLayout()) + && (! layouts.getMainOutputChannelSet().isDiscreteLayout()) + && (layouts.getMainInputChannelSet() == layouts.getMainOutputChannelSet()) + && (! layouts.getMainInputChannelSet().isDisabled())); } void reset() override @@ -133,6 +137,13 @@ public: return channelActive [channelIndex] > 0; } + void handleAsyncUpdate() override + { + if (AudioProcessorEditor* editor = getActiveEditor()) + if (SurroundEditor* surroundEditor = dynamic_cast (editor)) + surroundEditor->updateGUI(); + } + private: Array channelActive; Array alphaCoeffs; diff --git a/examples/SimpleFFTExample/Builds/MacOSX/SimpleFFTExample.xcodeproj/project.pbxproj b/examples/SimpleFFTExample/Builds/MacOSX/SimpleFFTExample.xcodeproj/project.pbxproj index 58da79d847..964d7daa77 100644 --- a/examples/SimpleFFTExample/Builds/MacOSX/SimpleFFTExample.xcodeproj/project.pbxproj +++ b/examples/SimpleFFTExample/Builds/MacOSX/SimpleFFTExample.xcodeproj/project.pbxproj @@ -37,6 +37,7 @@ 019793450E44DD660AFB5275 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiInput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiInput.h"; sourceTree = "SOURCE_ROOT"; }; 01FB698FB741F319A6129EA4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Base64.h"; path = "../../../../modules/juce_core/text/juce_Base64.h"; sourceTree = "SOURCE_ROOT"; }; 02053B74102A503EF8603456 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 02204D55E4EE1E44DEBAD657 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 0254CA8E3ED96CBA7EFEA76C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_32.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_32.h"; sourceTree = "SOURCE_ROOT"; }; 025AC0D5D2B1AE4E2410287C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_BluetoothMidiDevicePairingDialogue.mm"; path = "../../../../modules/juce_audio_utils/native/juce_ios_BluetoothMidiDevicePairingDialogue.mm"; sourceTree = "SOURCE_ROOT"; }; 0262F34C86B80ABBFA3E2C01 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -547,7 +548,6 @@ 7A3AFC22F38D15E60F993014 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorParameterWithID.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h"; sourceTree = "SOURCE_ROOT"; }; 7AB3EA3F5285C4A6DFF616E7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KnownPluginList.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.h"; sourceTree = "SOURCE_ROOT"; }; 7ABEE8EEEB77950A1F8C8C36 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = psy.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.h"; sourceTree = "SOURCE_ROOT"; }; - 7AD9F8DCE5E6DD6C654B55BC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 7AE3FE832F126B64A60CBE60 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../../../modules/juce_core/javascript/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; }; 7B0401C3C23BF51F7E3ADF33 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; 7B241F0D5C7EBF2222786F93 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; @@ -563,6 +563,7 @@ 7D61D4B3E73C059E8CDC2A99 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilenameComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h"; sourceTree = "SOURCE_ROOT"; }; 7D73BA773479C807D1BFE717 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 7DBFDDC88FCF6E7D97D98FDF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; }; + 7DEE00305B5ADF847EB45173 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; 7E4EA529BF3CD69635A1F763 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; }; 7E71FEBAB37102A23A1BE63C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; }; 7E80A640C93AF39D8553CC02 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourSelector.h"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.h"; sourceTree = "SOURCE_ROOT"; }; @@ -741,6 +742,7 @@ A678CAA3442CCF50F8A7EE36 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h"; sourceTree = "SOURCE_ROOT"; }; A68C448F3CE0DFDA1D008930 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioPluginFormat.cpp"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; A695D18E3D5521906E2AA55B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; + A69944BDE6C112C53CAC2AE4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; A6CAD508F0FEE8559E47EBE9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; A6CF6F4069079124AC88337B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = backends.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/backends.h"; sourceTree = "SOURCE_ROOT"; }; A6D3F5D40B4F2DDDAF4BA012 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -808,7 +810,6 @@ B0EE6468EFB8F633546F6022 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; }; B0EF61D78A5BA42D902B896F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../../modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; B13684376F3496E299A24102 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; }; - B14240B94BD8FE725C8130BD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; B1A428B8F2E11FAA9B6782FA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwio.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngwio.c"; sourceTree = "SOURCE_ROOT"; }; B206847E2EA213A5652E677B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertySet.h"; path = "../../../../modules/juce_core/containers/juce_PropertySet.h"; sourceTree = "SOURCE_ROOT"; }; B264E554EED764BBE5EA96DF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CriticalSection.h"; path = "../../../../modules/juce_core/threads/juce_CriticalSection.h"; sourceTree = "SOURCE_ROOT"; }; @@ -908,6 +909,7 @@ C2DAD3C576EC299481B9CC96 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = zconf.in.h; path = "../../../../modules/juce_core/zip/zlib/zconf.in.h"; sourceTree = "SOURCE_ROOT"; }; C30B7C2D2870FD4A3DA497C7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_formats.mm"; path = "../../JuceLibraryCode/juce_audio_formats.mm"; sourceTree = "SOURCE_ROOT"; }; C38BB2DED46194AEF06E50BB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdatasrc.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdatasrc.c"; sourceTree = "SOURCE_ROOT"; }; + C3A1ABC199E3DDB8A9F0F32A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; C3B5BB9DEDDFA9F6CEF46D95 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; }; C45E0183DD648356B967145E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawablePath.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.h"; sourceTree = "SOURCE_ROOT"; }; C469659506D7D986391C73AC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_URL.cpp"; path = "../../../../modules/juce_core/network/juce_URL.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1159,6 +1161,8 @@ 9E39F32C1BF5217D902DEEE5 = {isa = PBXGroup; children = ( C7DA57C6F0483BBE545059A4, ); name = SimpleFFTExample; sourceTree = ""; }; 36B3A671E122DCC32B5D8616 = {isa = PBXGroup; children = ( + A69944BDE6C112C53CAC2AE4, + 02204D55E4EE1E44DEBAD657, 0C37A3523C3777001B3F6DD9, F39B08CC310DADAE5A3BD832, DED00015F1322985369E9264, @@ -1485,12 +1489,13 @@ 206F3372B58C677D2E448DE9, 1EFD81C556E115BF789491EE, 206F3372B58C677D2E448DE9, ); name = "juce_audio_formats"; sourceTree = ""; }; - 4A29C8C4279CA0A256D79601 = {isa = PBXGroup; children = ( + B9F3B9D929958C5A01CF2819 = {isa = PBXGroup; children = ( A68C448F3CE0DFDA1D008930, 8D8F26BA443E390AFDE0F099, BBA00BC1C9047924AA81A9C5, 41BB68C9176E1F306F7F6CAB, ); name = format; sourceTree = ""; }; - D23F25C4AEE1B555279BCE31 = {isa = PBXGroup; children = ( + 0E9E2BCC5CA576472FCB7088 = {isa = PBXGroup; children = ( + C3A1ABC199E3DDB8A9F0F32A, B0ABCB84564FEFAA4ED50E6B, C8FC943DEE244BDB4EC55F3D, 4B559C22A630B9A43D129C2A, @@ -1499,13 +1504,12 @@ B7AE0149FF49C6EE294D03EE, 47DF39DDF6085A33F2282CF1, E8D30B5E295B1C331EA24873, + 7DEE00305B5ADF847EB45173, 9F771CD14B117446FB2BF9E9, 4940BC726C0DA4D4F4EB403C, 8FE177F5571307A339832F6E, 97346F3788D1AAC32D47D4D4, ); name = "format_types"; sourceTree = ""; }; - FEFEB2419B6FF59C547C1729 = {isa = PBXGroup; children = ( - 7AD9F8DCE5E6DD6C654B55BC, - B14240B94BD8FE725C8130BD, + ACDDE7FF469FD01C0B79AEAD = {isa = PBXGroup; children = ( 4F37527C7555AB18B31DBD16, 8CC95C9201C634BD544FFBEC, 8F26EB74E15A475E40CB4FEE, @@ -1537,9 +1541,9 @@ 547509DF27DD4989FA9F0B9E, CFF7A195B95750070C28B75B, ); name = utilities; sourceTree = ""; }; 8DA3B0DCA685300AE02F6C09 = {isa = PBXGroup; children = ( - 4A29C8C4279CA0A256D79601, - D23F25C4AEE1B555279BCE31, - FEFEB2419B6FF59C547C1729, + B9F3B9D929958C5A01CF2819, + 0E9E2BCC5CA576472FCB7088, + ACDDE7FF469FD01C0B79AEAD, B0445834E537943B1934C571, 54475BF7C7F92DE3E9040933, 939ECC7F5C8BA2A301AF8A95, diff --git a/examples/SimpleFFTExample/Builds/VisualStudio2013/SimpleFFTExample.vcxproj b/examples/SimpleFFTExample/Builds/VisualStudio2013/SimpleFFTExample.vcxproj index bdc47035fd..e5e3012e19 100644 --- a/examples/SimpleFFTExample/Builds/VisualStudio2013/SimpleFFTExample.vcxproj +++ b/examples/SimpleFFTExample/Builds/VisualStudio2013/SimpleFFTExample.vcxproj @@ -130,6 +130,9 @@ + + true + true @@ -481,9 +484,6 @@ true - - true - true @@ -1632,6 +1632,7 @@ + @@ -1785,15 +1786,16 @@ + + - diff --git a/examples/SimpleFFTExample/Builds/VisualStudio2013/SimpleFFTExample.vcxproj.filters b/examples/SimpleFFTExample/Builds/VisualStudio2013/SimpleFFTExample.vcxproj.filters index 26eead2037..70246b1575 100644 --- a/examples/SimpleFFTExample/Builds/VisualStudio2013/SimpleFFTExample.vcxproj.filters +++ b/examples/SimpleFFTExample/Builds/VisualStudio2013/SimpleFFTExample.vcxproj.filters @@ -334,6 +334,9 @@ SimpleFFTExample\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -703,9 +706,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -1968,6 +1968,9 @@ SimpleFFTExample\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2427,6 +2430,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2442,6 +2448,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2451,9 +2460,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj b/examples/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj index 04d2b56b54..17b9b30f02 100644 --- a/examples/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj +++ b/examples/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj @@ -85,6 +85,7 @@ 073544D5D22C9975CC308E48 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../../modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; 0744FC9F0D2B00B97F42D90F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Javascript.cpp"; path = "../../../../modules/juce_core/javascript/juce_Javascript.cpp"; sourceTree = "SOURCE_ROOT"; }; 07552B6714E651587D8E0CB8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.h"; sourceTree = "SOURCE_ROOT"; }; + 075B6760CAE7FF0EF2739B6B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 077868026EE8ADEC275EF534 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../../../modules/juce_core/misc/juce_Result.h"; sourceTree = "SOURCE_ROOT"; }; 077E39BD4365098B13F2F29B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; 07C34ADD8CE97E4606E55EFA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = png.h; path = "../../../../modules/juce_graphics/image_formats/pnglib/png.h"; sourceTree = "SOURCE_ROOT"; }; @@ -186,7 +187,6 @@ 1BAF465494E832FF1CDD985A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEZoneLayout.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPEZoneLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; 1BB7481F0104929D679508EE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableEdgeComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 1BE2A39FBE87B3DA36C02468 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDirectoryScanner.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1C49A0C6E4032A29D5C05616 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 1C7E45B063CBDED867290BE4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LeakedObjectDetector.h"; path = "../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h"; sourceTree = "SOURCE_ROOT"; }; 1CC63825EF38EC63EE2196E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PlatformDefs.h"; path = "../../../../modules/juce_core/system/juce_PlatformDefs.h"; sourceTree = "SOURCE_ROOT"; }; 1CF9C794D7A955EA89D8B5CB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MusicDeviceBase.cpp; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/MusicDeviceBase.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -314,6 +314,7 @@ 3804B5F8CBFB5862A5EFAADE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CoreAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; 380F639D605E383E4930DA59 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; 383CCB4FB4F70FDE749AFEA0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_android_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + 388291AF3C0E60DD73B276D2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; 38B25B83DCEAC8BCDFD527E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; 38C41D6ECD6B0821752F9237 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = envelope.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.h"; sourceTree = "SOURCE_ROOT"; }; 38CAA3A693AE6206F083F175 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -349,7 +350,6 @@ 3E6923B18B248C0A0506D626 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = res0.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/res0.c"; sourceTree = "SOURCE_ROOT"; }; 3E72A2633AFCB9B9FC2E3B81 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; }; 3F05190135896541D991C075 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_CoreGraphicsContext.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm"; sourceTree = "SOURCE_ROOT"; }; - 3F16A54F45ED278001F4CA09 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_plugin_client/AU/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 3F89076A842128643D3E2F3D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; 3F8F5E0EF93E9B95DD17CFB6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_android_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; 3FE7F76D4D023295BCEC0E65 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; @@ -411,7 +411,6 @@ 4CD4D1B175AC037DFAF3E2E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPESynthesiserBase.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.h"; sourceTree = "SOURCE_ROOT"; }; 4CD51FE9C1157452F5DDDF68 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_RTAS_utils.cpp"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_utils.cpp"; sourceTree = "SOURCE_ROOT"; }; 4CE2C5B8F3B9176330D7E38D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedPipe.cpp"; path = "../../../../modules/juce_core/network/juce_NamedPipe.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4D314DC059A8F7D9AA3D20B2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPESynthesiser.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; 4D57626C71E0A81969B64FFD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODeviceType.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h"; sourceTree = "SOURCE_ROOT"; }; 4D669F9349F7061E90B1DCDC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; }; 4D69698B19CF9BF4CCB83C94 = {isa = PBXFileReference; lastKnownFileType = text.txt; name = "changes to libjpeg for JUCE.txt"; path = "../../../../modules/juce_graphics/image_formats/jpglib/changes to libjpeg for JUCE.txt"; sourceTree = "SOURCE_ROOT"; }; @@ -421,44 +420,45 @@ 4E6E8CC86D3C64BEA97CD34B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorGraph.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h"; sourceTree = "SOURCE_ROOT"; }; 4E7854A2FE5973E713080BEB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colour.h"; path = "../../../../modules/juce_graphics/colour/juce_Colour.h"; sourceTree = "SOURCE_ROOT"; }; 4E98A99B73F9003D3C8F2B4B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../../modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; }; - 4F54F099B1373706B52E5774 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDescription.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp"; sourceTree = "SOURCE_ROOT"; }; 4F790401362D3F12680B726E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Slider.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.cpp"; sourceTree = "SOURCE_ROOT"; }; 4FB58D47EA973CA9529AF6A9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TemporaryFile.cpp"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.cpp"; sourceTree = "SOURCE_ROOT"; }; 4FC82A4EB65948C925CC7248 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = bitwise.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/bitwise.c"; sourceTree = "SOURCE_ROOT"; }; 4FCB6E7A042E17CEC055BE75 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V1.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.h"; sourceTree = "SOURCE_ROOT"; }; 4FF264791CA989D4CFD083F3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyPressMappingSet.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + 507F735FFE45FCB10B432A4B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CachedValue.cpp"; path = "../../../../modules/juce_data_structures/values/juce_CachedValue.cpp"; sourceTree = "SOURCE_ROOT"; }; 50832A0FAB3B736F1AD5E693 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AnimatedPosition.h"; path = "../../../../modules/juce_gui_basics/layout/juce_AnimatedPosition.h"; sourceTree = "SOURCE_ROOT"; }; 508D1DF2D93C6F05EE75EDE8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; 50F1E35F917489F92521D617 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 513BA2176B24BC61831B58FD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V2.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h"; sourceTree = "SOURCE_ROOT"; }; + 513637A8BE7D94200DCBD1F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 525EF648F69C3D42DA9B06E3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDBurner.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDBurner.mm"; sourceTree = "SOURCE_ROOT"; }; 5279C4962DF56C537826FB7F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "os_types.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/os_types.h"; sourceTree = "SOURCE_ROOT"; }; 52910366DFBBEE849B726F87 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jfdctint.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jfdctint.c"; sourceTree = "SOURCE_ROOT"; }; 52A34E3AD81C71587925D103 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = registry.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/registry.h"; sourceTree = "SOURCE_ROOT"; }; - 52CEDC13A7802C7CD55F01A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; }; 534336DBE61F1AC6D20C252C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "stream_encoder_framing.h"; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/stream_encoder_framing.h"; sourceTree = "SOURCE_ROOT"; }; - 5893832AF1B7AE432FB2F071 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = memory.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/memory.h"; sourceTree = "SOURCE_ROOT"; }; + 54A2AD39C0C739C9880E35B3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_11.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_11.h"; sourceTree = "SOURCE_ROOT"; }; + 5535A6B1099BB113B17C42DF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDReader.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm"; sourceTree = "SOURCE_ROOT"; }; + 6160E8E6AB587105E4DA5F8E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 64417DE78D1B1D10EC6E4146 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceDemoPlugin.vst; sourceTree = "BUILT_PRODUCTS_DIR"; }; 464486542EDBD5301EEEE8C1 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceDemoPlugin.vst3; sourceTree = "BUILT_PRODUCTS_DIR"; }; 1AF4856520E8BFF4A039CD6B = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceDemoPlugin.component; sourceTree = "BUILT_PRODUCTS_DIR"; }; + 4D314DC059A8F7D9AA3D20B2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPESynthesiser.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; 4D6248E85C22578615FA809C = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libJuceDemoPlugin.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; + 4F54F099B1373706B52E5774 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDescription.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp"; sourceTree = "SOURCE_ROOT"; }; 4FD86B7C71BEC7627C40B694 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - 507F735FFE45FCB10B432A4B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CachedValue.cpp"; path = "../../../../modules/juce_data_structures/values/juce_CachedValue.cpp"; sourceTree = "SOURCE_ROOT"; }; - 513637A8BE7D94200DCBD1F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + 513BA2176B24BC61831B58FD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V2.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h"; sourceTree = "SOURCE_ROOT"; }; 522D22FEB38D52304F01508D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; }; - 525EF648F69C3D42DA9B06E3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDBurner.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDBurner.mm"; sourceTree = "SOURCE_ROOT"; }; 528C0C08C23994B09945896C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../../../modules/juce_graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; }; + 52CEDC13A7802C7CD55F01A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; }; 53220B3B994BD522CFD4564B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_Standalone.cpp"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_Standalone.cpp"; sourceTree = "SOURCE_ROOT"; }; 534F8743733885F462809C8F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentPeer.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.cpp"; sourceTree = "SOURCE_ROOT"; }; 535A9A777A237C6C85F19B5D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inffixed.h; path = "../../../../modules/juce_core/zip/zlib/inffixed.h"; sourceTree = "SOURCE_ROOT"; }; 537D65EF3BBBDFC4651D389D = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; 538BF18F9D29A2A60EF6A6CE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 5484ACC1742F9FA740314458 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jccolor.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jccolor.c"; sourceTree = "SOURCE_ROOT"; }; - 54A2AD39C0C739C9880E35B3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_11.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_11.h"; sourceTree = "SOURCE_ROOT"; }; 54DD8BD688BB54E3F94A19A3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; }; 550FAA1B7314518C5237CB46 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_AU.r"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AU.r"; sourceTree = "SOURCE_ROOT"; }; 551EB50AA3CCA08ABE8CB458 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdapimin.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdapimin.c"; sourceTree = "SOURCE_ROOT"; }; 5532406796823FC4FB6ADC39 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitmath.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitmath.h"; sourceTree = "SOURCE_ROOT"; }; - 5535A6B1099BB113B17C42DF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDReader.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm"; sourceTree = "SOURCE_ROOT"; }; 55607B89BB15CE19B6E397E2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationProperties.h"; path = "../../../../modules/juce_data_structures/app_properties/juce_ApplicationProperties.h"; sourceTree = "SOURCE_ROOT"; }; 5585BCF8B17AD03D9FB4A32A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 5647736926AE116B8C392630 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ConcertinaPanel.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ConcertinaPanel.h"; sourceTree = "SOURCE_ROOT"; }; @@ -467,6 +467,7 @@ 57355833C251D222ADCB9801 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAUParameter.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAUParameter.h"; sourceTree = "SOURCE_ROOT"; }; 57EC076E7DD4D261CBCC3CCA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Font.h"; path = "../../../../modules/juce_graphics/fonts/juce_Font.h"; sourceTree = "SOURCE_ROOT"; }; 581F2233A2A749DE9410A562 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures.mm"; path = "../../JuceLibraryCode/juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; }; + 5893832AF1B7AE432FB2F071 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = memory.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/memory.h"; sourceTree = "SOURCE_ROOT"; }; 58CEA1474B2E77B7287D735B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FakeMouseMoveGenerator.h"; path = "../../../../modules/juce_audio_plugin_client/utility/juce_FakeMouseMoveGenerator.h"; sourceTree = "SOURCE_ROOT"; }; 58CEDDC16E6A5293A4F81E84 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedReadLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedReadLock.h"; sourceTree = "SOURCE_ROOT"; }; 58E978708BAA8613A40F61E3 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; @@ -806,6 +807,7 @@ 9C436F92CE7E8C70492C99B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 9C920EACAC7281B584F2F09A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; }; 9C9DEB7FB75C42C4F47AF999 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_DigiCode1.cpp"; path = "../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode1.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9CB8ACEB10DCF2F067605442 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 9D6E760A374151269551D1D8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_VST2.cpp"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp"; sourceTree = "SOURCE_ROOT"; }; 9DDEAA3563BE5304457DBE4B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MACAddress.cpp"; path = "../../../../modules/juce_core/network/juce_MACAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; 9DFC17B26B7710304214755C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = compress.c; path = "../../../../modules/juce_core/zip/zlib/compress.c"; sourceTree = "SOURCE_ROOT"; }; @@ -814,6 +816,7 @@ 9E9B102253DEDFE00673F715 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; 9EA3C2BA09FEBDA65F4495D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; }; 9EC0C4C02099C656EEF39DA9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = PluginEditor.cpp; path = ../../Source/PluginEditor.cpp; sourceTree = "SOURCE_ROOT"; }; + 9F03287184CFC255C0F46C48 = {isa = PBXFileReference; lastKnownFileType = file.r; name = AUResources.r; path = "../../../../modules/juce_audio_plugin_client/AUResources.r"; sourceTree = "SOURCE_ROOT"; }; 9F18A1B29A4BFC7EE7B28E11 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_ASCII.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_ASCII.h"; sourceTree = "SOURCE_ROOT"; }; 9F32F1A0F284E7F124F4CAA9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = registry.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/registry.c"; sourceTree = "SOURCE_ROOT"; }; 9F39E3DC6F699109EC3A2432 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Javascript.h"; path = "../../../../modules/juce_core/javascript/juce_Javascript.h"; sourceTree = "SOURCE_ROOT"; }; @@ -925,7 +928,6 @@ B72762B6ACA5F73EF9F0A220 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GenericAudioProcessorEditor.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; B7F3E4AF0F482E9F6EAF6C41 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; }; B829B4BAE71C6F09169542B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core.mm"; path = "../../../../modules/juce_core/juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; - B82C8012A9571F69211455AD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginBusUtilities.h"; path = "../../../../modules/juce_audio_plugin_client/utility/juce_PluginBusUtilities.h"; sourceTree = "SOURCE_ROOT"; }; B8B25605AB1A04A8AE545227 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageCache.h"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.h"; sourceTree = "SOURCE_ROOT"; }; B8B760CB559864834CC9AB32 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SubregionStream.h"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.h"; sourceTree = "SOURCE_ROOT"; }; B8D629B3F1CA3679317C8A97 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdinput.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdinput.c"; sourceTree = "SOURCE_ROOT"; }; @@ -934,7 +936,6 @@ B9BDF0A1E699EA2D3549664E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadLocalValue.h"; path = "../../../../modules/juce_core/threads/juce_ThreadLocalValue.h"; sourceTree = "SOURCE_ROOT"; }; B9BE6469604B9D3252EFA7E7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AttributedString.h"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.h"; sourceTree = "SOURCE_ROOT"; }; B9F00E2440056545F32EA80E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdhuff.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdhuff.c"; sourceTree = "SOURCE_ROOT"; }; - BA1BCEDEEAF68692BF1456EC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; BA98346EFD1037285E245CC9 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; BAC63B00905C8572FEF8B079 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fixed.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/fixed.h"; sourceTree = "SOURCE_ROOT"; }; BAC8D415D2BE640836021D6B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = zconf.h; path = "../../../../modules/juce_core/zip/zlib/zconf.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1292,6 +1293,8 @@ C4CA0BF69BD074C55F7BD871, 93FBD648EA104B18DC9502FD, ); name = JuceDemoPlugin; sourceTree = ""; }; 4972D5B886C3330A6E45360F = {isa = PBXGroup; children = ( + 075B6760CAE7FF0EF2739B6B, + 6160E8E6AB587105E4DA5F8E, 9084709A281D2A3FA167D442, 379E6C7C71E680936EF723F4, 890AA995A158C4D9E7738A40, @@ -1618,7 +1621,7 @@ 2AA92DC1171DAF0BA4BB0E63, 0687D10EFBEEEC129BC807D3, 2AA92DC1171DAF0BA4BB0E63, ); name = "juce_audio_formats"; sourceTree = ""; }; - B663729F88A22F9325C3C9D0 = {isa = PBXGroup; children = ( + A1249A76BA1011B6EEF37ECB = {isa = PBXGroup; children = ( C83FE0526DC2E3078BCAFC5D, 1BAAB47A9C5B1D76D28FA282, ); name = AAX; sourceTree = ""; }; 35F768B6427149AF0129BB8C = {isa = PBXGroup; children = ( @@ -1680,10 +1683,9 @@ 49386674C08BAD7864966166, ); name = CoreAudioUtilityClasses; sourceTree = ""; }; E96D0837CDD1CE8B768E4077 = {isa = PBXGroup; children = ( 35F768B6427149AF0129BB8C, - 3F16A54F45ED278001F4CA09, EE149F9075819C0132879D4C, 833921AD05E4BAF484FC7749, ); name = AU; sourceTree = ""; }; - 10721EE9E840AA7BC5F61764 = {isa = PBXGroup; children = ( + 05668E523CB813C2B1216969 = {isa = PBXGroup; children = ( CD61A73C6A090CD85EC57354, 9C9DEB7FB75C42C4F47AF999, F7454AD16EE05969CCF5FD7C, @@ -1691,32 +1693,31 @@ 3755479207D218969425F91F, 17EC828C9226E13D4EF03E85, 1D4AFBEC703C6F373B292D9A, ); name = RTAS; sourceTree = ""; }; - 5B3F9588F32C646D12DE0ACE = {isa = PBXGroup; children = ( + 76E8AA981570F5D14A50E5BA = {isa = PBXGroup; children = ( 12D74EEE2F7F5D8E17C746EA, A13CE6DC3E31158D49337C8F, ); name = Standalone; sourceTree = ""; }; - 0356C38F32660D46D5EE6554 = {isa = PBXGroup; children = ( + 0727A8B2D638CC69763CCA95 = {isa = PBXGroup; children = ( 7B870EE6D43B984CADE69C28, 94AA9AF4939F914AD00CEE1F, 58CEA1474B2E77B7287D735B, 2FADC0AA0043A3C87DF25E0D, 3C6E8B705C53294638807FC4, - B82C8012A9571F69211455AD, 841B6783475386C5471CA039, 8C0D1A1E000E47D09B771963, 7E588E8934AFA6EA5C58C133, ); name = utility; sourceTree = ""; }; - 0720EF699B01F6EB0A2C4E3A = {isa = PBXGroup; children = ( + BBB94DEC5AE6A1D853134F6D = {isa = PBXGroup; children = ( 1E496F7BF3B3C59E5ECACCDE, 8EB324480D60B3E3A81541E5, ); name = VST; sourceTree = ""; }; - E090AC75C454B0E281AB5C5A = {isa = PBXGroup; children = ( + 6C3EAEA901CD835AD8EDD8D9 = {isa = PBXGroup; children = ( 6CEFF94C7852DB3BFA5E29EB, ); name = VST3; sourceTree = ""; }; 09C66663E0BF7CD43C73C7E6 = {isa = PBXGroup; children = ( - B663729F88A22F9325C3C9D0, + A1249A76BA1011B6EEF37ECB, E96D0837CDD1CE8B768E4077, - 10721EE9E840AA7BC5F61764, - 5B3F9588F32C646D12DE0ACE, - 0356C38F32660D46D5EE6554, - 0720EF699B01F6EB0A2C4E3A, - E090AC75C454B0E281AB5C5A, + 05668E523CB813C2B1216969, + 76E8AA981570F5D14A50E5BA, + 0727A8B2D638CC69763CCA95, + BBB94DEC5AE6A1D853134F6D, + 6C3EAEA901CD835AD8EDD8D9, E65E231978B796AA7868DC4A, BB2CD1B0323135818D0AB47F, 2A6E2BC2F602472C0FC70E68, @@ -1736,12 +1737,13 @@ 9D6E760A374151269551D1D8, 1DEEFB2E1913BF2BEBAE3B5C, E65E231978B796AA7868DC4A, ); name = "juce_audio_plugin_client"; sourceTree = ""; }; - 58537DEF112AF075DF6D8E9C = {isa = PBXGroup; children = ( + B1AB8F8782318C5C7C4185B3 = {isa = PBXGroup; children = ( 21764164C5B41690F1BC3861, 87BE12FCBC4C554059FA344F, 9120B03E05E369128056F1F0, 37CF7FCCB543B5B240957BCD, ); name = format; sourceTree = ""; }; - 7F50BB46454730427358049B = {isa = PBXGroup; children = ( + 08A2A1B40E90D02E34DA084B = {isa = PBXGroup; children = ( + 9CB8ACEB10DCF2F067605442, 104CC5F094E0B3D1D3055D04, A9B46A5FF98D7B9DF8598C12, C19323831CE86566D60C725E, @@ -1750,13 +1752,12 @@ 6A72E46DBDCFAD6F7039E739, F6AE333028FC864D4653A7B5, 070E3EFE91BE8407EE1EBD8C, + 388291AF3C0E60DD73B276D2, A4DAEB5C0621C1C04EA93AEC, A9C466FBA4FCF6484BCF86A2, 6501BB1AAFD5B3DC4A783F85, CC04A3CE3003C0A0AB35A7AF, ); name = "format_types"; sourceTree = ""; }; - 17F7701C54B8C8FA480937DF = {isa = PBXGroup; children = ( - 1C49A0C6E4032A29D5C05616, - BA1BCEDEEAF68692BF1456EC, + 3504AB8B3D6A9242FEC982C3 = {isa = PBXGroup; children = ( F2C36FA2223ED743551F79C9, C95C90A2A9829F72F818533B, 499974142017D18C15D5AE2A, @@ -1788,9 +1789,9 @@ EDCAFA62D6F311A9AEC4B30E, 6AA71F4B531421F7440E7F51, ); name = utilities; sourceTree = ""; }; 21F2BD5969F182FE6DAAD73F = {isa = PBXGroup; children = ( - 58537DEF112AF075DF6D8E9C, - 7F50BB46454730427358049B, - 17F7701C54B8C8FA480937DF, + B1AB8F8782318C5C7C4185B3, + 08A2A1B40E90D02E34DA084B, + 3504AB8B3D6A9242FEC982C3, F8883E3A091B19F88ED0F990, 61791F090B4BBD0F9D880E7F, CA8898E7EC2A47F0C3E18D2C, diff --git a/examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj b/examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj index 5de4fcd3b3..82f56000db 100644 --- a/examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj +++ b/examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj @@ -137,6 +137,9 @@ + + true + true @@ -613,9 +616,6 @@ true - - true - true @@ -1769,6 +1769,7 @@ + @@ -1957,7 +1958,6 @@ - @@ -1965,22 +1965,22 @@ - + + - @@ -2396,6 +2396,7 @@ + diff --git a/examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj.filters b/examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj.filters index 743e1474fe..4bdc56a0f0 100644 --- a/examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj.filters +++ b/examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj.filters @@ -361,6 +361,9 @@ JuceDemoPlugin + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -880,9 +883,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2160,6 +2160,9 @@ JuceDemoPlugin + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2724,9 +2727,6 @@ Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses - - Juce Modules\juce_audio_plugin_client\AU - Juce Modules\juce_audio_plugin_client\RTAS @@ -2748,9 +2748,6 @@ Juce Modules\juce_audio_plugin_client\utility - - Juce Modules\juce_audio_plugin_client\utility - Juce Modules\juce_audio_plugin_client\utility @@ -2769,6 +2766,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2784,6 +2784,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2793,9 +2796,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -4037,6 +4037,9 @@ Juce Modules\juce_audio_plugin_client\AU + + Juce Modules\juce_audio_plugin_client + Juce Modules\juce_audio_plugin_client diff --git a/examples/audio plugin demo/JuceDemoPlugin.jucer b/examples/audio plugin demo/JuceDemoPlugin.jucer index a2237d6e7a..7656ceabcf 100644 --- a/examples/audio plugin demo/JuceDemoPlugin.jucer +++ b/examples/audio plugin demo/JuceDemoPlugin.jucer @@ -4,9 +4,9 @@ version="1.0.0" juceLinkage="amalg_multi" buildVST="1" buildRTAS="0" buildAU="1" pluginName="Juce Demo Plugin" pluginDesc="Juce Demo Plugin" pluginManufacturer="ROLI Ltd." pluginManufacturerCode="ROLI" - pluginCode="Jcdm" pluginChannelConfigs="{1, 1}, {2, 2}" pluginIsSynth="0" - pluginWantsMidiIn="1" pluginProducesMidiOut="1" pluginSilenceInIsSilenceOut="0" - pluginTailLength="0" pluginEditorRequiresKeys="1" pluginAUExportPrefix="JuceDemoProjectAU" + pluginCode="Jcdm" pluginChannelConfigs="" pluginIsSynth="0" pluginWantsMidiIn="1" + pluginProducesMidiOut="1" pluginSilenceInIsSilenceOut="0" pluginTailLength="0" + pluginEditorRequiresKeys="1" pluginAUExportPrefix="JuceDemoProjectAU" pluginAUViewClass="JuceDemoProjectAU_V1" pluginRTASCategory="" bundleIdentifier="com.juce.JuceDemoPlugin" jucerVersion="4.2.4" companyName="ROLI Ltd." aaxIdentifier="com.yourcompany.JuceDemoPlugin" @@ -30,12 +30,12 @@ - - - + + + @@ -52,12 +52,12 @@ - - - + + + - - - + + + @@ -98,11 +98,11 @@ - - + + - + diff --git a/examples/audio plugin demo/JuceLibraryCode/AppConfig.h b/examples/audio plugin demo/JuceLibraryCode/AppConfig.h index 77267349b3..418a3d002e 100644 --- a/examples/audio plugin demo/JuceLibraryCode/AppConfig.h +++ b/examples/audio plugin demo/JuceLibraryCode/AppConfig.h @@ -333,14 +333,5 @@ #ifndef JucePlugin_AAXDisableMultiMono #define JucePlugin_AAXDisableMultiMono 0 #endif -#ifndef JucePlugin_MaxNumInputChannels - #define JucePlugin_MaxNumInputChannels 2 -#endif -#ifndef JucePlugin_MaxNumOutputChannels - #define JucePlugin_MaxNumOutputChannels 2 -#endif -#ifndef JucePlugin_PreferredChannelConfigurations - #define JucePlugin_PreferredChannelConfigurations {1, 1}, {2, 2} -#endif #endif // __JUCE_APPCONFIG_0NRD9LLGO__ diff --git a/examples/audio plugin demo/Source/PluginProcessor.cpp b/examples/audio plugin demo/Source/PluginProcessor.cpp index 5a16b9edca..426bc88d9e 100644 --- a/examples/audio plugin demo/Source/PluginProcessor.cpp +++ b/examples/audio plugin demo/Source/PluginProcessor.cpp @@ -147,7 +147,9 @@ private: //============================================================================== JuceDemoPluginAudioProcessor::JuceDemoPluginAudioProcessor() - : lastUIWidth (400), + : AudioProcessor (BusesProperties().withInput ("Input", AudioChannelSet::stereo(), true) + .withOutput ("Output", AudioChannelSet::stereo(), true)), + lastUIWidth (400), lastUIHeight (200), gainParam (nullptr), delayParam (nullptr), @@ -181,6 +183,24 @@ void JuceDemoPluginAudioProcessor::initialiseSynth() } //============================================================================== +bool JuceDemoPluginAudioProcessor::isBusesLayoutSupported (const BusesLayout& layouts) const +{ + // Only mono/stereo and input/output must have same layout + const AudioChannelSet& mainInput = layouts.getMainInputChannelSet(); + const AudioChannelSet& mainOutput = layouts.getMainOutputChannelSet(); + + // input and output layout must be the same + if (mainInput != mainOutput) return false; + + // do not allow disabling the main buses + if (mainInput.isDisabled()) return false; + + // only allow stereo and mono + if (mainInput.size() > 2) return false; + + return true; +} + void JuceDemoPluginAudioProcessor::prepareToPlay (double newSampleRate, int /*samplesPerBlock*/) { // Use this method as the place to do any pre-playback diff --git a/examples/audio plugin demo/Source/PluginProcessor.h b/examples/audio plugin demo/Source/PluginProcessor.h index 3e9030c6cf..8d2656b097 100644 --- a/examples/audio plugin demo/Source/PluginProcessor.h +++ b/examples/audio plugin demo/Source/PluginProcessor.h @@ -26,6 +26,7 @@ public: ~JuceDemoPluginAudioProcessor(); //============================================================================== + bool isBusesLayoutSupported (const BusesLayout& layouts) const override; void prepareToPlay (double sampleRate, int samplesPerBlock) override; void releaseResources() override; void reset() override; diff --git a/examples/audio plugin host/Builds/Linux/Makefile b/examples/audio plugin host/Builds/Linux/Makefile index baf2d4a053..8b373f410b 100644 --- a/examples/audio plugin host/Builds/Linux/Makefile +++ b/examples/audio plugin host/Builds/Linux/Makefile @@ -58,6 +58,7 @@ endif OBJECTS := \ $(JUCE_OBJDIR)/FilterGraph_62e9c017.o \ + $(JUCE_OBJDIR)/FilterIOConfiguration_1cc9b659.o \ $(JUCE_OBJDIR)/GraphEditorPanel_3dbd4872.o \ $(JUCE_OBJDIR)/HostStartup_5ce96f96.o \ $(JUCE_OBJDIR)/InternalFilters_beb54bdf.o \ @@ -103,6 +104,11 @@ $(JUCE_OBJDIR)/FilterGraph_62e9c017.o: ../../Source/FilterGraph.cpp @echo "Compiling FilterGraph.cpp" @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" +$(JUCE_OBJDIR)/FilterIOConfiguration_1cc9b659.o: ../../Source/FilterIOConfiguration.cpp + -@mkdir -p $(JUCE_OBJDIR) + @echo "Compiling FilterIOConfiguration.cpp" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" + $(JUCE_OBJDIR)/GraphEditorPanel_3dbd4872.o: ../../Source/GraphEditorPanel.cpp -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling GraphEditorPanel.cpp" diff --git a/examples/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj b/examples/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj index 08ccc36934..8f477341f2 100644 --- a/examples/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj +++ b/examples/audio plugin host/Builds/MacOSX/Plugin Host.xcodeproj/project.pbxproj @@ -23,6 +23,7 @@ 4DB15177DDC357F4503F88CF = {isa = PBXBuildFile; fileRef = B457EE687507BF1DEEA7581F; }; D92C7BF86C9CCF6B4D14F809 = {isa = PBXBuildFile; fileRef = 7DA35787B5F6F7440D667CC8; }; 4C88899EB7993A76A97643FE = {isa = PBXBuildFile; fileRef = 9BA1DD697B98005D24F7EC3C; }; + 485A37478F7EAA352DD1A86A = {isa = PBXBuildFile; fileRef = 01FE7ED58992BC9683BA3C94; }; 040EB574807E8A86F124D851 = {isa = PBXBuildFile; fileRef = B1C6B9E4B9FDC17AA298E541; }; A1B0416DA378BB0C3AD6F74B = {isa = PBXBuildFile; fileRef = A66EFAC64B1B67B536C73415; }; D493393499E0822C70009A63 = {isa = PBXBuildFile; fileRef = 362BB539489999164C3A3D5B; }; @@ -52,6 +53,7 @@ 01A717DA37FEFAD85FBB4903 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; 01DB9D38812FE9C8E4106F22 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; 01FD86096B5866FB81FF2569 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 01FE7ED58992BC9683BA3C94 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FilterIOConfiguration.cpp; path = ../../Source/FilterIOConfiguration.cpp; sourceTree = "SOURCE_ROOT"; }; 02103E89A1DBB8DEE968BDED = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandID.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandID.h"; sourceTree = "SOURCE_ROOT"; }; 02F8678BD7CAAD93B290CFEC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CoreAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; 032E2ADE43B3115AB59A6393 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; @@ -130,9 +132,9 @@ 13FA561015BBB5F86783EAB6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePoint.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.h"; sourceTree = "SOURCE_ROOT"; }; 140DE913FF08066FBE9B40B2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEMessages.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPEMessages.cpp"; sourceTree = "SOURCE_ROOT"; }; 144FEDE49D0F6681E8DD861A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = format.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/format.c"; sourceTree = "SOURCE_ROOT"; }; - 147E02A7F9A65F317BE4256D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 14A87A1183D1758B09986E28 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; }; 14AE8BC9816304F509EC1773 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OggVorbisAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; + 14C89FAA1E3A8F2B3DBB4DF2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; 14E06A6B79437E04E334F7AB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessageCollector.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h"; sourceTree = "SOURCE_ROOT"; }; 14E68B91F5DD3904D9C98600 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_gui_extra.mm"; path = "../../JuceLibraryCode/juce_gui_extra.mm"; sourceTree = "SOURCE_ROOT"; }; 14E94077B6856B9AD6AE0D45 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_audio_devices.h"; path = "../../../../modules/juce_audio_devices/juce_audio_devices.h"; sourceTree = "SOURCE_ROOT"; }; @@ -159,7 +161,9 @@ 188F364C0B02372BB332F767 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_graphics.mm"; path = "../../JuceLibraryCode/juce_graphics.mm"; sourceTree = "SOURCE_ROOT"; }; 189761573BB5F17836B33BD4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AnimatedPositionBehaviours.h"; path = "../../../../modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h"; sourceTree = "SOURCE_ROOT"; }; 18D9104048F8165BCA37A44B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = zutil.c; path = "../../../../modules/juce_core/zip/zlib/zutil.c"; sourceTree = "SOURCE_ROOT"; }; + 18DD15714443AFC3BAAE211C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FilterIOConfiguration.h; path = ../../Source/FilterIOConfiguration.h; sourceTree = "SOURCE_ROOT"; }; 18E3B04768DEA4B5699949C3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jerror.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jerror.c"; sourceTree = "SOURCE_ROOT"; }; + 1933AB0C95683ACEDAB2B702 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 1956DE1CE89301FE4FC9BC15 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; }; 1959937B4B2FC11B9AC53566 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; }; 19AC4CDF00D2CA9FCC4700BE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = zlib.h; path = "../../../../modules/juce_core/zip/zlib/zlib.h"; sourceTree = "SOURCE_ROOT"; }; @@ -170,7 +174,6 @@ 1A59F393DEB3E9E1132EAF51 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectShowComponent.cpp"; path = "../../../../modules/juce_video/native/juce_win32_DirectShowComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 1A5B591DE330EB440C2871E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; }; 1A80ACE5E89272455CFDBE73 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jpeglib.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jpeglib.h"; sourceTree = "SOURCE_ROOT"; }; - 1AB268A2EC53E0104B612174 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 1ADCEA9B6A82A41D7D95CB2F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NormalisableRange.h"; path = "../../../../modules/juce_core/maths/juce_NormalisableRange.h"; sourceTree = "SOURCE_ROOT"; }; 1B0596982B3039E793262901 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeMovieComponent.h"; path = "../../../../modules/juce_video/playback/juce_QuickTimeMovieComponent.h"; sourceTree = "SOURCE_ROOT"; }; 1B34607F0F916F899F3EFDD5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableLayoutManager.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -965,6 +968,7 @@ C3F4A1EA3239C631ED2EF8A4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDBurner.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDBurner.mm"; sourceTree = "SOURCE_ROOT"; }; C40A3633ACC2BE38B3764309 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "stream_encoder.h"; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_encoder.h"; sourceTree = "SOURCE_ROOT"; }; C43150F92FA4DE8381209FA4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; + C4398541C235F9E618208BEE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; C45FD137A5257D8C39F2063E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BorderSize.h"; path = "../../../../modules/juce_graphics/geometry/juce_BorderSize.h"; sourceTree = "SOURCE_ROOT"; }; C46223B526679E23A270826E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseListener.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.h"; sourceTree = "SOURCE_ROOT"; }; C46CE9BB7E066240FB6DBBD5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; @@ -1203,6 +1207,7 @@ F86E07B5B542F6F4B7F77A4F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorPlayer.h"; path = "../../../../modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h"; sourceTree = "SOURCE_ROOT"; }; F86F912E470660B0C7047823 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_android_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; F8700C66EB5AE3292B585E19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_String.cpp"; path = "../../../../modules/juce_core/text/juce_String.cpp"; sourceTree = "SOURCE_ROOT"; }; + F88D166360E180210259FBEA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; F8D23A339EA851D0838B8D4D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CachedComponentImage.h"; path = "../../../../modules/juce_gui_basics/components/juce_CachedComponentImage.h"; sourceTree = "SOURCE_ROOT"; }; F8D4181043B6E13CF16E7E00 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctflt.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jidctflt.c"; sourceTree = "SOURCE_ROOT"; }; F8D4B164A423E3A891708A59 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jconfig.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jconfig.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1242,6 +1247,8 @@ 97790EAEA01CFA5C3CA9737A = {isa = PBXGroup; children = ( 9BA1DD697B98005D24F7EC3C, 2B143B5431318DDB2104B46E, + 01FE7ED58992BC9683BA3C94, + 18DD15714443AFC3BAAE211C, B1C6B9E4B9FDC17AA298E541, DD8E5D0C88FA2C287F824357, A66EFAC64B1B67B536C73415, @@ -1250,6 +1257,8 @@ 1EC0F33A3BABE58138317375, 6692043E22BB181F01767845, ); name = "Plugin Host"; sourceTree = ""; }; EBC9CD52F42C330D1A15D3A4 = {isa = PBXGroup; children = ( + C4398541C235F9E618208BEE, + 1933AB0C95683ACEDAB2B702, DC30BDE9C4EE1FD059D06902, CBF6F0F3C2D85A2BCC427A34, 272F04D06B1FAFF3580B0DDA, @@ -1576,12 +1585,13 @@ 1B6A039FE3A63210FC1936D2, 084D91B2AD459A0FEBEFD449, 1B6A039FE3A63210FC1936D2, ); name = "juce_audio_formats"; sourceTree = ""; }; - 0A8EC3BAE84B17F0CCFAA08E = {isa = PBXGroup; children = ( + 3ED812FC194789D9AF08E03F = {isa = PBXGroup; children = ( 157C1BBF0329BDB102534A38, 7EC4BF7FFDD52F005ACDF6CC, C231F5F352D49DF474C24FEF, C9EBFF5064D2B5EEE2C95FE1, ); name = format; sourceTree = ""; }; - 8A1776147DE1F56F2AD018F8 = {isa = PBXGroup; children = ( + CBFDD002777F1F8DF44AC4C3 = {isa = PBXGroup; children = ( + F88D166360E180210259FBEA, 4CAFE02422227FB8CDD130A5, 397E6AC0BA27761D41FF7E5B, C2F0321856C5812A685B349D, @@ -1590,13 +1600,12 @@ D99B064D47C6B0FDDBC66B02, ACE3FF969AC408A50E9A6A4C, B1CA1F3AE7555C4FB4CE52D2, + 14C89FAA1E3A8F2B3DBB4DF2, 069AD628740BD9731986CDFC, 10EE0138720A51EBAD46FFCC, A53F1F6AAA9F18823C239E6C, C270737E2B85C6D98E145525, ); name = "format_types"; sourceTree = ""; }; - 28B2A64060E5DD1193AEDD8F = {isa = PBXGroup; children = ( - 1AB268A2EC53E0104B612174, - 147E02A7F9A65F317BE4256D, + 485352F28C9A76AE5E94A6D8 = {isa = PBXGroup; children = ( E2696473F0CBB933DB4BE257, 01434FE2B225D0BA4417F860, 3A3C58CDCD2789D07F1C92F4, @@ -1628,9 +1637,9 @@ 2E82C650752108DC296CBD6B, C8F6BD92FD1A6C6799664B6A, ); name = utilities; sourceTree = ""; }; 0FB8D0CA8D202CE76367B337 = {isa = PBXGroup; children = ( - 0A8EC3BAE84B17F0CCFAA08E, - 8A1776147DE1F56F2AD018F8, - 28B2A64060E5DD1193AEDD8F, + 3ED812FC194789D9AF08E03F, + CBFDD002777F1F8DF44AC4C3, + 485352F28C9A76AE5E94A6D8, 62236C627F4DE4A894D8A09A, F0B73165A2FD3FCE2464EAAF, 59808039879586960196605F, @@ -2718,6 +2727,7 @@ INSTALL_PATH = "$(HOME)/Applications"; MACOSX_DEPLOYMENT_TARGET = 10.11; MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; + OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion"; PRODUCT_BUNDLE_IDENTIFIER = com.roli.pluginhost; SDKROOT_ppc = macosx10.5; }; name = Debug; }; 49453CC5AD9F08D2738464AC = {isa = XCBuildConfiguration; buildSettings = { @@ -2741,6 +2751,7 @@ INSTALL_PATH = "$(HOME)/Applications"; MACOSX_DEPLOYMENT_TARGET = 10.5; MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; + OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion"; PRODUCT_BUNDLE_IDENTIFIER = com.roli.pluginhost; SDKROOT_ppc = macosx10.5; }; name = Release; }; 8D1CA827F1EFD443BDCF198A = {isa = XCBuildConfiguration; buildSettings = { @@ -2786,6 +2797,7 @@ D92C7BF86C9CCF6B4D14F809, ); runOnlyForDeploymentPostprocessing = 0; }; E8E94B3C187DA578BFCBDA98 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 4C88899EB7993A76A97643FE, + 485A37478F7EAA352DD1A86A, 040EB574807E8A86F124D851, A1B0416DA378BB0C3AD6F74B, D493393499E0822C70009A63, diff --git a/examples/audio plugin host/Builds/VisualStudio2010/Plugin Host.vcxproj b/examples/audio plugin host/Builds/VisualStudio2010/Plugin Host.vcxproj index 213946f638..a61d3776bd 100644 --- a/examples/audio plugin host/Builds/VisualStudio2010/Plugin Host.vcxproj +++ b/examples/audio plugin host/Builds/VisualStudio2010/Plugin Host.vcxproj @@ -124,10 +124,14 @@ + + + true + true @@ -479,9 +483,6 @@ true - - true - true @@ -1702,9 +1703,11 @@ + + @@ -1858,15 +1861,16 @@ + + - diff --git a/examples/audio plugin host/Builds/VisualStudio2010/Plugin Host.vcxproj.filters b/examples/audio plugin host/Builds/VisualStudio2010/Plugin Host.vcxproj.filters index 2cbb0cb3e0..339c41d6c2 100644 --- a/examples/audio plugin host/Builds/VisualStudio2010/Plugin Host.vcxproj.filters +++ b/examples/audio plugin host/Builds/VisualStudio2010/Plugin Host.vcxproj.filters @@ -367,6 +367,9 @@ Plugin Host + + Plugin Host + Plugin Host @@ -379,6 +382,9 @@ Plugin Host + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -748,9 +754,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2106,6 +2109,9 @@ Plugin Host + + Plugin Host + Plugin Host @@ -2115,6 +2121,9 @@ Plugin Host + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2574,6 +2583,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2589,6 +2601,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2598,9 +2613,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/audio plugin host/Builds/VisualStudio2013/Plugin Host.vcxproj b/examples/audio plugin host/Builds/VisualStudio2013/Plugin Host.vcxproj index 8b8b85c96c..94a442fcc6 100644 --- a/examples/audio plugin host/Builds/VisualStudio2013/Plugin Host.vcxproj +++ b/examples/audio plugin host/Builds/VisualStudio2013/Plugin Host.vcxproj @@ -130,10 +130,14 @@ + + + true + true @@ -485,9 +489,6 @@ true - - true - true @@ -1708,9 +1709,11 @@ + + @@ -1864,15 +1867,16 @@ + + - diff --git a/examples/audio plugin host/Builds/VisualStudio2013/Plugin Host.vcxproj.filters b/examples/audio plugin host/Builds/VisualStudio2013/Plugin Host.vcxproj.filters index aefc8b1968..824415c8f4 100644 --- a/examples/audio plugin host/Builds/VisualStudio2013/Plugin Host.vcxproj.filters +++ b/examples/audio plugin host/Builds/VisualStudio2013/Plugin Host.vcxproj.filters @@ -367,6 +367,9 @@ Plugin Host + + Plugin Host + Plugin Host @@ -379,6 +382,9 @@ Plugin Host + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -748,9 +754,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2106,6 +2109,9 @@ Plugin Host + + Plugin Host + Plugin Host @@ -2115,6 +2121,9 @@ Plugin Host + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2574,6 +2583,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2589,6 +2601,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2598,9 +2613,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/audio plugin host/Builds/VisualStudio2015/Plugin Host.vcxproj b/examples/audio plugin host/Builds/VisualStudio2015/Plugin Host.vcxproj index 5d19191e87..33a2e15f17 100644 --- a/examples/audio plugin host/Builds/VisualStudio2015/Plugin Host.vcxproj +++ b/examples/audio plugin host/Builds/VisualStudio2015/Plugin Host.vcxproj @@ -130,10 +130,14 @@ + + + true + true @@ -485,9 +489,6 @@ true - - true - true @@ -1708,9 +1709,11 @@ + + @@ -1864,15 +1867,16 @@ + + - diff --git a/examples/audio plugin host/Builds/VisualStudio2015/Plugin Host.vcxproj.filters b/examples/audio plugin host/Builds/VisualStudio2015/Plugin Host.vcxproj.filters index 53c77fbbf2..05458298fc 100644 --- a/examples/audio plugin host/Builds/VisualStudio2015/Plugin Host.vcxproj.filters +++ b/examples/audio plugin host/Builds/VisualStudio2015/Plugin Host.vcxproj.filters @@ -367,6 +367,9 @@ Plugin Host + + Plugin Host + Plugin Host @@ -379,6 +382,9 @@ Plugin Host + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -748,9 +754,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2106,6 +2109,9 @@ Plugin Host + + Plugin Host + Plugin Host @@ -2115,6 +2121,9 @@ Plugin Host + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2574,6 +2583,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2589,6 +2601,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2598,9 +2613,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/examples/audio plugin host/Plugin Host.jucer b/examples/audio plugin host/Plugin Host.jucer index be48a6b9ca..353c1b2f7e 100644 --- a/examples/audio plugin host/Plugin Host.jucer +++ b/examples/audio plugin host/Plugin Host.jucer @@ -6,7 +6,7 @@ includeBinaryInAppConfig="1"> + objCExtraSuffix="M73TRi" vst3Folder="" extraCompilerFlags="-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion"> @@ -132,6 +132,10 @@ file="Source/FilterGraph.cpp"/> + + enableAllBuses(); AudioProcessorGraph::Node* node = graph.addNode (instance); if (node != nullptr) @@ -375,7 +379,7 @@ void FilterGraph::createNodeFromXml (const XmlElement& xml) { jassert (node->getProcessor() != nullptr); - if (PluginWindow* const w = PluginWindow::getWindowFor (node, type)) + if (PluginWindow* const w = PluginWindow::getWindowFor (node, type, graph)) w->toFront (true); } } diff --git a/examples/audio plugin host/Source/FilterGraph.h b/examples/audio plugin host/Source/FilterGraph.h index 2405a2ca4f..15b499f563 100644 --- a/examples/audio plugin host/Source/FilterGraph.h +++ b/examples/audio plugin host/Source/FilterGraph.h @@ -35,7 +35,7 @@ const char* const filenameWildcard = "*.filtergraph"; /** A collection of filters and some connections between them. */ -class FilterGraph : public FileBasedDocument +class FilterGraph : public FileBasedDocument, public AudioProcessorListener { public: //============================================================================== @@ -83,17 +83,23 @@ public: //============================================================================== + void audioProcessorParameterChanged (AudioProcessor*, int, float) override {} + void audioProcessorChanged (AudioProcessor*) override { changed(); } + //============================================================================== XmlElement* createXml() const; void restoreFromXml (const XmlElement& xml); //============================================================================== void newDocument(); - String getDocumentTitle(); - Result loadDocument (const File& file); - Result saveDocument (const File& file); - File getLastDocumentOpened(); - void setLastDocumentOpened (const File& file); + String getDocumentTitle() override; + Result loadDocument (const File& file) override; + Result saveDocument (const File& file) override; + File getLastDocumentOpened() override; + void setLastDocumentOpened (const File& file) override; + + //============================================================================== + /** The special channel index used to refer to a filter's midi channel. */ diff --git a/examples/audio plugin host/Source/FilterIOConfiguration.cpp b/examples/audio plugin host/Source/FilterIOConfiguration.cpp new file mode 100644 index 0000000000..d52a37375e --- /dev/null +++ b/examples/audio plugin host/Source/FilterIOConfiguration.cpp @@ -0,0 +1,554 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2015 - ROLI Ltd. + + Permission is granted to use this software under the terms of either: + a) the GPL v2 (or any later version) + b) the Affero GPL v3 + + Details of these licenses can be found at: www.gnu.org/licenses + + JUCE is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + ------------------------------------------------------------------------------ + + To release a closed-source product which uses JUCE, commercial licenses are + available: visit www.juce.com for more information. + + ============================================================================== + */ +#include "../JuceLibraryCode/JuceHeader.h" +#include "GraphEditorPanel.h" +#include "InternalFilters.h" +#include "MainHostWindow.h" + +#include "FilterIOConfiguration.h" + +//============================================================================== +class NumberedBoxes : public TableListBox, private TableListBoxModel, private Button::Listener +{ +public: + struct Listener + { + virtual ~Listener() {} + + virtual void addColumn() = 0; + virtual void removeColumn() = 0; + virtual void columnSelected (int columnId) = 0; + }; + + enum + { + plusButtonColumnId = 128, + minusButtonColumnId = 129 + }; + + //============================================================================== + NumberedBoxes (Listener& listenerToUse, bool canCurrentlyAddColumn, bool canCurrentlyRemoveColumn) + : TableListBox ("NumberedBoxes", this), + listener (listenerToUse), + canAddColumn (canCurrentlyAddColumn), + canRemoveColumn (canCurrentlyRemoveColumn) + { + TableHeaderComponent& tableHeader = getHeader(); + + for (int i = 0; i < 16; ++i) + tableHeader.addColumn (String (i + 1), i + 1, 40); + + setHeaderHeight (0); + setRowHeight (40); + + if (ScrollBar* scrollbar = getHorizontalScrollBar()) + scrollbar->setAutoHide (false); + } + + void setSelected (int columnId) + { + if (TextButton* button = dynamic_cast (getCellComponent (columnId, 0))) + button->setToggleState (true, NotificationType::dontSendNotification); + } + + void setCanAddColumn (bool canCurrentlyAdd) + { + if (canCurrentlyAdd != canAddColumn) + { + canAddColumn = canCurrentlyAdd; + + if (TextButton* button = dynamic_cast (getCellComponent (plusButtonColumnId, 0))) + button->setEnabled (true); + } + } + + void setCanRemoveColumn (bool canCurrentlyRemove) + { + if (canCurrentlyRemove != canRemoveColumn) + { + canRemoveColumn = canCurrentlyRemove; + + if (TextButton* button = dynamic_cast (getCellComponent (minusButtonColumnId, 0))) + button->setEnabled (true); + } + } + +private: + //============================================================================== + int getNumRows() override { return 1; } + void paintCell (Graphics&, int, int, int, int, bool) override {} + void paintRowBackground (Graphics& g, int, int, int, bool) override { g.fillAll (Colours::grey); } + + Component* refreshComponentForCell (int, int columnId, bool, + Component* existingComponentToUpdate) override + { + TextButton* textButton = dynamic_cast (existingComponentToUpdate); + if (textButton == nullptr) + textButton = new TextButton (""); + + textButton->setButtonText (getButtonName (columnId)); + textButton->setConnectedEdges (Button::ConnectedOnLeft | Button::ConnectedOnRight | + Button::ConnectedOnTop | Button::ConnectedOnBottom); + + const bool isPlusMinusButton = (columnId == plusButtonColumnId || columnId == minusButtonColumnId); + + if (isPlusMinusButton) + { + textButton->setEnabled (columnId == plusButtonColumnId ? canAddColumn : canRemoveColumn); + } + else + { + textButton->setRadioGroupId (1, NotificationType::dontSendNotification); + textButton->setClickingTogglesState (true); + + Colour busColour = Colours::green.withRotatedHue (static_cast (columnId) / 5.0f); + textButton->setColour (TextButton::buttonColourId, busColour); + textButton->setColour (TextButton::buttonOnColourId, busColour.withMultipliedBrightness (2.0f)); + } + + textButton->addListener (this); + + return textButton; + } + + //============================================================================== + String getButtonName (int columnId) + { + if (columnId == plusButtonColumnId) return "+"; + if (columnId == minusButtonColumnId) return "-"; + + return String (columnId); + } + + void buttonClicked (Button* btn) override + { + const String& text = btn->getButtonText(); + + if (text == "+") listener.addColumn(); + else if (text == "-") listener.removeColumn(); + } + + void buttonStateChanged (Button* btn) override + { + const String& text = btn->getButtonText(); + + if (text == "+" || text == "-") return; + + if (btn->getToggleState()) + listener.columnSelected (text.getIntValue()); + } + + //============================================================================== + Listener& listener; + bool canAddColumn, canRemoveColumn; +}; + +//============================================================================== +class FilterIOConfigurationWindow::InputOutputConfig + : public Component, private ComboBox::Listener, private Button::Listener, private NumberedBoxes::Listener +{ +public: + InputOutputConfig (FilterIOConfigurationWindow& parent, bool direction) + : owner (parent), + ioTitle ("ioLabel", direction ? "Input Configuration" : "Output Configuration"), + nameLabel ("nameLabel", "Bus Name:"), + layoutLabel ("layoutLabel", "Channel Layout:"), + enabledToggle ("Enabled"), + ioBuses (*this, false, false), + isInput (direction), + currentBus (0) + { + ioTitle.setFont (ioTitle.getFont().withStyle (Font::bold)); + nameLabel.setFont (nameLabel.getFont().withStyle (Font::bold)); + layoutLabel.setFont (layoutLabel.getFont().withStyle (Font::bold)); + enabledToggle.setClickingTogglesState (true); + + layouts.addListener (this); + enabledToggle.addListener (this); + + addAndMakeVisible (layoutLabel); + addAndMakeVisible (layouts); + addAndMakeVisible (enabledToggle); + addAndMakeVisible (ioTitle); + addAndMakeVisible (nameLabel); + addAndMakeVisible (name); + addAndMakeVisible (ioBuses); + + updateBusButtons(); + updateBusLayout(); + } + + void paint (Graphics& g) override + { + g.fillAll (Colours::white); + } + + void resized() override + { + Rectangle r = getLocalBounds().reduced (10); + + ioTitle.setBounds (r.removeFromTop (14)); + r.reduce (10, 0); + r.removeFromTop (16); + + ioBuses.setBounds (r.removeFromTop (60)); + + { + Rectangle label = r.removeFromTop (24); + + nameLabel.setBounds (label.removeFromLeft (100)); + enabledToggle.setBounds (label.removeFromRight (80)); + name.setBounds (label); + } + + { + Rectangle label = r.removeFromTop (24); + + layoutLabel.setBounds (label.removeFromLeft (100)); + layouts.setBounds (label); + } + } + +private: + void updateBusButtons() + { + if (AudioProcessor* filter = owner.getAudioProcessor()) + { + TableHeaderComponent& header = ioBuses.getHeader(); + header.removeAllColumns(); + + const int n = filter->getBusCount (isInput); + for (int i = 0; i < n; ++i) + header.addColumn ("", i + 1, 40); + + header.addColumn ("+", NumberedBoxes::plusButtonColumnId, 20); + header.addColumn ("-", NumberedBoxes::minusButtonColumnId, 20); + + ioBuses.setCanAddColumn (filter->canAddBus (isInput)); + ioBuses.setCanRemoveColumn (filter->canRemoveBus (isInput)); + } + + ioBuses.setSelected (currentBus + 1); + } + + void updateBusLayout() + { + if (AudioProcessor* filter = owner.getAudioProcessor()) + { + if (AudioProcessor::Bus* bus = filter->getBus (isInput, currentBus)) + { + int i; + + for (i = 1; i < AudioChannelSet::maxChannelsOfNamedLayout; ++i) + if ((layouts.indexOfItemId(i) == -1) != bus->supportedLayoutWithChannels (i).isDisabled()) + break; + + // supported layouts have changed + if (i < AudioChannelSet::maxChannelsOfNamedLayout) + { + layouts.clear(); + + for (i = 1; i < AudioChannelSet::maxChannelsOfNamedLayout; ++i) + { + AudioChannelSet set = bus->supportedLayoutWithChannels (i); + if (! set.isDisabled()) + layouts.addItem (set.getDescription(), i); + } + } + + layouts.setSelectedId (bus->getLastEnabledLayout().size()); + + const bool canBeDisabled = bus->isNumberOfChannelsSupported (0); + + if (canBeDisabled != enabledToggle.isEnabled()) + { + enabledToggle.setEnabled (canBeDisabled); + enabledToggle.setToggleState (bus->isEnabled(), NotificationType::dontSendNotification); + } + } + } + } + + //============================================================================== + void comboBoxChanged (ComboBox* combo) override + { + if (combo == &layouts) + { + if (AudioProcessor* filter = owner.getAudioProcessor()) + { + if (AudioProcessor::Bus* bus = filter->getBus (isInput, currentBus)) + { + const int selectedNumChannels = layouts.getSelectedId(); + + if (selectedNumChannels != bus->getLastEnabledLayout().size()) + { + if (isPositiveAndBelow (selectedNumChannels, (int) AudioChannelSet::maxChannelsOfNamedLayout) + && bus->setCurrentLayoutWithoutEnabling (bus->supportedLayoutWithChannels (selectedNumChannels))) + { + if (InputOutputConfig* config = owner.getConfig (! isInput)) + config->updateBusLayout(); + + owner.update(); + } + } + } + } + } + } + + void buttonClicked (Button*) override {} + + void buttonStateChanged (Button* btn) override + { + if (btn == &enabledToggle && enabledToggle.isEnabled()) + { + if (AudioProcessor* filter = owner.getAudioProcessor()) + { + if (AudioProcessor::Bus* bus = filter->getBus (isInput, currentBus)) + { + if (bus->isEnabled() != enabledToggle.getToggleState()) + { + bool success; + + if (enabledToggle.getToggleState()) + success = bus->enable(); + else + success = bus->setCurrentLayout (AudioChannelSet::disabled()); + + if (success) + { + updateBusLayout(); + + if (InputOutputConfig* config = owner.getConfig (! isInput)) + config->updateBusLayout(); + + owner.update(); + } + else + { + enabledToggle.setToggleState (! enabledToggle.getToggleState(), + NotificationType::dontSendNotification); + } + } + } + } + } + } + + //============================================================================== + void addColumn() override + { + if (AudioProcessor* filter = owner.getAudioProcessor()) + { + if (filter->canAddBus (isInput)) + { + if (filter->addBus (isInput)) + { + updateBusButtons(); + updateBusLayout(); + + if (InputOutputConfig* config = owner.getConfig (! isInput)) + { + config->updateBusButtons(); + config->updateBusLayout(); + } + + owner.update(); + } + } + } + } + + void removeColumn() override + { + if (AudioProcessor* filter = owner.getAudioProcessor()) + { + if (filter->getBusCount (isInput) > 1 && filter->canRemoveBus (isInput)) + { + if (filter->removeBus (isInput)) + { + currentBus = jmin (filter->getBusCount (isInput) - 1, currentBus); + + updateBusButtons(); + updateBusLayout(); + + if (InputOutputConfig* config = owner.getConfig (! isInput)) + { + config->updateBusButtons(); + config->updateBusLayout(); + } + + owner.update(); + } + } + } + } + + void columnSelected (int columnId) override + { + const int newBus = columnId - 1; + if (currentBus != newBus) + { + currentBus = newBus; + ioBuses.setSelected (currentBus + 1); + updateBusLayout(); + } + } + + //============================================================================== + FilterIOConfigurationWindow& owner; + Label ioTitle, nameLabel, name, layoutLabel; + ToggleButton enabledToggle; + ComboBox layouts; + NumberedBoxes ioBuses; + bool isInput; + int currentBus; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (InputOutputConfig) +}; + + +FilterIOConfigurationWindow::FilterIOConfigurationWindow (AudioProcessor* const p) + : AudioProcessorEditor (p), + title ("title", p->getName()) +{ + jassert (p != nullptr); + setOpaque (true); + + title.setFont (title.getFont().withStyle (Font::bold)); + addAndMakeVisible (title); + + { + ScopedLock renderLock (p->getCallbackLock()); + p->suspendProcessing (true); + p->releaseResources(); + } + + if (p->getBusCount (true) > 0 || p->canAddBus (true)) + addAndMakeVisible (inConfig = new InputOutputConfig (*this, true)); + + if (p->getBusCount (false) > 0 || p->canAddBus (false)) + addAndMakeVisible (outConfig = new InputOutputConfig (*this, false)); + + currentLayout = p->getBusesLayout(); + setSize (400, (inConfig != nullptr && outConfig != nullptr ? 160 : 0) + 200); +} + +FilterIOConfigurationWindow::~FilterIOConfigurationWindow() +{ + if (AudioProcessorGraph* graph = getGraph()) + { + if (AudioProcessor* p = getAudioProcessor()) + { + ScopedLock renderLock (graph->getCallbackLock()); + + graph->suspendProcessing (true); + graph->releaseResources(); + + p->prepareToPlay (graph->getSampleRate(), graph->getBlockSize()); + p->suspendProcessing (false); + + graph->prepareToPlay (graph->getSampleRate(), graph->getBlockSize()); + graph->suspendProcessing (false); + } + } +} + +void FilterIOConfigurationWindow::paint (Graphics& g) +{ + g.fillAll (Colours::white); +} + +void FilterIOConfigurationWindow::resized() +{ + Rectangle r = getLocalBounds().reduced (10); + + title.setBounds (r.removeFromTop (14)); + r.reduce (10, 0); + + if (inConfig != nullptr) + inConfig->setBounds (r.removeFromTop (160)); + + if (outConfig != nullptr) + outConfig->setBounds (r.removeFromTop (160)); +} + +void FilterIOConfigurationWindow::update() +{ + const int32 nodeId = getNodeId(); + + if (AudioProcessorGraph* graph = getGraph()) + if (nodeId != -1) + graph->disconnectNode (static_cast (nodeId)); + + if (GraphDocumentComponent* graphEditor = getGraphEditor()) + if (GraphEditorPanel* panel = graphEditor->graphPanel) + panel->updateComponents(); +} + +int32 FilterIOConfigurationWindow::getNodeId() const +{ + if (AudioProcessorGraph* graph = getGraph()) + { + const int n = graph->getNumNodes(); + + for (int i = 0; i < n; ++i) + if (AudioProcessorGraph::Node* node = graph->getNode (i)) + if (node->getProcessor() == getAudioProcessor()) + return static_cast (node->nodeId); + } + + return -1; +} + +MainHostWindow* FilterIOConfigurationWindow::getMainWindow() const +{ + Component* comp; + + for (int idx = 0; (comp = Desktop::getInstance().getComponent(idx)) != nullptr; ++idx) + if (MainHostWindow* mainWindow = dynamic_cast (comp)) + return mainWindow; + + return nullptr; +} + +GraphDocumentComponent* FilterIOConfigurationWindow::getGraphEditor() const +{ + if (MainHostWindow* mainWindow = getMainWindow()) + { + if (GraphDocumentComponent* graphEditor = mainWindow->getGraphEditor()) + return graphEditor; + } + + return nullptr; +} + +AudioProcessorGraph* FilterIOConfigurationWindow::getGraph() const +{ + if (GraphDocumentComponent* graphEditor = getGraphEditor()) + if (FilterGraph* filterGraph = graphEditor->graph) + return &filterGraph->getGraph(); + + return nullptr; +} diff --git a/examples/audio plugin host/Source/FilterIOConfiguration.h b/examples/audio plugin host/Source/FilterIOConfiguration.h new file mode 100644 index 0000000000..4c0d4cbebf --- /dev/null +++ b/examples/audio plugin host/Source/FilterIOConfiguration.h @@ -0,0 +1,65 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2015 - ROLI Ltd. + + Permission is granted to use this software under the terms of either: + a) the GPL v2 (or any later version) + b) the Affero GPL v3 + + Details of these licenses can be found at: www.gnu.org/licenses + + JUCE is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + ------------------------------------------------------------------------------ + + To release a closed-source product which uses JUCE, commercial licenses are + available: visit www.juce.com for more information. + + ============================================================================== + */ + +#ifndef FILTERIOCONFIGURATION_H_INCLUDED +#define FILTERIOCONFIGURATION_H_INCLUDED + +#include "FilterGraph.h" + +class FilterIOConfigurationWindow : public AudioProcessorEditor +{ +public: + class InputOutputConfig; + + //============================================================================== + FilterIOConfigurationWindow (AudioProcessor* const p); + ~FilterIOConfigurationWindow(); + + //============================================================================== + void paint (Graphics& g) override; + void resized() override; + + //============================================================================== + InputOutputConfig* getConfig (bool isInput) noexcept { return isInput ? inConfig : outConfig; } + void update(); +private: + + //============================================================================== + MainHostWindow* getMainWindow() const; + GraphDocumentComponent* getGraphEditor() const; + AudioProcessorGraph* getGraph() const; + int32 getNodeId() const; + + //============================================================================== + friend class InputOutputConfig; + + AudioProcessor::BusesLayout currentLayout; + Label title; + ScopedPointer inConfig, outConfig; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (FilterIOConfigurationWindow) +}; + + +#endif // FILTERIOCONFIGURATION_H_INCLUDED diff --git a/examples/audio plugin host/Source/GraphEditorPanel.cpp b/examples/audio plugin host/Source/GraphEditorPanel.cpp index 7394488768..ad5f9492dd 100644 --- a/examples/audio plugin host/Source/GraphEditorPanel.cpp +++ b/examples/audio plugin host/Source/GraphEditorPanel.cpp @@ -26,6 +26,7 @@ #include "GraphEditorPanel.h" #include "InternalFilters.h" #include "MainHostWindow.h" +#include "FilterIOConfiguration.h" //============================================================================== @@ -34,9 +35,11 @@ static Array activePluginWindows; PluginWindow::PluginWindow (Component* const pluginEditor, AudioProcessorGraph::Node* const o, - WindowFormatType t) + WindowFormatType t, + AudioProcessorGraph& audioGraph) : DocumentWindow (pluginEditor->getName(), Colours::lightblue, DocumentWindow::minimiseButton | DocumentWindow::closeButton), + graph (audioGraph), owner (o), type (t) { @@ -154,7 +157,8 @@ private: //============================================================================== PluginWindow* PluginWindow::getWindowFor (AudioProcessorGraph::Node* const node, - WindowFormatType type) + WindowFormatType type, + AudioProcessorGraph& audioGraph) { jassert (node != nullptr); @@ -180,6 +184,8 @@ PluginWindow* PluginWindow::getWindowFor (AudioProcessorGraph::Node* const node, ui = new GenericAudioProcessorEditor (processor); else if (type == Programs) ui = new ProgramAudioProcessorEditor (processor); + else if (type == AudioIO) + ui = new FilterIOConfigurationWindow (processor); } if (ui != nullptr) @@ -187,7 +193,7 @@ PluginWindow* PluginWindow::getWindowFor (AudioProcessorGraph::Node* const node, if (AudioPluginInstance* const plugin = dynamic_cast (processor)) ui->setName (plugin->getName()); - return new PluginWindow (ui, node, type); + return new PluginWindow (ui, node, type, audioGraph); } return nullptr; @@ -221,6 +227,7 @@ public: : filterID (filterID_), index (index_), isInput (isInput_), + busIdx (0), graph (graph_) { if (const AudioProcessorGraph::Node::Ptr node = graph.getNodeForId (filterID_)) @@ -234,17 +241,18 @@ public: } else { - const AudioProcessor::AudioBusArrangement& busArrangement = node->getProcessor()->busArrangement; + const AudioProcessor& processor = *node->getProcessor(); - const Array& buses = isInput ? busArrangement.inputBuses - : busArrangement.outputBuses; + int channel; + channel = processor.getOffsetInBusBufferForAbsoluteChannelIndex (isInput, index, busIdx); - if (buses.size() > 0) - tip = AudioChannelSet::getChannelTypeName (buses.getReference(0).channels.getTypeOfChannel (index)); + if (const AudioProcessor::Bus* bus = processor.getBus (isInput, busIdx)) + tip = bus->getName() + String (": ") + + AudioChannelSet::getAbbreviatedChannelTypeName (bus->getCurrentLayout().getTypeOfChannel (channel)); + else + tip = (isInput ? "Main Input: " + : "Main Output: ") + String (index + 1); - if (tip.isEmpty()) - tip = (isInput ? "Input " - : "Output ") + String (index + 1); } setTooltip (tip); @@ -263,7 +271,9 @@ public: p.addRectangle (w * 0.4f, isInput ? (0.5f * h) : 0.0f, w * 0.2f, h * 0.5f); - g.setColour (index == FilterGraph::midiChannelNumber ? Colours::red : Colours::green); + Colour colour = (index == FilterGraph::midiChannelNumber ? Colours::red : Colours::green); + + g.setColour (colour.withRotatedHue (static_cast (busIdx) / 5.0f)); g.fillPath (p); } @@ -289,6 +299,7 @@ public: const uint32 filterID; const int index; const bool isInput; + int busIdx; private: FilterGraph& graph; @@ -342,7 +353,9 @@ public: m.addItem (3, "Show plugin UI"); m.addItem (4, "Show all programs"); m.addItem (5, "Show all parameters"); - m.addItem (6, "Test state save/load"); + m.addSeparator(); + m.addItem (6, "Configure Audio I/O"); + m.addItem (7, "Test state save/load"); const int r = m.show(); @@ -362,7 +375,7 @@ public: AudioProcessor* const processor = f->getProcessor(); jassert (processor != nullptr); - if (r == 6) + if (r == 7) { MemoryBlock state; processor->getStateInformation (state); @@ -377,11 +390,12 @@ public: { case 4: type = PluginWindow::Programs; break; case 5: type = PluginWindow::Parameters; break; + case 6: type = PluginWindow::AudioIO; break; default: break; }; - if (PluginWindow* const w = PluginWindow::getWindowFor (f, type)) + if (PluginWindow* const w = PluginWindow::getWindowFor (f, type, graph.getGraph())) w->toFront (true); } } @@ -415,7 +429,7 @@ public: else if (e.getNumberOfClicks() == 2) { if (const AudioProcessorGraph::Node::Ptr f = graph.getNodeForId (filterID)) - if (PluginWindow* const w = PluginWindow::getWindowFor (f, PluginWindow::Normal)) + if (PluginWindow* const w = PluginWindow::getWindowFor (f, PluginWindow::Normal, graph.getGraph())) w->toFront (true); } } @@ -450,16 +464,31 @@ public: void resized() override { - for (int i = 0; i < getNumChildComponents(); ++i) + if (AudioProcessorGraph::Node::Ptr f = graph.getNodeForId (filterID)) { - if (PinComponent* const pc = dynamic_cast (getChildComponent(i))) + if (AudioProcessor* const processor = f->getProcessor()) { - const int total = pc->isInput ? numIns : numOuts; - const int index = pc->index == FilterGraph::midiChannelNumber ? (total - 1) : pc->index; + for (int i = 0; i < getNumChildComponents(); ++i) + { + if (PinComponent* const pc = dynamic_cast (getChildComponent(i))) + { + const bool isInput = pc->isInput; + int busIdx, channelIdx; - pc->setBounds (proportionOfWidth ((1 + index) / (total + 1.0f)) - pinSize / 2, - pc->isInput ? 0 : (getHeight() - pinSize), - pinSize, pinSize); + channelIdx = + processor->getOffsetInBusBufferForAbsoluteChannelIndex (isInput, pc->index, busIdx); + + const int total = isInput ? numIns : numOuts; + const int index = pc->index == FilterGraph::midiChannelNumber ? (total - 1) : pc->index; + + const float totalSpaces = static_cast (total) + (static_cast (jmax (0, processor->getBusCount (isInput) - 1)) * 0.5f); + const float indexPos = static_cast (index) + (static_cast (busIdx) * 0.5f); + + pc->setBounds (proportionOfWidth ((1.0f + indexPos) / (totalSpaces + 1.0f)) - pinSize / 2, + pc->isInput ? 0 : (getHeight() - pinSize), + pinSize, pinSize); + } + } } } } @@ -490,11 +519,11 @@ public: return; } - numIns = f->getProcessor()->getMainBusNumInputChannels(); + numIns = f->getProcessor()->getTotalNumInputChannels(); if (f->getProcessor()->acceptsMidi()) ++numIns; - numOuts = f->getProcessor()->getMainBusNumOutputChannels(); + numOuts = f->getProcessor()->getTotalNumOutputChannels(); if (f->getProcessor()->producesMidi()) ++numOuts; @@ -525,13 +554,13 @@ public: deleteAllChildren(); int i; - for (i = 0; i < f->getProcessor()->getMainBusNumInputChannels(); ++i) + for (i = 0; i < f->getProcessor()->getTotalNumInputChannels(); ++i) addAndMakeVisible (new PinComponent (graph, filterID, i, true)); if (f->getProcessor()->acceptsMidi()) addAndMakeVisible (new PinComponent (graph, filterID, FilterGraph::midiChannelNumber, true)); - for (i = 0; i < f->getProcessor()->getMainBusNumOutputChannels(); ++i) + for (i = 0; i < f->getProcessor()->getTotalNumOutputChannels(); ++i) addAndMakeVisible (new PinComponent (graph, filterID, i, false)); if (f->getProcessor()->producesMidi()) diff --git a/examples/audio plugin host/Source/GraphEditorPanel.h b/examples/audio plugin host/Source/GraphEditorPanel.h index 9c3ee5285a..6a5f98680d 100644 --- a/examples/audio plugin host/Source/GraphEditorPanel.h +++ b/examples/audio plugin host/Source/GraphEditorPanel.h @@ -108,7 +108,10 @@ private: AudioProcessorPlayer graphPlayer; MidiKeyboardState keyState; +public: GraphEditorPanel* graphPanel; + +private: Component* keyboardComp; Component* statusBar; @@ -126,13 +129,14 @@ public: Generic, Programs, Parameters, + AudioIO, NumTypes }; - PluginWindow (Component* pluginEditor, AudioProcessorGraph::Node*, WindowFormatType); + PluginWindow (Component* pluginEditor, AudioProcessorGraph::Node*, WindowFormatType, AudioProcessorGraph&); ~PluginWindow(); - static PluginWindow* getWindowFor (AudioProcessorGraph::Node*, WindowFormatType); + static PluginWindow* getWindowFor (AudioProcessorGraph::Node*, WindowFormatType, AudioProcessorGraph&); static void closeCurrentlyOpenWindowsFor (const uint32 nodeId); static void closeAllCurrentlyOpenWindows(); @@ -141,6 +145,7 @@ public: void closeButtonPressed() override; private: + AudioProcessorGraph& graph; AudioProcessorGraph::Node* owner; WindowFormatType type; diff --git a/extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj b/extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj index f1b5d51bc1..39ac7d52ce 100644 --- a/extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj +++ b/extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj @@ -31,6 +31,7 @@ 7D6AEBA4AD90EC541711C680 = {isa = PBXBuildFile; fileRef = 70D0CB56D167630AB1912B0B; }; 5144E6127912F3BAE3E6CCC8 = {isa = PBXBuildFile; fileRef = C4B5CF7830AAA69A7E9A12C2; }; 0074C214F900501DFE1595DA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_16.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_16.h"; sourceTree = "SOURCE_ROOT"; }; + 008293C9C2A486BC561590B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 00B3EB5421ADC0A47CE075CB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentAnimator.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp"; sourceTree = "SOURCE_ROOT"; }; 012D15DF2BF8C2A8D78BBCB1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_basics.h"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.h"; sourceTree = "SOURCE_ROOT"; }; 014DFF3FB0FDC135308C6E21 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDeviceSelectorComponent.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -41,7 +42,6 @@ 0245FDA8CC461E9B127C78C1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; }; 02AEF119DAE26DD4377CF71A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; 02EB0ED6B77472A4FCFFBA2C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; - 034E7453A74EABC222A41A79 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 035A7C1007632AA97B3529A1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; 035DDB4D18E65692DB8E6E35 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcparam.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcparam.c"; sourceTree = "SOURCE_ROOT"; }; 0384DEB6A07A2E9D89F7D1D6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; @@ -240,7 +240,6 @@ 2C22B4DA114E482B23796BE8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; 2CC7B66A627E070BFA76CEDE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceSelectorComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h"; sourceTree = "SOURCE_ROOT"; }; 2CC92A99C7844EF5FB57D59A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; }; - 2CF5D92890121EE3A9DDE043 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 2D21CD49127EDB94ABBF55BB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReaderSource.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp"; sourceTree = "SOURCE_ROOT"; }; 2D32B472E16741F9238FC28A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; 2D9D7B0B9A11492FD8495FF5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FFT.h"; path = "../../../../modules/juce_audio_basics/effects/juce_FFT.h"; sourceTree = "SOURCE_ROOT"; }; @@ -284,6 +283,7 @@ 35D58A1347E7CC7089D2AD12 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSubsectionReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.h"; sourceTree = "SOURCE_ROOT"; }; 362C86206432CC5C84EFBB20 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 36A22D2BE15728117A7DEDD0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToneGeneratorAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 36C50D5F676E532785B72880 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 36D7CF7F39DA551F46CE799C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = trees.c; path = "../../../../modules/juce_core/zip/zlib/trees.c"; sourceTree = "SOURCE_ROOT"; }; 3713B247A275EEEB9B652EC8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorValueTreeState.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h"; sourceTree = "SOURCE_ROOT"; }; 374CF3F673D1531ED15AB53D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -408,6 +408,7 @@ 52EF8B186F54CBA4B001FEC5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPESynthesiserVoice.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.h"; sourceTree = "SOURCE_ROOT"; }; 52FFB30B59CE07A3D9065649 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = format.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/format.h"; sourceTree = "SOURCE_ROOT"; }; 534E6D1CF198BEAE77022FF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 53565276E79B7C8BE5D52B27 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 53EA28A33DA374C82A64CF18 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = all.h; path = "../../../../modules/juce_audio_formats/codecs/flac/all.h"; sourceTree = "SOURCE_ROOT"; }; 53EFA64C90C33873A3781E3C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 548925C0C47E873AD639FE55 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -679,6 +680,7 @@ 915E7E2F19B34D7C2817FC67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; }; 9163D3EF55AD0B2B197493EC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctflt.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jidctflt.c"; sourceTree = "SOURCE_ROOT"; }; 917260F53ED8BE9007BBD18A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jddctmgr.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jddctmgr.c"; sourceTree = "SOURCE_ROOT"; }; + 91A2FA3AC8D96F89AAA848B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; 91EA75E4BBE8A87A9618D202 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 91F42C2FFCED2524DAC78E4D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OggVorbisAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; 920A9AC6E84BD8C5F577F300 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1159,6 +1161,8 @@ 4E2981EC48DBFD725AD8E626 = {isa = PBXGroup; children = ( 9F54D12C977843F8FEFCF041, ); name = AudioPerformanceTest; sourceTree = ""; }; AF32DB31A2C3295BC01931A5 = {isa = PBXGroup; children = ( + 53565276E79B7C8BE5D52B27, + 36C50D5F676E532785B72880, EC4677E8D193A9D892B5CF54, 948E6A2F9801318A6BACA604, C2386580F272DD8DA717AC5F, @@ -1485,12 +1489,13 @@ 0237CD1164BCA5B4E670C8E3, 5DBE129199F61C74A5CCB575, 0237CD1164BCA5B4E670C8E3, ); name = "juce_audio_formats"; sourceTree = ""; }; - D62926A63A5E7AB2D6F09F3C = {isa = PBXGroup; children = ( + D58CE4A2A3F6008B38AB3D9C = {isa = PBXGroup; children = ( 5222344B220646AB6EE56F3B, 56D5DA60AEFC0EAAC929A163, F828FBBE22188E0819D5655F, FF8DA2206EFE4F5CAAC6DF9B, ); name = format; sourceTree = ""; }; - 6148F6E0CD8940FED55C6C34 = {isa = PBXGroup; children = ( + F0E2424876D69CF10A516CFE = {isa = PBXGroup; children = ( + 008293C9C2A486BC561590B5, 391774514515C9FC87A3C6F6, BCA0899EFE4D4F673DAB9FC1, 62FA9E776551B423E6B3F379, @@ -1499,13 +1504,12 @@ 3DC079D7D7EFDF308DC44D4F, A5EF5FDF979BC1FF68D3EA33, 8F9FE852D4F12052C098EECE, + 91A2FA3AC8D96F89AAA848B7, 915E7E2F19B34D7C2817FC67, 45333ACAF454F661FC30924E, 123831F52D2C1E9A68B75613, B8B0992FEC384EAE2FC83B39, ); name = "format_types"; sourceTree = ""; }; - C85244C2685D373E286C1CBB = {isa = PBXGroup; children = ( - 2CF5D92890121EE3A9DDE043, - 034E7453A74EABC222A41A79, + F2EA58E32D8F94862DAB122F = {isa = PBXGroup; children = ( E2C7D05E6D7964D2381EB883, B724FA711D3E1CF40F3476CA, F27663B1521AE9B2838E0306, @@ -1537,9 +1541,9 @@ 3AC2629D782CFE655ACD6C65, 3713B247A275EEEB9B652EC8, ); name = utilities; sourceTree = ""; }; BECEC234765DCB2A1916AF07 = {isa = PBXGroup; children = ( - D62926A63A5E7AB2D6F09F3C, - 6148F6E0CD8940FED55C6C34, - C85244C2685D373E286C1CBB, + D58CE4A2A3F6008B38AB3D9C, + F0E2424876D69CF10A516CFE, + F2EA58E32D8F94862DAB122F, 1A159268BDE54C8019CA51DF, 6FA59793599F883A73C24E98, 8929A374F1046A91D08C5504, diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2015/AudioPerformanceTest.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2015/AudioPerformanceTest.vcxproj index 5be869eb67..7ead19e596 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2015/AudioPerformanceTest.vcxproj +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2015/AudioPerformanceTest.vcxproj @@ -130,6 +130,9 @@ + + true + true @@ -481,9 +484,6 @@ true - - true - true @@ -1632,6 +1632,7 @@ + @@ -1785,15 +1786,16 @@ + + - diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2015/AudioPerformanceTest.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2015/AudioPerformanceTest.vcxproj.filters index e39f1ba592..710758ae38 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2015/AudioPerformanceTest.vcxproj.filters +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2015/AudioPerformanceTest.vcxproj.filters @@ -334,6 +334,9 @@ AudioPerformanceTest\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -703,9 +706,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -1968,6 +1968,9 @@ AudioPerformanceTest\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2427,6 +2430,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2442,6 +2448,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2451,9 +2460,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj b/extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj index 5c3a3592ab..246c6b7702 100644 --- a/extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj +++ b/extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj @@ -32,6 +32,7 @@ 7D6AEBA4AD90EC541711C680 = {isa = PBXBuildFile; fileRef = 70D0CB56D167630AB1912B0B; }; 5144E6127912F3BAE3E6CCC8 = {isa = PBXBuildFile; fileRef = C4B5CF7830AAA69A7E9A12C2; }; 0074C214F900501DFE1595DA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_16.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_16.h"; sourceTree = "SOURCE_ROOT"; }; + 008293C9C2A486BC561590B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 00B3EB5421ADC0A47CE075CB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentAnimator.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp"; sourceTree = "SOURCE_ROOT"; }; 012D15DF2BF8C2A8D78BBCB1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_basics.h"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.h"; sourceTree = "SOURCE_ROOT"; }; 014DFF3FB0FDC135308C6E21 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDeviceSelectorComponent.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -42,7 +43,6 @@ 0245FDA8CC461E9B127C78C1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; }; 02AEF119DAE26DD4377CF71A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; 02EB0ED6B77472A4FCFFBA2C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; - 034E7453A74EABC222A41A79 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 035A7C1007632AA97B3529A1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; 035DDB4D18E65692DB8E6E35 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcparam.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcparam.c"; sourceTree = "SOURCE_ROOT"; }; 0384DEB6A07A2E9D89F7D1D6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; @@ -241,7 +241,6 @@ 2C22B4DA114E482B23796BE8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; 2CC7B66A627E070BFA76CEDE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioDeviceSelectorComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h"; sourceTree = "SOURCE_ROOT"; }; 2CC92A99C7844EF5FB57D59A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; }; - 2CF5D92890121EE3A9DDE043 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 2D21CD49127EDB94ABBF55BB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReaderSource.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp"; sourceTree = "SOURCE_ROOT"; }; 2D32B472E16741F9238FC28A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_AudioCDReader.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; 2D9D7B0B9A11492FD8495FF5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FFT.h"; path = "../../../../modules/juce_audio_basics/effects/juce_FFT.h"; sourceTree = "SOURCE_ROOT"; }; @@ -284,6 +283,7 @@ 35D58A1347E7CC7089D2AD12 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSubsectionReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.h"; sourceTree = "SOURCE_ROOT"; }; 362C86206432CC5C84EFBB20 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarComponent.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 36A22D2BE15728117A7DEDD0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToneGeneratorAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 36C50D5F676E532785B72880 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 36D7CF7F39DA551F46CE799C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = trees.c; path = "../../../../modules/juce_core/zip/zlib/trees.c"; sourceTree = "SOURCE_ROOT"; }; 3713B247A275EEEB9B652EC8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorValueTreeState.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h"; sourceTree = "SOURCE_ROOT"; }; 374CF3F673D1531ED15AB53D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -406,6 +406,7 @@ 52EF8B186F54CBA4B001FEC5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPESynthesiserVoice.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.h"; sourceTree = "SOURCE_ROOT"; }; 52FFB30B59CE07A3D9065649 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = format.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/format.h"; sourceTree = "SOURCE_ROOT"; }; 534E6D1CF198BEAE77022FF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + 53565276E79B7C8BE5D52B27 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; 53EA28A33DA374C82A64CF18 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = all.h; path = "../../../../modules/juce_audio_formats/codecs/flac/all.h"; sourceTree = "SOURCE_ROOT"; }; 53EFA64C90C33873A3781E3C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 548925C0C47E873AD639FE55 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -681,6 +682,7 @@ 915E7E2F19B34D7C2817FC67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTInterface.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h"; sourceTree = "SOURCE_ROOT"; }; 9163D3EF55AD0B2B197493EC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctflt.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jidctflt.c"; sourceTree = "SOURCE_ROOT"; }; 917260F53ED8BE9007BBD18A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jddctmgr.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jddctmgr.c"; sourceTree = "SOURCE_ROOT"; }; + 91A2FA3AC8D96F89AAA848B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; 91EA75E4BBE8A87A9618D202 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableCornerComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 91F42C2FFCED2524DAC78E4D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OggVorbisAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; 920A9AC6E84BD8C5F577F300 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1161,6 +1163,8 @@ 4E2981EC48DBFD725AD8E626 = {isa = PBXGroup; children = ( 9F54D12C977843F8FEFCF041, ); name = AudioPerformanceTest; sourceTree = ""; }; AF32DB31A2C3295BC01931A5 = {isa = PBXGroup; children = ( + 53565276E79B7C8BE5D52B27, + 36C50D5F676E532785B72880, EC4677E8D193A9D892B5CF54, 948E6A2F9801318A6BACA604, C2386580F272DD8DA717AC5F, @@ -1487,12 +1491,13 @@ 0237CD1164BCA5B4E670C8E3, 5DBE129199F61C74A5CCB575, 0237CD1164BCA5B4E670C8E3, ); name = "juce_audio_formats"; sourceTree = ""; }; - D62926A63A5E7AB2D6F09F3C = {isa = PBXGroup; children = ( + D58CE4A2A3F6008B38AB3D9C = {isa = PBXGroup; children = ( 5222344B220646AB6EE56F3B, 56D5DA60AEFC0EAAC929A163, F828FBBE22188E0819D5655F, FF8DA2206EFE4F5CAAC6DF9B, ); name = format; sourceTree = ""; }; - 6148F6E0CD8940FED55C6C34 = {isa = PBXGroup; children = ( + F0E2424876D69CF10A516CFE = {isa = PBXGroup; children = ( + 008293C9C2A486BC561590B5, 391774514515C9FC87A3C6F6, BCA0899EFE4D4F673DAB9FC1, 62FA9E776551B423E6B3F379, @@ -1501,13 +1506,12 @@ 3DC079D7D7EFDF308DC44D4F, A5EF5FDF979BC1FF68D3EA33, 8F9FE852D4F12052C098EECE, + 91A2FA3AC8D96F89AAA848B7, 915E7E2F19B34D7C2817FC67, 45333ACAF454F661FC30924E, 123831F52D2C1E9A68B75613, B8B0992FEC384EAE2FC83B39, ); name = "format_types"; sourceTree = ""; }; - C85244C2685D373E286C1CBB = {isa = PBXGroup; children = ( - 2CF5D92890121EE3A9DDE043, - 034E7453A74EABC222A41A79, + F2EA58E32D8F94862DAB122F = {isa = PBXGroup; children = ( E2C7D05E6D7964D2381EB883, B724FA711D3E1CF40F3476CA, F27663B1521AE9B2838E0306, @@ -1539,9 +1543,9 @@ 3AC2629D782CFE655ACD6C65, 3713B247A275EEEB9B652EC8, ); name = utilities; sourceTree = ""; }; BECEC234765DCB2A1916AF07 = {isa = PBXGroup; children = ( - D62926A63A5E7AB2D6F09F3C, - 6148F6E0CD8940FED55C6C34, - C85244C2685D373E286C1CBB, + D58CE4A2A3F6008B38AB3D9C, + F0E2424876D69CF10A516CFE, + F2EA58E32D8F94862DAB122F, 1A159268BDE54C8019CA51DF, 6FA59793599F883A73C24E98, 8929A374F1046A91D08C5504, diff --git a/extras/Projucer/JuceLibraryCode/BinaryData.cpp b/extras/Projucer/JuceLibraryCode/BinaryData.cpp index e126862a9b..c3fc32b900 100644 --- a/extras/Projucer/JuceLibraryCode/BinaryData.cpp +++ b/extras/Projucer/JuceLibraryCode/BinaryData.cpp @@ -294,6 +294,16 @@ static const unsigned char temp_binary_data_4[] = "\r\n" "//==============================================================================\r\n" "FILTERCLASSNAME::FILTERCLASSNAME()\r\n" +"#ifndef JucePlugin_PreferredChannelConfigurations\r\n" +" : AudioProcessor (BusesProperties()\r\n" +" #if ! JucePlugin_IsMidiEffect\r\n" +" #if ! JucePlugin_IsSynth\r\n" +" .withInput (\"Input\", AudioChannelSet::stereo(), true)\r\n" +" #endif\r\n" +" .withOutput (\"Output\", AudioChannelSet::stereo(), true)\r\n" +" #endif\r\n" +" )\r\n" +"#endif\r\n" "{\r\n" "}\r\n" "\r\n" @@ -368,27 +378,26 @@ static const unsigned char temp_binary_data_4[] = "}\r\n" "\r\n" "#ifndef JucePlugin_PreferredChannelConfigurations\r\n" -"bool FILTERCLASSNAME::setPreferredBusArrangement (bool isInput, int bus, const AudioChannelSet& preferredSet)\r\n" +"bool FILTERCLASSNAME::isBusesLayoutSupported (const BusesLayout& layouts) const\r\n" "{\r\n" -" // Reject any bus arrangements that are not compatible with your plugin\r\n" -"\r\n" -" const int numChannels = preferredSet.size();\r\n" -"\r\n" -" #if JucePlugin_IsMidiEffect\r\n" -" if (numChannels != 0)\r\n" -" return false;\r\n" -" #elif JucePlugin_IsSynth\r\n" -" if (isInput || (numChannels != 1 && numChannels != 2))\r\n" -" return false;\r\n" -" #else\r\n" -" if (numChannels != 1 && numChannels != 2)\r\n" +" #if JucePlugin_IsMidiEffect\r\n" +" ignoreUnused (layouts);\r\n" +" return true;\r\n" +" #else\r\n" +" // This is the place where you check if the layout is supported.\r\n" +" // In this template code we only support mono or stereo.\r\n" +" if (layouts.getMainOutputChannelSet() != AudioChannelSet::mono()\r\n" +" && layouts.getMainOutputChannelSet() != AudioChannelSet::stereo())\r\n" " return false;\r\n" "\r\n" -" if (! AudioProcessor::setPreferredBusArrangement (! isInput, bus, preferredSet))\r\n" +" // This checks if the input layout matches the output layout\r\n" +" #if ! JucePlugin_IsSynth\r\n" +" if (layouts.getMainOutputChannelSet() != layouts.getMainInputChannelSet())\r\n" " return false;\r\n" " #endif\r\n" "\r\n" -" return AudioProcessor::setPreferredBusArrangement (isInput, bus, preferredSet);\r\n" +" return true;\r\n" +" #endif\r\n" "}\r\n" "#endif\r\n" "\r\n" @@ -483,7 +492,7 @@ static const unsigned char temp_binary_data_5[] = " void releaseResources() override;\r\n" "\r\n" " #ifndef JucePlugin_PreferredChannelConfigurations\r\n" -" bool setPreferredBusArrangement (bool isInput, int bus, const AudioChannelSet& preferredSet) override;\r\n" +" bool isBusesLayoutSupported (const BusesLayout& layouts) const override;\r\n" " #endif\r\n" "\r\n" " void processBlock (AudioSampleBuffer&, MidiBuffer&) override;\r\n" @@ -4050,8 +4059,8 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw case 0xafccbd3f: numBytes = 3203; return jucer_AudioComponentTemplate_cpp; case 0x27c5a93a: numBytes = 1162; return jucer_AudioPluginEditorTemplate_cpp; case 0x4d0721bf: numBytes = 994; return jucer_AudioPluginEditorTemplate_h; - case 0x51b49ac5: numBytes = 5047; return jucer_AudioPluginFilterTemplate_cpp; - case 0x488afa0a: numBytes = 2289; return jucer_AudioPluginFilterTemplate_h; + case 0x51b49ac5: numBytes = 5475; return jucer_AudioPluginFilterTemplate_cpp; + case 0x488afa0a: numBytes = 2259; return jucer_AudioPluginFilterTemplate_h; case 0xabad7041: numBytes = 2151; return jucer_ComponentTemplate_cpp; case 0xfc72fe86: numBytes = 2131; return jucer_ComponentTemplate_h; case 0x0b66646c: numBytes = 886; return jucer_ContentCompTemplate_cpp; diff --git a/extras/Projucer/JuceLibraryCode/BinaryData.h b/extras/Projucer/JuceLibraryCode/BinaryData.h index 40ebaf995f..e1fd14bd84 100644 --- a/extras/Projucer/JuceLibraryCode/BinaryData.h +++ b/extras/Projucer/JuceLibraryCode/BinaryData.h @@ -22,10 +22,10 @@ namespace BinaryData const int jucer_AudioPluginEditorTemplate_hSize = 994; extern const char* jucer_AudioPluginFilterTemplate_cpp; - const int jucer_AudioPluginFilterTemplate_cppSize = 5047; + const int jucer_AudioPluginFilterTemplate_cppSize = 5475; extern const char* jucer_AudioPluginFilterTemplate_h; - const int jucer_AudioPluginFilterTemplate_hSize = 2289; + const int jucer_AudioPluginFilterTemplate_hSize = 2259; extern const char* jucer_ComponentTemplate_cpp; const int jucer_ComponentTemplate_cppSize = 2151; diff --git a/extras/Projucer/Source/BinaryData/jucer_AudioPluginFilterTemplate.cpp b/extras/Projucer/Source/BinaryData/jucer_AudioPluginFilterTemplate.cpp index e75add664d..04345cfcf1 100644 --- a/extras/Projucer/Source/BinaryData/jucer_AudioPluginFilterTemplate.cpp +++ b/extras/Projucer/Source/BinaryData/jucer_AudioPluginFilterTemplate.cpp @@ -13,6 +13,16 @@ FILTERHEADERS //============================================================================== FILTERCLASSNAME::FILTERCLASSNAME() +#ifndef JucePlugin_PreferredChannelConfigurations + : AudioProcessor (BusesProperties() + #if ! JucePlugin_IsMidiEffect + #if ! JucePlugin_IsSynth + .withInput ("Input", AudioChannelSet::stereo(), true) + #endif + .withOutput ("Output", AudioChannelSet::stereo(), true) + #endif + ) +#endif { } @@ -87,27 +97,26 @@ void FILTERCLASSNAME::releaseResources() } #ifndef JucePlugin_PreferredChannelConfigurations -bool FILTERCLASSNAME::setPreferredBusArrangement (bool isInput, int bus, const AudioChannelSet& preferredSet) +bool FILTERCLASSNAME::isBusesLayoutSupported (const BusesLayout& layouts) const { - // Reject any bus arrangements that are not compatible with your plugin - - const int numChannels = preferredSet.size(); - - #if JucePlugin_IsMidiEffect - if (numChannels != 0) - return false; - #elif JucePlugin_IsSynth - if (isInput || (numChannels != 1 && numChannels != 2)) - return false; - #else - if (numChannels != 1 && numChannels != 2) + #if JucePlugin_IsMidiEffect + ignoreUnused (layouts); + return true; + #else + // This is the place where you check if the layout is supported. + // In this template code we only support mono or stereo. + if (layouts.getMainOutputChannelSet() != AudioChannelSet::mono() + && layouts.getMainOutputChannelSet() != AudioChannelSet::stereo()) return false; - if (! AudioProcessor::setPreferredBusArrangement (! isInput, bus, preferredSet)) + // This checks if the input layout matches the output layout + #if ! JucePlugin_IsSynth + if (layouts.getMainOutputChannelSet() != layouts.getMainInputChannelSet()) return false; #endif - return AudioProcessor::setPreferredBusArrangement (isInput, bus, preferredSet); + return true; + #endif } #endif diff --git a/extras/Projucer/Source/BinaryData/jucer_AudioPluginFilterTemplate.h b/extras/Projucer/Source/BinaryData/jucer_AudioPluginFilterTemplate.h index b112aa362c..547d09b447 100644 --- a/extras/Projucer/Source/BinaryData/jucer_AudioPluginFilterTemplate.h +++ b/extras/Projucer/Source/BinaryData/jucer_AudioPluginFilterTemplate.h @@ -29,7 +29,7 @@ public: void releaseResources() override; #ifndef JucePlugin_PreferredChannelConfigurations - bool setPreferredBusArrangement (bool isInput, int bus, const AudioChannelSet& preferredSet) override; + bool isBusesLayoutSupported (const BusesLayout& layouts) const override; #endif void processBlock (AudioSampleBuffer&, MidiBuffer&) override; diff --git a/extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj b/extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj index 691121de29..e3b79b795c 100644 --- a/extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj +++ b/extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj @@ -108,6 +108,7 @@ 118987654CE12CAC784213BB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_basics.cpp"; path = "../../../../modules/juce_gui_basics/juce_gui_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; 11AD5417D0E7C2C1C828838C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlElement.h"; path = "../../../../modules/juce_core/xml/juce_XmlElement.h"; sourceTree = "SOURCE_ROOT"; }; 11C847C1E8A88B669765EC78 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLContext.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLContext.cpp"; sourceTree = "SOURCE_ROOT"; }; + 122474A629F551412A66A8ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AU_Shared.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h"; sourceTree = "SOURCE_ROOT"; }; 130A3006D67DEE7054BBC5B6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; }; 136DC9F51F7618E89A87A97D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextInputTarget.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextInputTarget.h"; sourceTree = "SOURCE_ROOT"; }; 1382CD8AF4831CB28EBC85F4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseEvent.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseEvent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -628,6 +629,7 @@ 83911624896F5077D1584CE5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDescription.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp"; sourceTree = "SOURCE_ROOT"; }; 83C07F8DBFB9A1A73BF0CD79 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RecentlyOpenedFilesList.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp"; sourceTree = "SOURCE_ROOT"; }; 83CAA169494D570CF137600C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = zlib.h; path = "../../../../modules/juce_core/zip/zlib/zlib.h"; sourceTree = "SOURCE_ROOT"; }; + 83F6D00DCD5A0F59DA0173C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; 83FE3FC19E4060EF4B820617 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInputSource.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.h"; sourceTree = "SOURCE_ROOT"; }; 846FD9CFF342230F791765DE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentPeer.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.cpp"; sourceTree = "SOURCE_ROOT"; }; 8495525D384E30C43C203FAA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -907,7 +909,6 @@ BE5E66183FBDAED0236061AE = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = System/Library/Frameworks/QTKit.framework; sourceTree = SDKROOT; }; BEDCD61FAD477E737E9001FB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LinearSmoothedValue.h"; path = "../../../../modules/juce_audio_basics/effects/juce_LinearSmoothedValue.h"; sourceTree = "SOURCE_ROOT"; }; BEF5F831841B2D82D0F8184D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_extra.cpp"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.cpp"; sourceTree = "SOURCE_ROOT"; }; - BF07F813AE252965882B419D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioChannelSet.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.h"; sourceTree = "SOURCE_ROOT"; }; BF4300338A09F8D69332A4FA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdapistd.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdapistd.c"; sourceTree = "SOURCE_ROOT"; }; BF7DB7CEEFC788FBAC7DDAFD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; }; BF83F16E220BF09C26FD7DA6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ElementComparator.h"; path = "../../../../modules/juce_core/containers/juce_ElementComparator.h"; sourceTree = "SOURCE_ROOT"; }; @@ -931,7 +932,6 @@ C2F2E19D495434FA2DE26CDC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KnownPluginList.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp"; sourceTree = "SOURCE_ROOT"; }; C38E103566DD334575DEB132 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = format.h; path = "../../../../modules/juce_audio_formats/codecs/flac/format.h"; sourceTree = "SOURCE_ROOT"; }; C3B38FF0CFF855B48FD341D2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AudioUnitPluginFormat.mm"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; }; - C3FF931ABD1A2A7A0B3F2F32 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; C42BCD9C395C1CD9E1207E88 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = zutil.c; path = "../../../../modules/juce_core/zip/zlib/zutil.c"; sourceTree = "SOURCE_ROOT"; }; C43F3C14D904F5ACD41ADA91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; C4725A9E883FE9A4BE50D9CA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RSAKey.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_RSAKey.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -946,6 +946,7 @@ C5E11042008ADD9755FE072F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormatManager.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h"; sourceTree = "SOURCE_ROOT"; }; C642049FA1163EA7E12E88A3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CoreAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; C66E703E2D09BB632D602704 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = bitwriter.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/bitwriter.c"; sourceTree = "SOURCE_ROOT"; }; + C6D16786DBDCE534E674241F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTCommon.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h"; sourceTree = "SOURCE_ROOT"; }; C6FE61439C07717B4A0F9B64 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Whirlpool.cpp"; path = "../../../../modules/juce_cryptography/hashing/juce_Whirlpool.cpp"; sourceTree = "SOURCE_ROOT"; }; C72AFDEA087704F6D67C4D6F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; C7625C0B5AF05F7B34BFA9FD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DeletedAtShutdown.cpp"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1194,6 +1195,7 @@ F94CD18DE8CA9B8252F7BEDA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPCompressorOutputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPCompressorOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; F9532938F368676B0E308A2E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors.mm"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; F98B3688EA63D8E635D2CC43 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsContext.h"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + F9C7F1AAAD6469FB3100D949 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioChannelSet.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp"; sourceTree = "SOURCE_ROOT"; }; F9CF000B7EF51FF75DC39F02 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = envelope.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.h"; sourceTree = "SOURCE_ROOT"; }; F9CF1242078815002E111C9D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AffineTransform.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_AffineTransform.cpp"; sourceTree = "SOURCE_ROOT"; }; FA3830ED7B86B0B1FB5AD8F8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OggVorbisAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1223,6 +1225,8 @@ 88C22F995571E4A515721154 = {isa = PBXGroup; children = ( 9E7E99EBD6772DAF4725435D, ); name = UnitTestRunner; sourceTree = ""; }; 0D65DC6399D4325C97F412F8 = {isa = PBXGroup; children = ( + F9C7F1AAAD6469FB3100D949, + 83F6D00DCD5A0F59DA0173C2, 3119FD9D68523225E7F0D144, 4B26E321B9E1B5C873CDA2C7, 7E8909F2EAEC89A5DDFFE66A, @@ -1549,12 +1553,13 @@ D3B67F76F3E120815C1B3729, B114804B7D23DA65A2A6351A, D3B67F76F3E120815C1B3729, ); name = "juce_audio_formats"; sourceTree = ""; }; - 8736C0529FA9C2C32A98764D = {isa = PBXGroup; children = ( + 0F8790396D2C77037F870ED6 = {isa = PBXGroup; children = ( 345459CE27D07EDD3E19B299, DC6B27F5C167FD13C2C903B5, 82C1F8A9929DF547C004C07F, C5E11042008ADD9755FE072F, ); name = format; sourceTree = ""; }; - ABF2AF74BF7080092729FB97 = {isa = PBXGroup; children = ( + BB063BC4206A502F6F09B13B = {isa = PBXGroup; children = ( + 122474A629F551412A66A8ED, 0EAC6F9BA8425E419F803A2B, C3B38FF0CFF855B48FD341D2, 54BF97F32965B4FB5CF2D56F, @@ -1563,13 +1568,12 @@ E7153B9DA221B856B57005B2, 458AFB04FC657C0B8E140C57, D42D77C52B0B860D000123A7, + C6D16786DBDCE534E674241F, 16CA9656E3C51EFD0962ABC4, E51C2746AF287DBC983CAF65, E3D8F97C26B8E03820AFC971, 763A365B46F5D3EDD8F8B1EF, ); name = "format_types"; sourceTree = ""; }; - 158CACD42A1CC66D5423F77A = {isa = PBXGroup; children = ( - C3FF931ABD1A2A7A0B3F2F32, - BF07F813AE252965882B419D, + 96B6B1F3563E2A356872507D = {isa = PBXGroup; children = ( 59EE21D372B3DFC1B453B8B4, 7BC436F55CA94D4ED0A20BC6, 468EE2A5579D7F6508B3BE7F, @@ -1601,9 +1605,9 @@ A413B2A303984674A412461B, AB22692A2D791A3D54D8C032, ); name = utilities; sourceTree = ""; }; 67E024FB39CF9D5F419DFBF5 = {isa = PBXGroup; children = ( - 8736C0529FA9C2C32A98764D, - ABF2AF74BF7080092729FB97, - 158CACD42A1CC66D5423F77A, + 0F8790396D2C77037F870ED6, + BB063BC4206A502F6F09B13B, + 96B6B1F3563E2A356872507D, B38FEF84E3189E32B3A795A7, 4661CAE20E855F3E2858F466, 5855D3234BC62C85FAD56651, diff --git a/extras/UnitTestRunner/Builds/VisualStudio2015/UnitTestRunner.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2015/UnitTestRunner.vcxproj index 8bfa57321b..7289b02550 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2015/UnitTestRunner.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2015/UnitTestRunner.vcxproj @@ -130,6 +130,9 @@ + + true + true @@ -481,9 +484,6 @@ true - - true - true @@ -1697,6 +1697,7 @@ + @@ -1850,15 +1851,16 @@ + + - diff --git a/extras/UnitTestRunner/Builds/VisualStudio2015/UnitTestRunner.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2015/UnitTestRunner.vcxproj.filters index 98d585b9c7..5c76a07bb3 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2015/UnitTestRunner.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2015/UnitTestRunner.vcxproj.filters @@ -364,6 +364,9 @@ UnitTestRunner\Source + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -733,9 +736,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2073,6 +2073,9 @@ + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2532,6 +2535,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2547,6 +2553,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2556,9 +2565,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/extras/windows dll/Builds/VisualStudio2010/juce_dll.vcxproj b/extras/windows dll/Builds/VisualStudio2010/juce_dll.vcxproj index 16c3d0ecf1..7fdd585f41 100644 --- a/extras/windows dll/Builds/VisualStudio2010/juce_dll.vcxproj +++ b/extras/windows dll/Builds/VisualStudio2010/juce_dll.vcxproj @@ -123,6 +123,9 @@ + + true + true @@ -474,9 +477,6 @@ true - - true - true @@ -1696,6 +1696,7 @@ + @@ -1849,15 +1850,16 @@ + + - diff --git a/extras/windows dll/Builds/VisualStudio2010/juce_dll.vcxproj.filters b/extras/windows dll/Builds/VisualStudio2010/juce_dll.vcxproj.filters index b4065dfa70..3cfdb844ad 100644 --- a/extras/windows dll/Builds/VisualStudio2010/juce_dll.vcxproj.filters +++ b/extras/windows dll/Builds/VisualStudio2010/juce_dll.vcxproj.filters @@ -367,6 +367,9 @@ + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -736,9 +739,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors @@ -2091,6 +2091,9 @@ + + Juce Modules\juce_audio_basics\buffers + Juce Modules\juce_audio_basics\buffers @@ -2550,6 +2553,9 @@ Juce Modules\juce_audio_processors\format + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2565,6 +2571,9 @@ Juce Modules\juce_audio_processors\format_types + + Juce Modules\juce_audio_processors\format_types + Juce Modules\juce_audio_processors\format_types @@ -2574,9 +2583,6 @@ Juce Modules\juce_audio_processors\format_types - - Juce Modules\juce_audio_processors\processors - Juce Modules\juce_audio_processors\processors diff --git a/modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp b/modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp similarity index 74% rename from modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp rename to modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp index e12a2263ca..c6e46cc03e 100644 --- a/modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp +++ b/modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp @@ -38,14 +38,14 @@ String AudioChannelSet::getChannelTypeName (AudioChannelSet::ChannelType type) case left: return NEEDS_TRANS("Left"); case right: return NEEDS_TRANS("Right"); case centre: return NEEDS_TRANS("Centre"); - case subbass: return NEEDS_TRANS("Subbass"); + case LFE: return NEEDS_TRANS("LFE"); case leftSurround: return NEEDS_TRANS("Left Surround"); case rightSurround: return NEEDS_TRANS("Right Surround"); case leftCentre: return NEEDS_TRANS("Left Centre"); case rightCentre: return NEEDS_TRANS("Right Centre"); - case surround: return NEEDS_TRANS("Surround"); - case leftRearSurround: return NEEDS_TRANS("Left Rear Surround"); - case rightRearSurround: return NEEDS_TRANS("Right Rear Surround"); + case centreSurround: return NEEDS_TRANS("Centre Surround"); + case leftSurroundRear: return NEEDS_TRANS("Left Surround Rear"); + case rightSurroundRear: return NEEDS_TRANS("Right Surround Rear"); case topMiddle: return NEEDS_TRANS("Top Middle"); case topFrontLeft: return NEEDS_TRANS("Top Front Left"); case topFrontCentre: return NEEDS_TRANS("Top Front Centre"); @@ -55,9 +55,9 @@ String AudioChannelSet::getChannelTypeName (AudioChannelSet::ChannelType type) case topRearRight: return NEEDS_TRANS("Top Rear Right"); case wideLeft: return NEEDS_TRANS("Wide Left"); case wideRight: return NEEDS_TRANS("Wide Right"); - case subbass2: return NEEDS_TRANS("Subbass 2"); - case leftSurroundDirect: return NEEDS_TRANS ("Left Surround Direct"); - case rightSurroundDirect: return NEEDS_TRANS ("Right Surround Direct"); + case LFE2: return NEEDS_TRANS("LFE 2"); + case leftSurroundSide: return NEEDS_TRANS ("Left Surround Side"); + case rightSurroundSide: return NEEDS_TRANS ("Right Surround Side"); case ambisonicW: return NEEDS_TRANS("Ambisonic W"); case ambisonicX: return NEEDS_TRANS("Ambisonic X"); case ambisonicY: return NEEDS_TRANS("Ambisonic Y"); @@ -78,14 +78,14 @@ String AudioChannelSet::getAbbreviatedChannelTypeName (AudioChannelSet::ChannelT case left: return "L"; case right: return "R"; case centre: return "C"; - case subbass: return "Lfe"; + case LFE: return "Lfe"; case leftSurround: return "Ls"; case rightSurround: return "Rs"; case leftCentre: return "Lc"; case rightCentre: return "Rc"; - case surround: return "S"; - case leftRearSurround: return "Lrs"; - case rightRearSurround: return "Rrs"; + case centreSurround: return "Cs"; + case leftSurroundRear: return "Lrs"; + case rightSurroundRear: return "Rrs"; case topMiddle: return "Tm"; case topFrontLeft: return "Tfl"; case topFrontCentre: return "Tfc"; @@ -95,9 +95,9 @@ String AudioChannelSet::getAbbreviatedChannelTypeName (AudioChannelSet::ChannelT case topRearRight: return "Trr"; case wideLeft: return "Wl"; case wideRight: return "Wr"; - case subbass2: return "Lfe2"; - case leftSurroundDirect: return "Lsd"; - case rightSurroundDirect: return "Rsd"; + case LFE2: return "Lfe2"; + case leftSurroundSide: return "Lss"; + case rightSurroundSide: return "Rss"; case ambisonicW: return "W"; case ambisonicX: return "X"; case ambisonicY: return "Y"; @@ -130,24 +130,29 @@ String AudioChannelSet::getDescription() const if (*this == disabled()) return "Disabled"; if (*this == mono()) return "Mono"; if (*this == stereo()) return "Stereo"; + if (*this == createLCR()) return "LCR"; if (*this == createLRS()) return "LRS"; if (*this == createLCRS()) return "LCRS"; + + if (*this == create5point0()) return "5.1 Surround"; + if (*this == create5point1()) return "5.1 Surround (+Lfe)"; + if (*this == create6point0()) return "6.1 Surround"; + if (*this == create6point1()) return "6.1 Surround (+Lfe)"; + if (*this == create6point0Music()) return "6.1 (Music) Surround"; + if (*this == create6point1Music()) return "6.1 (Music) Surround (+Lfe)"; + if (*this == create7point0()) return "7.1 Surround"; + if (*this == create7point1()) return "7.1 Surround (Lfe)"; + if (*this == create7point0SDDS()) return "7.1 Surround SDDS"; + if (*this == create7point1SDDS()) return "7.1 Surround SDDS (+Lfe)"; + if (*this == quadraphonic()) return "Quadraphonic"; if (*this == pentagonal()) return "Pentagonal"; if (*this == hexagonal()) return "Hexagonal"; if (*this == octagonal()) return "Octagonal"; if (*this == ambisonic()) return "Ambisonic"; - if (*this == create5point0()) return "5.1 Surround"; - if (*this == create5point1()) return "5.1 Surround (+Lfe)"; - if (*this == create6point0()) return "6.1 Surround"; - if (*this == create6point0Music()) return "6.1 (Music) Surround"; - if (*this == create6point1()) return "6.1 Surround (+Lfe)"; - if (*this == create7point0()) return "7.1 Surround (Rear)"; - if (*this == create7point1()) return "7.1 Surround (Rear +Lfe)"; - if (*this == create7point1AC3()) return "7.1 AC3 Surround (Rear + Lfe)"; - if (*this == createFront7point0()) return "7.1 Surround (Front)"; - if (*this == createFront7point1()) return "7.1 Surround (Front +Lfe)"; + + return "Unknown"; } @@ -221,21 +226,21 @@ AudioChannelSet AudioChannelSet::stereo() { return AudioChannelSet ( AudioChannelSet AudioChannelSet::createLCR() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre)); } AudioChannelSet AudioChannelSet::createLRS() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << surround)); } AudioChannelSet AudioChannelSet::createLCRS() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << surround)); } -AudioChannelSet AudioChannelSet::quadraphonic() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << leftSurround) | (1u << rightSurround)); } -AudioChannelSet AudioChannelSet::pentagonal() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << leftRearSurround) | (1u << rightRearSurround) | (1u << centre)); } -AudioChannelSet AudioChannelSet::hexagonal() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << leftRearSurround) | (1u << rightRearSurround) | (1u << centre) | (1u << surround)); } -AudioChannelSet AudioChannelSet::octagonal() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << leftSurround) | (1u << rightSurround) | (1u << centre) | (1u << surround) | (1u << wideLeft) | (1u << wideRight)); } -AudioChannelSet AudioChannelSet::ambisonic() { return AudioChannelSet ((1u << ambisonicW) | (1u << ambisonicX) | (1u << ambisonicY) | (1u << ambisonicZ)); } AudioChannelSet AudioChannelSet::create5point0() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << leftSurround) | (1u << rightSurround)); } -AudioChannelSet AudioChannelSet::create5point1() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << subbass) | (1u << leftSurround) | (1u << rightSurround)); } -AudioChannelSet AudioChannelSet::create6point0() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << leftSurround) | (1u << rightSurround) | (1u << surround)); } -AudioChannelSet AudioChannelSet::create6point0Music() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << leftRearSurround) | (1u << rightRearSurround) | (1u << leftSurround) | (1u << rightSurround)); } -AudioChannelSet AudioChannelSet::create6point1() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << subbass) | (1u << leftSurround) | (1u << rightSurround) | (1u << surround)); } -AudioChannelSet AudioChannelSet::create7point0() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << leftSurround) | (1u << rightSurround) | (1u << leftRearSurround) | (1u << rightRearSurround)); } -AudioChannelSet AudioChannelSet::create7point1() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << subbass) | (1u << leftRearSurround) | (1u << rightRearSurround) | (1u << leftSurround) | (1u << rightSurround)); } -AudioChannelSet AudioChannelSet::create7point1AC3() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << subbass) | (1u << leftSurround) | (1u << rightSurround) | (1u << leftSurroundDirect) | (1u << rightSurroundDirect)); } -AudioChannelSet AudioChannelSet::createFront7point0() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << leftSurround) | (1u << rightSurround) | (1u << leftCentre) | (1u << rightCentre)); } -AudioChannelSet AudioChannelSet::createFront7point1() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << subbass) | (1u << leftSurround) | (1u << rightSurround) | (1u << leftCentre) | (1u << rightCentre)); } +AudioChannelSet AudioChannelSet::create5point1() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << leftSurround) | (1u << rightSurround) | (1u << LFE)); } +AudioChannelSet AudioChannelSet::create6point0() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << leftSurround) | (1u << rightSurround) | (1u << centreSurround)); } +AudioChannelSet AudioChannelSet::create6point1() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << leftSurround) | (1u << rightSurround) | (1u << centreSurround) | (1u << LFE)); } +AudioChannelSet AudioChannelSet::create6point0Music() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << leftSurround) | (1u << rightSurround) | (1u << leftSurroundSide) | (1u << rightSurroundSide)); } +AudioChannelSet AudioChannelSet::create6point1Music() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << leftSurround) | (1u << rightSurround) | (1u << leftSurroundSide) | (1u << rightSurroundSide) | (1u << LFE)); } +AudioChannelSet AudioChannelSet::create7point0() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << leftSurroundSide) | (1u << rightSurroundSide) | (1u << leftSurroundRear) | (1u << rightSurroundRear)); } +AudioChannelSet AudioChannelSet::create7point0SDDS() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << leftSurround) | (1u << rightSurround) | (1u << leftCentre) | (1u << rightCentre)); } +AudioChannelSet AudioChannelSet::create7point1() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << leftSurroundSide) | (1u << rightSurroundSide) | (1u << leftSurroundRear) | (1u << rightSurroundRear) | (1u << LFE)); } +AudioChannelSet AudioChannelSet::create7point1SDDS() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << leftSurround) | (1u << rightSurround) | (1u << leftCentre) | (1u << rightCentre) | (1u << LFE)); } +AudioChannelSet AudioChannelSet::ambisonic() { return AudioChannelSet ((1u << ambisonicW) | (1u << ambisonicX) | (1u << ambisonicY) | (1u << ambisonicZ)); } +AudioChannelSet AudioChannelSet::quadraphonic() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << leftSurround) | (1u << rightSurround)); } +AudioChannelSet AudioChannelSet::pentagonal() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << centre) | (1u << leftSurroundRear) | (1u << rightSurroundRear)); } +AudioChannelSet AudioChannelSet::hexagonal() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << leftSurroundRear) | (1u << rightSurroundRear) | (1u << centre) | (1u << centreSurround)); } +AudioChannelSet AudioChannelSet::octagonal() { return AudioChannelSet ((1u << left) | (1u << right) | (1u << leftSurround) | (1u << rightSurround) | (1u << centre) | (1u << centreSurround) | (1u << wideLeft) | (1u << wideRight)); } AudioChannelSet AudioChannelSet::discreteChannels (int numChannels) @@ -258,3 +263,17 @@ AudioChannelSet AudioChannelSet::canonicalChannelSet (int numChannels) return discreteChannels (numChannels); } + +AudioChannelSet AudioChannelSet::namedChannelSet (int numChannels) +{ + if (numChannels == 1) return AudioChannelSet::mono(); + if (numChannels == 2) return AudioChannelSet::stereo(); + if (numChannels == 3) return AudioChannelSet::createLCR(); + if (numChannels == 4) return AudioChannelSet::quadraphonic(); + if (numChannels == 5) return AudioChannelSet::create5point0(); + if (numChannels == 6) return AudioChannelSet::create5point1(); + if (numChannels == 7) return AudioChannelSet::create7point0(); + if (numChannels == 8) return AudioChannelSet::create7point1(); + + return AudioChannelSet(); +} diff --git a/modules/juce_audio_basics/buffers/juce_AudioChannelSet.h b/modules/juce_audio_basics/buffers/juce_AudioChannelSet.h new file mode 100644 index 0000000000..a8053a8876 --- /dev/null +++ b/modules/juce_audio_basics/buffers/juce_AudioChannelSet.h @@ -0,0 +1,358 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2015 - ROLI Ltd. + + Permission is granted to use this software under the terms of either: + a) the GPL v2 (or any later version) + b) the Affero GPL v3 + + Details of these licenses can be found at: www.gnu.org/licenses + + JUCE is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + ------------------------------------------------------------------------------ + + To release a closed-source product which uses JUCE, commercial licenses are + available: visit www.juce.com for more information. + + ============================================================================== +*/ + +#ifndef JUCE_AUDIOCHANNELSET_H_INCLUDED +#define JUCE_AUDIOCHANNELSET_H_INCLUDED + + +//============================================================================== +/** + Represents a set of audio channel types. + + For example, you might have a set of left + right channels, which is a stereo + channel set. It is a collection of values from the AudioChannelSet::ChannelType + enum, where each type may only occur once within the set. + + The documentation below lists which AudioChannelSet corresponds to which native + layouts used by AAX, VST2/VST3 and CoreAudio/AU. The layout tags in CoreAudio + are particularly confusing. For example, the layout which is labeled as "7.1 SDDS" + in Logic Pro, corresponds to CoreAudio/AU's kAudioChannelLayoutTag_DTS_7_0 tag, whereas + AAX's DTS 7.1 Layout corresponds to CoreAudio/AU's + kAudioChannelLayoutTag_MPEG_7_1_A format, etc. Please do not use the CoreAudio tag + as an indication to the actual layout of the speakers. + + @see Bus +*/ +class JUCE_API AudioChannelSet +{ +public: + /** Creates an empty channel set. + You can call addChannel to add channels to the set. + */ + AudioChannelSet() noexcept {} + + /** Creates a zero-channel set which can be used to indicate that a + bus is disabled. */ + static AudioChannelSet disabled(); + + //============================================================================== + /** Creates a one-channel mono set (centre). + + Is equivalent to: kMonoAAX (VST), AAX_eStemFormat_Mono (AAX), kAudioChannelLayoutTag_Mono (CoreAudio) + */ + static AudioChannelSet mono(); + + + /** Creates a set containing a stereo set (left, right). + + Is equivalent to: kStereo (VST), AAX_eStemFormat_Stereo (AAX), kAudioChannelLayoutTag_Stereo (CoreAudio) + */ + static AudioChannelSet stereo(); + + + //============================================================================== + /** Creates a set containing an LCR set (left, right, centre). + + Is equivalent to: k30Cine (VST), AAX_eStemFormat_LCR (AAX), kAudioChannelLayoutTag_MPEG_3_0_A (CoreAudio) + + This format is referred to as "LRC" in Cubase. + This format is referred to as "LCR" in Pro Tools. + */ + static AudioChannelSet createLCR(); + + + /** Creates a set containing an LRS set (left, right, surround). + + Is equivalent to: k30Music (VST), n/a (AAX), kAudioChannelLayoutTag_ITU_2_1 (CoreAudio) + + This format is referred to as "LRS" in Cubase. + */ + static AudioChannelSet createLRS(); + + + /** Creates a set containing an LCRS set (left, right, centre, surround). + + Is equivalent to: k40Cine (VST), AAX_eStemFormat_LCRS (AAX), kAudioChannelLayoutTag_MPEG_4_0_A (CoreAudio) + + This format is referred to as "LCRS (Pro Logic)" in Logic Pro. + This format is referred to as "LRCS" in Cubase. + This format is referred to as "LCRS" in Pro Tools. + */ + static AudioChannelSet createLCRS(); + + + //============================================================================== + /** Creates a set for a 5.0 surround setup (left, right, centre, leftSurround, rightSurround). + + Is equivalent to: k50 (VST), AAX_eStemFormat_5_0 (AAX), kAudioChannelLayoutTag_MPEG_5_0_A (CoreAudio) + + This format is referred to as "5.0" in Cubase. + This format is referred to as "5.0" in Pro Tools. + */ + static AudioChannelSet create5point0(); + + + /** Creates a set for a 5.1 surround setup (left, right, centre, leftSurround, rightSurround, LFE). + + Is equivalent to: k51 (VST), AAX_eStemFormat_5_1 (AAX), kAudioChannelLayoutTag_MPEG_5_1_A (CoreAudio) + + This format is referred to as "5.1 (ITU 775)" in Logic Pro. + This format is referred to as "5.1" in Cubase. + This format is referred to as "5.1" in Pro Tools. + */ + static AudioChannelSet create5point1(); + + + /** Creates a set for a 6.0 Cine surround setup (left, right, centre, leftSurround, rightSurround, centreSurround). + + Is equivalent to: k60Cine (VST), AAX_eStemFormat_6_0 (AAX), kAudioChannelLayoutTag_AudioUnit_6_0 (CoreAudio) + + Logic Pro incorrectly uses this for the surround format labeled "6.1 (ES/EX)". + This format is referred to as "6.0 Cine" in Cubase. + This format is referred to as "6.0" in Pro Tools. + */ + static AudioChannelSet create6point0(); + + + /** Creates a set for a 6.1 Cine surround setup (left, right, centre, leftSurround, rightSurround, centreSurround, LFE). + + Is equivalent to: k61Cine (VST), AAX_eStemFormat_6_1 (AAX), kAudioChannelLayoutTag_MPEG_6_1_A (CoreAudio) + + This format is referred to as "6.1" in Pro Tools. + */ + static AudioChannelSet create6point1(); + + + /** Creates a set for a 6.0 Music surround setup (left, right, leftSurround, rightSurround, leftSurroundSide, rightSurroundSide). + + Is equivalent to: k60Music (VST), n/a (AAX), kAudioChannelLayoutTag_DTS_6_0_A (CoreAudio) + + This format is referred to as "6.0 Music" in Cubase. + */ + static AudioChannelSet create6point0Music(); + + + /** Creates a set for a 6.0 Music surround setup (left, right, leftSurround, rightSurround, leftSurroundSide, rightSurroundSide, LFE). + + Is equivalent to: k61Music (VST), n/a (AAX), kAudioChannelLayoutTag_DTS_6_1_A (CoreAudio) + */ + static AudioChannelSet create6point1Music(); + + + /** Creates a set for a DTS 7.0 surround setup (left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear). + + Is equivalent to: k70Music (VST), AAX_eStemFormat_7_0_DTS (AAX), kAudioChannelLayoutTag_AudioUnit_7_0 (CoreAudio) + + This format is referred to as "7.0" in Pro Tools. + */ + static AudioChannelSet create7point0(); + + + /** Creates a set for a SDDS 7.0 surround setup (left, right, centre, leftSurround, rightSurround, leftCentre, rightCentre). + + Is equivalent to: k70Cine (VST), AAX_eStemFormat_7_0_SDDS (AAX), kAudioChannelLayoutTag_AudioUnit_7_0_Front (CoreAudio) + + This format is referred to as "7.0 SDDS" in Pro Tools. + */ + static AudioChannelSet create7point0SDDS(); + + + /** Creates a set for a DTS 7.1 surround setup (left, right, centre, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear, LFE). + + Is equivalent to: k71CineSideFill (VST), AAX_eStemFormat_7_1_DTS (AAX), kAudioChannelLayoutTag_MPEG_7_1_C/kAudioChannelLayoutTag_ITU_3_4_1 (CoreAudio) + + This format is referred to as "7.1 (3/4.1)" in Logic Pro. + This format is referred to as "7.1" in Pro Tools. + */ + static AudioChannelSet create7point1(); + + + /** Creates a set for a 7.1 surround setup (left, right, centre, leftSurround, rightSurround, leftCentre, rightCentre, LFE). + + Is equivalent to: k71Cine (VST), AAX_eStemFormat_7_1_SDDS (AAX), kAudioChannelLayoutTag_MPEG_7_1_A (CoreAudio) + + This format is referred to as "7.1 (SDDS)" in Logic Pro. + This format is referred to as "7.1 SDDS" in Pro Tools. + */ + static AudioChannelSet create7point1SDDS(); + + + //============================================================================== + /** Creates a set for ambisonic surround setups (ambisonicW, ambisonicX, ambisonicY, ambisonicZ). + + Is equivalent to: kBFormat (VST), n/a (AAX), kAudioChannelLayoutTag_Ambisonic_B_Format (CoreAudio) + */ + static AudioChannelSet ambisonic(); + + + /** Creates a set for quadraphonic surround setup (left, right, leftSurround, rightSurround) + + Is equivalent to: k40Music (VST), AAX_eStemFormat_Quad (AAX), kAudioChannelLayoutTag_Quadraphonic (CoreAudio) + + This format is referred to as "Quadraphonic" in Logic Pro. + This format is referred to as "Quadro" in Cubase. + This format is referred to as "Quad" in Pro Tools. + */ + static AudioChannelSet quadraphonic(); + + + /** Creates a set for pentagonal surround setup (left, right, centre, leftSurroundRear, rightSurroundRear). + + Is equivalent to: n/a (VST), n/a (AAX), kAudioChannelLayoutTag_Pentagonal (CoreAudio) + */ + static AudioChannelSet pentagonal(); + + + /** Creates a set for hexagonal surround setup (left, right, leftSurroundRear, rightSurroundRear, centre, surroundCentre). + + Is equivalent to: n/a (VST), n/a (AAX), kAudioChannelLayoutTag_Hexagonal (CoreAudio) + */ + static AudioChannelSet hexagonal(); + + + /** Creates a set for octagonal surround setup (left, right, leftSurround, rightSurround, centre, centreSurround, wideLeft, wideRight). + + Is equivalent to: n/a (VST), n/a (AAX), kAudioChannelLayoutTag_Octagonal (CoreAudio) + */ + static AudioChannelSet octagonal(); + + //============================================================================== + /** Creates a set of untyped discrete channels. */ + static AudioChannelSet discreteChannels (int numChannels); + + /** Create a canonical channel set for a given number of channels. + For example, numChannels = 1 will return mono, numChannels = 2 will return stereo, etc. */ + static AudioChannelSet canonicalChannelSet (int numChannels); + + /** Create a channel set for a given number of channels which is non-discrete. + If numChannels is larger than the number of channels of the surround format + with the maximum amount of channels (currently 7.1 Surround), then this + function returns an empty set.*/ + static AudioChannelSet namedChannelSet (int numChannels); + + //============================================================================== + /** Represents different audio channel types. */ + enum ChannelType + { + unknown = 0, + + left = 1, // L + right = 2, // R + centre = 3, // C (sometimes M for mono) + + LFE = 4, + leftSurround = 5, // Ls + rightSurround = 6, // Rs + leftCentre = 7, // Lc (AAX/VST), Lc used as Lss in AU for most layouts + rightCentre = 8, // Rc (AAX/VST), Rc used as Rss in AU for most layouts + centreSurround = 9, // Cs/S + surround = centreSurround, // Cs/S + leftSurroundSide = 10, // Lss (AXX), Side Left "Sl" (VST), Left Centre "LC" (AU) + rightSurroundSide = 11, // Rss (AXX), Side right "Sr" (VST), Right Centre "Rc" (AU) + topMiddle = 12, + topFrontLeft = 13, + topFrontCentre = 14, + topFrontRight = 15, + topRearLeft = 16, + topRearCentre = 17, + topRearRight = 18, + LFE2 = 19, + leftSurroundRear = 20, // Lsr (AAX), Lcs (VST), Rls (AU) + rightSurroundRear = 21, // Rsr (AAX), Rcs (VST), Rrs (AU) + wideLeft = 22, + wideRight = 23, + + + ambisonicW = 24, + ambisonicX = 25, + ambisonicY = 26, + ambisonicZ = 27, + + + discreteChannel0 = 64 /**< 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". */ + static String getChannelTypeName (ChannelType); + + /** Returns the abbreviated name of a channel type. For example, this method may return "Ls". */ + static String getAbbreviatedChannelTypeName (ChannelType); + + //============================================================================== + enum + { + maxChannelsOfNamedLayout = 8 + }; + + /** Adds a channel to the set. */ + void addChannel (ChannelType newChannelType); + + /** Removes a channel from the set. */ + void removeChannel (ChannelType newChannelType); + + /** Returns the number of channels in the set. */ + int size() const noexcept; + + /** Returns true if there are no channels in the set. */ + bool isDisabled() const noexcept { return size() == 0; } + + /** Returns an array of all the types in this channel set. */ + Array getChannelTypes() const; + + /** Returns the type of one of the channels in the set, by index. */ + ChannelType getTypeOfChannel (int channelIndex) const noexcept; + + /** Returns the index for a particular channel-type. + Will return -1 if the this set does not contain a channel of this type. */ + int getChannelIndexForType (ChannelType type) const noexcept; + + /** Returns a string containing a whitespace-separated list of speaker types + corresponding to each channel. For example in a 5.1 arrangement, + the string may be "L R C Lfe Ls Rs". If the speaker arrangement is unknown, + the returned string will be empty.*/ + String getSpeakerArrangementAsString() const; + + /** Returns the description of the current layout. For example, this method may return + "Quadraphonic". Note that the returned string may not be unique. */ + String getDescription() const; + + /** Returns if this is a channel layout made-up of discrete channels. */ + bool isDiscreteLayout() const noexcept; + + /** Intersect two channel layouts. */ + void intersect (const AudioChannelSet& other) { channels &= other.channels; } + + //============================================================================== + bool operator== (const AudioChannelSet&) const noexcept; + bool operator!= (const AudioChannelSet&) const noexcept; + bool operator< (const AudioChannelSet&) const noexcept; +private: + BigInteger channels; + + explicit AudioChannelSet (uint32); +}; + + + +#endif // JUCE_AUDIOCHANNELSET_H_INCLUDED diff --git a/modules/juce_audio_basics/juce_audio_basics.cpp b/modules/juce_audio_basics/juce_audio_basics.cpp index 86b41a23e7..a0d839fa4b 100644 --- a/modules/juce_audio_basics/juce_audio_basics.cpp +++ b/modules/juce_audio_basics/juce_audio_basics.cpp @@ -83,6 +83,7 @@ namespace juce #include "buffers/juce_AudioDataConverters.cpp" #include "buffers/juce_FloatVectorOperations.cpp" +#include "buffers/juce_AudioChannelSet.cpp" #include "effects/juce_IIRFilter.cpp" #include "effects/juce_LagrangeInterpolator.cpp" #include "effects/juce_CatmullRomInterpolator.cpp" diff --git a/modules/juce_audio_basics/juce_audio_basics.h b/modules/juce_audio_basics/juce_audio_basics.h index cbd3300d3c..22cc782e34 100644 --- a/modules/juce_audio_basics/juce_audio_basics.h +++ b/modules/juce_audio_basics/juce_audio_basics.h @@ -62,6 +62,7 @@ namespace juce #include "buffers/juce_AudioDataConverters.h" #include "buffers/juce_FloatVectorOperations.h" #include "buffers/juce_AudioSampleBuffer.h" +#include "buffers/juce_AudioChannelSet.h" #include "effects/juce_Decibels.h" #include "effects/juce_IIRFilter.h" #include "effects/juce_LagrangeInterpolator.h" diff --git a/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp b/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp index 8bc95838b1..38c51e1a68 100644 --- a/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp +++ b/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp @@ -179,6 +179,7 @@ void Synthesiser::processNextBlock (AudioBuffer& outputAudio, { // must set the sample rate before using this! jassert (sampleRate != 0); + const int targetChannels = outputAudio.getNumChannels(); MidiBuffer::Iterator midiIterator (midiData); midiIterator.setNextSamplePosition (startSample); @@ -193,7 +194,9 @@ void Synthesiser::processNextBlock (AudioBuffer& outputAudio, { if (! midiIterator.getNextEvent (m, midiEventPos)) { - renderVoices (outputAudio, startSample, numSamples); + if (targetChannels > 0) + renderVoices (outputAudio, startSample, numSamples); + return; } @@ -201,7 +204,9 @@ void Synthesiser::processNextBlock (AudioBuffer& outputAudio, if (samplesToNextMidiMessage >= numSamples) { - renderVoices (outputAudio, startSample, numSamples); + if (targetChannels > 0) + renderVoices (outputAudio, startSample, numSamples); + handleMidiEvent (m); break; } @@ -214,7 +219,9 @@ void Synthesiser::processNextBlock (AudioBuffer& outputAudio, firstEvent = false; - renderVoices (outputAudio, startSample, samplesToNextMidiMessage); + if (targetChannels > 0) + renderVoices (outputAudio, startSample, samplesToNextMidiMessage); + handleMidiEvent (m); startSample += samplesToNextMidiMessage; numSamples -= samplesToNextMidiMessage; diff --git a/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp b/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp index d6722ae0bf..9467c27799 100644 --- a/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp @@ -30,7 +30,6 @@ #include "../utility/juce_IncludeSystemHeaders.h" #include "../utility/juce_IncludeModuleHeaders.h" #include "../utility/juce_WindowsHooks.h" -#include "../utility/juce_PluginBusUtilities.h" #ifdef __clang__ #pragma clang diagnostic push @@ -102,7 +101,7 @@ const int32_t juceChunkType = 'juce'; const int maxAAXChannels = 8; //============================================================================== -struct AAXClasses +namespace AAXClasses { static int32 getAAXParamHash (AAX_CParamID paramID) noexcept { @@ -131,8 +130,40 @@ struct AAXClasses AudioChannelSet::ChannelType speakerOrder[8]; }; - static AAXChannelStreamOrder aaxChannelOrder[]; - static AAX_EStemFormat aaxFormats[AAX_eStemFormatNum]; + static AAXChannelStreamOrder aaxChannelOrder[] = + { + {AAX_eStemFormat_Mono, {AudioChannelSet::centre, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown}}, + {AAX_eStemFormat_Stereo, {AudioChannelSet::left, AudioChannelSet::right, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown}}, + {AAX_eStemFormat_LCR, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown}}, + {AAX_eStemFormat_LCRS, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::centreSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown}}, + {AAX_eStemFormat_Quad, {AudioChannelSet::left, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown}}, + {AAX_eStemFormat_5_0, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown}}, + {AAX_eStemFormat_5_1, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::LFE, AudioChannelSet::unknown, AudioChannelSet::unknown}}, + {AAX_eStemFormat_6_0, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::centreSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown, AudioChannelSet::unknown}}, + {AAX_eStemFormat_6_1, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::centreSurround, AudioChannelSet::rightSurround, AudioChannelSet::LFE, AudioChannelSet::unknown}}, + {AAX_eStemFormat_7_0_SDDS, {AudioChannelSet::left, AudioChannelSet::leftCentre, AudioChannelSet::centre, AudioChannelSet::rightCentre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown}}, + {AAX_eStemFormat_7_0_DTS, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide, AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::unknown}}, + {AAX_eStemFormat_7_1_SDDS, {AudioChannelSet::left, AudioChannelSet::leftCentre, AudioChannelSet::centre, AudioChannelSet::rightCentre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::LFE}}, + {AAX_eStemFormat_7_1_DTS, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurroundSide, AudioChannelSet::rightSurroundSide, AudioChannelSet::leftSurroundRear, AudioChannelSet::rightSurroundRear, AudioChannelSet::LFE}}, + {AAX_eStemFormat_None, {AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown}}, + }; + + static AAX_EStemFormat aaxFormats[AAX_eStemFormatNum] = + { + AAX_eStemFormat_Mono, + AAX_eStemFormat_Stereo, + AAX_eStemFormat_LCR, + AAX_eStemFormat_LCRS, + AAX_eStemFormat_Quad, + AAX_eStemFormat_5_0, + AAX_eStemFormat_5_1, + AAX_eStemFormat_6_0, + AAX_eStemFormat_6_1, + AAX_eStemFormat_7_0_SDDS, + AAX_eStemFormat_7_1_SDDS, + AAX_eStemFormat_7_0_DTS, + AAX_eStemFormat_7_1_DTS + }; static AAX_EStemFormat getFormatForAudioChannelSet (const AudioChannelSet& set, bool ignoreLayout) noexcept { @@ -169,8 +200,8 @@ struct AAXClasses if (set == AudioChannelSet::create6point1()) return AAX_eStemFormat_6_1; if (set == AudioChannelSet::create7point0()) return AAX_eStemFormat_7_0_DTS; if (set == AudioChannelSet::create7point1()) return AAX_eStemFormat_7_1_DTS; - if (set == AudioChannelSet::createFront7point0()) return AAX_eStemFormat_7_0_SDDS; - if (set == AudioChannelSet::createFront7point1()) return AAX_eStemFormat_7_1_SDDS; + if (set == AudioChannelSet::create7point0SDDS()) return AAX_eStemFormat_7_0_SDDS; + if (set == AudioChannelSet::create7point1SDDS()) return AAX_eStemFormat_7_1_SDDS; return AAX_eStemFormat_INT32_MAX; } @@ -191,9 +222,9 @@ struct AAXClasses case AAX_eStemFormat_5_1: return AudioChannelSet::create5point1(); case AAX_eStemFormat_6_0: return AudioChannelSet::create6point0(); case AAX_eStemFormat_6_1: return AudioChannelSet::create6point1(); - case AAX_eStemFormat_7_0_SDDS: return AudioChannelSet::createFront7point0(); + case AAX_eStemFormat_7_0_SDDS: return AudioChannelSet::create7point0SDDS(); case AAX_eStemFormat_7_0_DTS: return AudioChannelSet::create7point0(); - case AAX_eStemFormat_7_1_SDDS: return AudioChannelSet::createFront7point1(); + case AAX_eStemFormat_7_1_SDDS: return AudioChannelSet::create7point1SDDS(); case AAX_eStemFormat_7_1_DTS: return AudioChannelSet::create7point1(); default: break; @@ -205,29 +236,6 @@ struct AAXClasses return AudioChannelSet::discreteChannels (jmax (0, static_cast (AAX_STEM_FORMAT_CHANNEL_COUNT (format)))); } - static const char* getSpeakerArrangementString (AAX_EStemFormat format) noexcept - { - switch (format) - { - case AAX_eStemFormat_Mono: return "M"; - case AAX_eStemFormat_Stereo: return "L R"; - case AAX_eStemFormat_LCR: return "L C R"; - case AAX_eStemFormat_LCRS: return "L C R S"; - case AAX_eStemFormat_Quad: return "L R Ls Rs"; - case AAX_eStemFormat_5_0: return "L C R Ls Rs"; - case AAX_eStemFormat_5_1: return "L C R Ls Rs LFE"; - case AAX_eStemFormat_6_0: return "L C R Ls Cs Rs"; - case AAX_eStemFormat_6_1: return "L C R Ls Cs Rs LFE"; - case AAX_eStemFormat_7_0_SDDS: return "L Lc C Rc R Ls Rs"; - case AAX_eStemFormat_7_1_SDDS: return "L Lc C Rc R Ls Rs LFE"; - case AAX_eStemFormat_7_0_DTS: return "L C R Lss Rss Lsr Rsr"; - case AAX_eStemFormat_7_1_DTS: return "L C R Lss Rss Lsr Rsr LFE"; - default: break; - } - - return nullptr; - } - static Colour getColourFromHighlightEnum (AAX_EHighlightColor colour) noexcept { switch (colour) @@ -331,6 +339,8 @@ struct AAXClasses #endif //============================================================================== + class JuceAAX_Processor; + class JuceAAX_GUI : public AAX_CEffectGUI, public ModifierKeyProvider { public: @@ -339,16 +349,7 @@ struct AAXClasses static AAX_IEffectGUI* AAX_CALLBACK Create() { return new JuceAAX_GUI(); } - void CreateViewContents() override - { - if (component == nullptr) - { - if (JuceAAX_Processor* params = dynamic_cast (GetEffectParameters())) - component = new ContentWrapperComponent (*this, params->getPluginInstance()); - else - jassertfalse; - } - } + void CreateViewContents() override; void CreateViewContainer() override { @@ -441,21 +442,8 @@ struct AAXClasses private: //============================================================================== - inline int getParamIndexFromID (AAX_CParamID paramID) const noexcept - { - if (const JuceAAX_Processor* params = dynamic_cast (GetEffectParameters())) - return params->getParamIndexFromID (paramID); - - return -1; - } - - inline AAX_CParamID getAAXParamIDFromJuceIndex (int index) const noexcept - { - if (const JuceAAX_Processor* params = dynamic_cast (GetEffectParameters())) - return params->getAAXParamIDFromJuceIndex (index); - - return nullptr; - } + int getParamIndexFromID (AAX_CParamID paramID) const noexcept; + AAX_CParamID getAAXParamIDFromJuceIndex (int index) const noexcept; //============================================================================== struct ContentWrapperComponent : public Component @@ -540,21 +528,22 @@ struct AAXClasses JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceAAX_GUI) }; + static void AAX_CALLBACK algorithmProcessCallback (JUCEAlgorithmContext* const instancesBegin[], const void* const instancesEnd); //============================================================================== class JuceAAX_Processor : public AAX_CEffectParameters, public juce::AudioPlayHead, public AudioProcessorListener { public: - JuceAAX_Processor() : pluginInstance (createPluginFilterOfType (AudioProcessor::wrapperType_AAX)), - isPrepared (false), busUtils (*pluginInstance, false, maxAAXChannels), - sampleRate (0), lastBufferSize (1024), maxBufferSize (1024), - hasSidechain (false) + JuceAAX_Processor () + : pluginInstance (createPluginFilterOfType (AudioProcessor::wrapperType_AAX)), + isPrepared (false), + sampleRate (0), lastBufferSize (1024), maxBufferSize (1024) { pluginInstance->setPlayHead (this); pluginInstance->addListener (this); - busUtils.init(); + rebuildChannelMapArrays(); AAX_CEffectParameters::GetNumberOfChunks (&juceChunkIndex); } @@ -562,7 +551,7 @@ struct AAXClasses static AAX_CEffectParameters* AAX_CALLBACK Create() { PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_AAX; - return new JuceAAX_Processor(); + return new JuceAAX_Processor (); } AAX_Result Uninitialize() override @@ -579,7 +568,6 @@ struct AAXClasses AAX_Result EffectInit() override { AAX_Result err; - check (Controller()->GetSampleRate (&sampleRate)); if ((err = preparePlugin()) != AAX_SUCCESS) @@ -955,8 +943,8 @@ struct AAXClasses } else { - const int mainNumIns = numIns > 0 ? pluginInstance->busArrangement.inputBuses.getReference (0).channels.size() : 0; - const int sidechain = busUtils.getNumEnabledBuses (true) >= 2 ? sideChainBufferIdx : -1; + const int mainNumIns = pluginInstance->getMainBusNumInputChannels(); + const int sidechain = (pluginInstance->getChannelCountOfBus (true, 1) > 0 ? sideChainBufferIdx : -1); const int numChans = jmax (numIns, numOuts); if (numChans == 0) return; @@ -974,6 +962,9 @@ struct AAXClasses for (int i = 0; i < numIns; ++i) memcpy (channels[i], getAudioBufferForInput (inputs, sidechain, mainNumIns, i), (size_t) bufferSize * sizeof (float)); + for (int i = numIns; i < numOuts; ++i) + zeromem (channels[i], (size_t) bufferSize * sizeof (float)); + process (channels, numOuts, bufferSize, bypass, midiNodeIn, midiNodesOut); } else @@ -992,10 +983,168 @@ struct AAXClasses } } - bool supportsSidechain() const noexcept { return hasSidechain; }; + //============================================================================== + // In aax, the format of the aux and sidechain buses need to be fully determined + // by the format on the main buses. This function tried to provide such a mapping. + // Returns false if the in/out main layout is not supported + static bool fullBusesLayoutFromMainLayout (AudioProcessor& p, + const AudioChannelSet& mainInput, const AudioChannelSet& mainOutput, + AudioProcessor::BusesLayout& fullLayout) + { + bool success = p.setBusesLayout (getDefaultLayout (p, true)); + jassert (success); + ignoreUnused (success); + + const int numInputBuses = p.getBusCount (true); + const int numOutputBuses = p.getBusCount (false); + + if (AudioProcessor::Bus* bus = p.getBus (true, 0)) + if (! bus->setCurrentLayout (mainInput)) + return false; + + if (AudioProcessor::Bus* bus = p.getBus (false, 0)) + if (! bus->setCurrentLayout (mainOutput)) + return false; + + // did this change the input again + if (numInputBuses > 0 && p.getChannelLayoutOfBus (true, 0) != mainInput) + return false; + + #ifdef JucePlugin_PreferredChannelConfigurations + short configs[][2] = {JucePlugin_PreferredChannelConfigurations}; + if (! AudioProcessor::containsLayout (p.getBusesLayout(), configs)) + return false; + #endif + + bool foundValid = false; + { + AudioProcessor::BusesLayout onlyMains = p.getBusesLayout(); + + for (int i = 1; i < numInputBuses; ++i) + onlyMains.inputBuses.getReference (i) = AudioChannelSet::disabled(); + + for (int i = 1; i < numOutputBuses; ++i) + onlyMains.outputBuses.getReference (i) = AudioChannelSet::disabled(); + + if (p.checkBusesLayoutSupported (onlyMains)) + { + foundValid = true; + fullLayout = onlyMains; + } + } + + if (numInputBuses > 1) + { + // can the first bus be a sidechain or disabled, if not then we can't use this layout combination + if (AudioProcessor::Bus* bus = p.getBus (true, 1)) + if (! bus->setCurrentLayout (AudioChannelSet::mono()) && ! bus->setCurrentLayout (AudioChannelSet::disabled())) + return foundValid; + + // can all the other inputs be disabled, if not then we can't use this layout combination + for (int i = 2; i < numInputBuses; ++i) + if (AudioProcessor::Bus* bus = p.getBus (true, i)) + if (! bus->setCurrentLayout (AudioChannelSet::disabled())) + return foundValid; + + if (AudioProcessor::Bus* bus = p.getBus (true, 0)) + if (! bus->setCurrentLayout (mainInput)) + return foundValid; + + if (AudioProcessor::Bus* bus = p.getBus (false, 0)) + if (! bus->setCurrentLayout (mainOutput)) + return foundValid; + + // recheck if the format is correct + if ((numInputBuses > 0 && p.getChannelLayoutOfBus (true, 0) != mainInput) + || (numOutputBuses > 0 && p.getChannelLayoutOfBus (false, 0) != mainOutput)) + return foundValid; + + const AudioChannelSet& sidechainBus = p.getChannelLayoutOfBus (true, 1); + if (sidechainBus != AudioChannelSet::mono() && sidechainBus != AudioChannelSet::disabled()) + return foundValid; + + for (int i = 2; i < numInputBuses; ++i) + if (p.getChannelLayoutOfBus (true, i) != AudioChannelSet::disabled()) + return foundValid; + } + + const bool hasSidechain = (numInputBuses > 1 && p.getChannelLayoutOfBus (true, 1) == AudioChannelSet::mono()); + + if (hasSidechain) + { + AudioProcessor::BusesLayout onlyMainsAndSidechain = p.getBusesLayout(); + + for (int i = 1; i < numOutputBuses; ++i) + onlyMainsAndSidechain.outputBuses.getReference (i) = AudioChannelSet::disabled(); + + if (p.checkBusesLayoutSupported (onlyMainsAndSidechain)) + { + foundValid = true; + fullLayout = onlyMainsAndSidechain; + } + } + + if (numOutputBuses > 1) + { + AudioProcessor::BusesLayout copy = p.getBusesLayout(); + + int maxAuxBuses = jmin (16, numOutputBuses); + for (int i = 1; i < maxAuxBuses; ++i) + copy.outputBuses.getReference (i) = mainOutput; + + for (int i = maxAuxBuses; i < numOutputBuses; ++i) + copy.outputBuses.getReference (i) = AudioChannelSet::disabled(); + + if (p.checkBusesLayoutSupported (copy)) + { + fullLayout = copy; + foundValid = true; + } + else + { + for (int i = 1; i < maxAuxBuses; ++i) + if (p.getChannelLayoutOfBus (false, i).isDisabled()) + return foundValid; + + for (int i = maxAuxBuses; i < numOutputBuses; ++i) + if (AudioProcessor::Bus* bus = p.getBus (false, i)) + if (! bus->setCurrentLayout (AudioChannelSet::disabled())) + return foundValid; + + if (AudioProcessor::Bus* bus = p.getBus (true, 0)) + if (! bus->setCurrentLayout (mainInput)) + return foundValid; + + if (AudioProcessor::Bus* bus = p.getBus (false, 0)) + if (! bus->setCurrentLayout (mainOutput)) + return foundValid; + + if ((numInputBuses > 0 && p.getChannelLayoutOfBus (true, 0) != mainInput) + || (numOutputBuses > 0 && p.getChannelLayoutOfBus (false, 0) != mainOutput)) + return foundValid; + + if (numInputBuses > 1 ) + { + const AudioChannelSet& sidechainBus = p.getChannelLayoutOfBus (true, 1); + if (sidechainBus != AudioChannelSet::mono() && sidechainBus != AudioChannelSet::disabled()) + return foundValid; + } + + for (int i = maxAuxBuses; i < numOutputBuses; ++i) + if (! p.getChannelLayoutOfBus (false, i).isDisabled()) + return foundValid; + + fullLayout = p.getBusesLayout(); + foundValid = true; + } + } + + return foundValid; + } private: friend class JuceAAX_GUI; + friend void AAX_CALLBACK AAXClasses::algorithmProcessCallback (JUCEAlgorithmContext* const instancesBegin[], const void* const instancesEnd); void process (float* const* channels, const int numChans, const int bufferSize, const bool bypass, AAX_IMIDINode* midiNodeIn, AAX_IMIDINode* midiNodesOut) @@ -1136,15 +1285,22 @@ struct AAXClasses } } - AAX_Result preparePlugin() + bool getMainBusFormats (AudioChannelSet& inputSet, AudioChannelSet& outputSet) { AudioProcessor& audioProcessor = getPluginInstance(); - bool hasSomethingChanged = false; + #if ! JucePlugin_IsMidiEffect + const int inputBuses = audioProcessor.getBusCount (true); + const int outputBuses = audioProcessor.getBusCount (false); + #endif #if JucePlugin_IsMidiEffect // MIDI effect plug-ins do not support any audio channels - jassert (audioProcessor.busArrangement.getTotalNumInputChannels() == 0 - && audioProcessor.busArrangement.getTotalNumOutputChannels() == 0); + jassert (audioProcessor.getTotalNumInputChannels() == 0 + && audioProcessor.getTotalNumOutputChannels() == 0); + + inputSet = outputSet = AudioChannelSet(); + + return true; #else AAX_EStemFormat inputStemFormat = AAX_eStemFormat_None; check (Controller()->GetInputStemFormat (&inputStemFormat)); @@ -1152,11 +1308,30 @@ struct AAXClasses AAX_EStemFormat outputStemFormat = AAX_eStemFormat_None; check (Controller()->GetOutputStemFormat (&outputStemFormat)); - const AudioChannelSet inputSet = channelSetFromStemFormat (inputStemFormat, busUtils.busIgnoresLayout (true, 0)); - const AudioChannelSet outputSet = channelSetFromStemFormat (outputStemFormat, busUtils.busIgnoresLayout (false, 0)); + #if JucePlugin_IsSynth + if (inputBuses == 0) inputStemFormat = AAX_eStemFormat_None; + #endif + + inputSet = (inputBuses > 0 ? channelSetFromStemFormat (inputStemFormat, false) : AudioChannelSet()); + outputSet = (outputBuses > 0 ? channelSetFromStemFormat (outputStemFormat, false) : AudioChannelSet()); if ( (inputSet == AudioChannelSet::disabled() && inputStemFormat != AAX_eStemFormat_None) - || (outputSet == AudioChannelSet::disabled() && outputStemFormat != AAX_eStemFormat_None)) + || (outputSet == AudioChannelSet::disabled() && outputStemFormat != AAX_eStemFormat_None) + || (inputSet != AudioChannelSet::disabled() && inputBuses == 0) + || (outputSet != AudioChannelSet::disabled() && outputBuses == 0)) + return false; + + return true; + #endif + } + + AAX_Result preparePlugin() + { + AudioProcessor& audioProcessor = getPluginInstance(); + AudioProcessor::BusesLayout oldLayout = audioProcessor.getBusesLayout(); + + AudioChannelSet inputSet, outputSet; + if (! getMainBusFormats (inputSet, outputSet)) { if (isPrepared) { @@ -1167,26 +1342,8 @@ struct AAXClasses return AAX_ERROR_UNIMPLEMENTED; } - - bool success = true; - - if (busUtils.getBusCount (true) > 0) - success = setPreferredBusArrangement (busUtils, true, 0, inputSet, hasSomethingChanged); - - if (success && busUtils.getBusCount (false) > 0) - success = setPreferredBusArrangement (busUtils, false, 0, outputSet, hasSomethingChanged); - - // This should never happen as the plugin reported that this layout is supported - jassert (success); - - hasSidechain = enableAuxBusesForCurrentFormat (busUtils, inputSet, outputSet, hasSomethingChanged); - if (hasSidechain && hasSomethingChanged) - sideChainBuffer.realloc (static_cast (maxBufferSize)); - - // recheck the format - if ( (busUtils.getBusCount (true) > 0 && busUtils.getChannelSet (true, 0) != inputSet) - || (busUtils.getBusCount (false) > 0 && busUtils.getChannelSet (false, 0) != outputSet) - || (hasSidechain && busUtils.getNumChannels(true, 1) != 1)) + AudioProcessor::BusesLayout newLayout; + if (! fullBusesLayoutFromMainLayout (audioProcessor, inputSet, outputSet, newLayout)) { if (isPrepared) { @@ -1197,18 +1354,25 @@ struct AAXClasses return AAX_ERROR_UNIMPLEMENTED; } - if (hasSomethingChanged) + const bool layoutChanged = (oldLayout != newLayout); + + if (layoutChanged) { - rebuildChannelMapArrays (true); - rebuildChannelMapArrays (false); - } - #endif + if (! audioProcessor.setBusesLayout (newLayout)) + { + if (isPrepared) + { + isPrepared = false; + audioProcessor.releaseResources(); + } - hasSomethingChanged = (sampleRate != audioProcessor.getSampleRate() - || maxBufferSize != lastBufferSize - || hasSomethingChanged); + return AAX_ERROR_UNIMPLEMENTED; + } - if (hasSomethingChanged || (! isPrepared)) + rebuildChannelMapArrays(); + } + + if (layoutChanged || (! isPrepared)) { if (isPrepared) { @@ -1219,6 +1383,10 @@ struct AAXClasses audioProcessor.setRateAndBufferSizeDetails (sampleRate, lastBufferSize); audioProcessor.prepareToPlay (sampleRate, lastBufferSize); maxBufferSize = lastBufferSize; + hasSidechain = audioProcessor.getChannelLayoutOfBus (true, 1) == AudioChannelSet::mono(); + + if (hasSidechain) + sideChainBuffer.realloc (static_cast (maxBufferSize)); } check (Controller()->SetSignalLatency (audioProcessor.getLatencySamples())); @@ -1228,30 +1396,56 @@ struct AAXClasses return AAX_SUCCESS; } - void rebuildChannelMapArrays (bool isInput) + void rebuildChannelMapArrays() { - Array& layoutMap = isInput ? inputLayoutMap : outputLayoutMap; - layoutMap.clear(); - - const int n = isInput ? jmin (busUtils.getBusCount (true), 1) : busUtils.getBusCount (false); + AudioProcessor& audioProcessor = getPluginInstance(); - int chOffset = 0; - for (int busIdx = 0; busIdx < n; ++busIdx) + for (int dir = 0; dir < 2; ++dir) { - const AudioChannelSet channelFormat = busUtils.getChannelSet (isInput, busIdx); + const bool isInput = (dir == 0); + Array& layoutMap = isInput ? inputLayoutMap : outputLayoutMap; + layoutMap.clear(); + + const int n = audioProcessor.getBusCount (isInput); - if (channelFormat != AudioChannelSet::disabled()) + int chOffset = 0; + for (int busIdx = 0; busIdx < n; ++busIdx) { - const int numChannels = channelFormat.size(); + const AudioChannelSet channelFormat = audioProcessor.getChannelLayoutOfBus (isInput, busIdx); + + if (channelFormat != AudioChannelSet::disabled()) + { + const int numChannels = channelFormat.size(); - for (int ch = 0; ch < numChannels; ++ch) - layoutMap.add (juceChannelIndexToAax (ch, channelFormat) + chOffset); + for (int ch = 0; ch < numChannels; ++ch) + layoutMap.add (juceChannelIndexToAax (ch, channelFormat) + chOffset); - chOffset += numChannels; + chOffset += numChannels; + } } } } + static void algorithmCallback (JUCEAlgorithmContext* const instancesBegin[], const void* const instancesEnd) + { + + for (JUCEAlgorithmContext* const* iter = instancesBegin; iter < instancesEnd; ++iter) + { + const JUCEAlgorithmContext& i = **iter; + + int sideChainBufferIdx = i.pluginInstance->parameters.hasSidechain && i.sideChainBuffers != nullptr + ? static_cast (*i.sideChainBuffers) : -1; + + // sidechain index of zero is an invalid index + if (sideChainBufferIdx <= 0) + sideChainBufferIdx = -1; + + i.pluginInstance->parameters.process (i.inputChannels, i.outputChannels, sideChainBufferIdx, + *(i.bufferSize), *(i.bypass) != 0, + getMidiNodeIn(i), getMidiNodeOut(i)); + } + } + //============================================================================== inline int getParamIndexFromID (AAX_CParamID paramID) const noexcept { @@ -1265,12 +1459,45 @@ struct AAXClasses return aaxParamIDs.getReference (index).getCharPointer(); } + //============================================================================== + static AudioProcessor::BusesLayout getDefaultLayout (AudioProcessor& p, bool enableAll) + { + AudioProcessor::BusesLayout defaultLayout; + + for (int dir = 0; dir < 2; ++dir) + { + const bool isInput = (dir == 0); + const int n = p.getBusCount (isInput); + Array& layouts = (isInput ? defaultLayout.inputBuses : defaultLayout.outputBuses); + + for (int i = 0; i < n; ++i) + if (AudioProcessor::Bus* bus = p.getBus (isInput, i)) + layouts.add (enableAll || bus->isEnabledByDefault() ? bus->getDefaultLayout() : AudioChannelSet()); + } + + return defaultLayout; + } + + static AudioProcessor::BusesLayout getDefaultLayout (AudioProcessor& p) + { + AudioProcessor::BusesLayout defaultLayout; + + defaultLayout = getDefaultLayout (p, true); + + if (! p.checkBusesLayoutSupported (defaultLayout)) + defaultLayout = getDefaultLayout (p, false); + + // Your processor must support the default layout + jassert (p.checkBusesLayoutSupported (defaultLayout)); + return defaultLayout; + } + //============================================================================== ScopedJuceInitialiser_GUI libraryInitialiser; ScopedPointer pluginInstance; + bool isPrepared; - PluginBusUtilities busUtils; MidiBuffer midiBuffer; Array channelList; int32_t juceChunkIndex; @@ -1302,6 +1529,34 @@ struct AAXClasses JUCE_DECLARE_NON_COPYABLE (JuceAAX_Processor) }; + //============================================================================== + void JuceAAX_GUI::CreateViewContents() + { + if (component == nullptr) + { + if (JuceAAX_Processor* params = dynamic_cast (GetEffectParameters())) + component = new ContentWrapperComponent (*this, params->getPluginInstance()); + else + jassertfalse; + } + } + + int JuceAAX_GUI::getParamIndexFromID (AAX_CParamID paramID) const noexcept + { + if (const JuceAAX_Processor* params = dynamic_cast (GetEffectParameters())) + return params->getParamIndexFromID (paramID); + + return -1; + } + + AAX_CParamID JuceAAX_GUI::getAAXParamIDFromJuceIndex (int index) const noexcept + { + if (const JuceAAX_Processor* params = dynamic_cast (GetEffectParameters())) + return params->getAAXParamIDFromJuceIndex (index); + + return nullptr; + } + //============================================================================== struct AAXFormatConfiguration { @@ -1322,138 +1577,20 @@ struct AAXClasses }; //============================================================================== - static void AAX_CALLBACK algorithmProcessCallback (JUCEAlgorithmContext* const instancesBegin[], - const void* const instancesEnd) - { - for (JUCEAlgorithmContext* const* iter = instancesBegin; iter < instancesEnd; ++iter) - { - const JUCEAlgorithmContext& i = **iter; - - int sideChainBufferIdx = i.pluginInstance->parameters.supportsSidechain() && i.sideChainBuffers != nullptr - ? static_cast (*i.sideChainBuffers) - : -1; - - // sidechain index of zero is an invalid index - if (sideChainBufferIdx <= 0) - sideChainBufferIdx = -1; - - i.pluginInstance->parameters.process (i.inputChannels, i.outputChannels, sideChainBufferIdx, - *(i.bufferSize), *(i.bypass) != 0, - getMidiNodeIn(i), getMidiNodeOut(i)); - } - } - - static bool enableAuxBusesForCurrentFormat (PluginBusUtilities& busUtils, const AudioChannelSet& inputLayout, - const AudioChannelSet& outputLayout, - bool& hasSomethingChanged) + static void createDescriptor (AAX_IComponentDescriptor& desc, int configIndex, const AudioProcessor::BusesLayout& fullLayout, AudioProcessor& processor) { - const int numOutBuses = busUtils.getBusCount (false); - const int numInputBuses = busUtils.getBusCount(true); - - if (numOutBuses > 1) - { - PluginBusUtilities::ScopedBusRestorer layoutRestorer (busUtils); - - // enable all possible output buses - for (int busIdx = 1; busIdx < busUtils.getBusCount (false); ++busIdx) - { - AudioChannelSet layout = busUtils.getChannelSet (false, busIdx); - - // bus disabled by default? try to enable it with the default layout - if (layout == AudioChannelSet::disabled()) - { - layout = busUtils.getDefaultLayoutForBus (false, busIdx); - setPreferredBusArrangement (busUtils, false, busIdx, layout, hasSomethingChanged); - } - } - - // changing output buses may have changed main bus layout - bool success = true; - - if (numInputBuses > 0) - success = setPreferredBusArrangement (busUtils, true, 0, inputLayout, hasSomethingChanged); - - if (success) - success = setPreferredBusArrangement (busUtils, false, 0, outputLayout, hasSomethingChanged); - - // was the above successful - if (success && (numInputBuses == 0 || busUtils.getChannelSet (true, 0) == inputLayout) - && busUtils.getChannelSet (false, 0) == outputLayout) - layoutRestorer.release(); - else - hasSomethingChanged = true; - } - - // does the plug-in have side-chain support? Check the following: - // 1) does it have an input bus with index = 1 which supports mono - // 2) can all other input buses be disabled - // 3) does the format of the main buses not change when enabling the first bus - if (numInputBuses > 1) - { - bool success = true; - bool hasSidechain = false; - - const AudioChannelSet set = busUtils.getDefaultLayoutForChannelNumAndBus (true, 1, 1); - if (! set.isDisabled()) - hasSidechain = setPreferredBusArrangement (busUtils, true, 1, set, hasSomethingChanged); - - if (! hasSidechain) - success = setPreferredBusArrangement (busUtils, true, 1, - AudioChannelSet::disabled(), - hasSomethingChanged); - - // AAX requires your processor's first sidechain to be either mono or that - // it can be disabled - jassert(success); - - // disable all other input buses - for (int busIdx = 2; busIdx < numInputBuses; ++busIdx) - { - success = setPreferredBusArrangement (busUtils, true, busIdx, - AudioChannelSet::disabled(), - hasSomethingChanged); - - // AAX can only have a single side-chain input. Therefore, your processor must either - // only have a single side-chain input or allow disabling all other side-chains - jassert (success); - } - - if (hasSidechain) - { - if (busUtils.getBusCount (false) == 0 || busUtils.getBusCount (true) == 0 || - (busUtils.getChannelSet (true, 0) == inputLayout && busUtils.getChannelSet (false, 0) == outputLayout)) - return true; - - // restore the old layout - if (busUtils.getBusCount(true) > 0) - setPreferredBusArrangement (busUtils, true, 0, inputLayout, hasSomethingChanged); - - if (busUtils.getBusCount (false) > 0) - setPreferredBusArrangement (busUtils, false, 0, outputLayout, hasSomethingChanged); - } - } - - return false; - } + AAX_EStemFormat aaxInputFormat = getFormatForAudioChannelSet (fullLayout.getMainInputChannelSet(), false); + AAX_EStemFormat aaxOutputFormat = getFormatForAudioChannelSet (fullLayout.getMainOutputChannelSet(), false); - // wrap setPreferredBusArrangement calls with this to prevent excessive calls to the plug-in - static bool setPreferredBusArrangement (PluginBusUtilities& busUtils, bool isInput, int busIdx, - const AudioChannelSet& layout, - bool& didChangePlugin) - { - // no need to do anything - if (busUtils.getChannelSet (isInput, busIdx) == layout) - return true; + #if JucePlugin_IsSynth + if (aaxInputFormat == AAX_eStemFormat_None) + aaxInputFormat = aaxOutputFormat; + #endif - didChangePlugin = true; - return busUtils.processor.setPreferredBusArrangement (isInput, busIdx, layout); - } + #if JucePlugin_IsMidiEffect + aaxInputFormat = aaxOutputFormat = AAX_eStemFormat_Mono; + #endif - //============================================================================== - static void createDescriptor (AAX_IComponentDescriptor& desc, int configIndex, PluginBusUtilities& busUtils, - const AudioChannelSet& inputLayout, const AudioChannelSet& outputLayout, - const AAX_EStemFormat aaxInputFormat, const AAX_EStemFormat aaxOutputFormat) - { check (desc.AddAudioIn (JUCEAlgorithmIDs::inputChannels)); check (desc.AddAudioOut (JUCEAlgorithmIDs::outputChannels)); @@ -1511,53 +1648,42 @@ struct AAXClasses properties->AddProperty (AAX_eProperty_SupportsSaveRestore, false); #endif - bool ignore; - if (enableAuxBusesForCurrentFormat (busUtils, inputLayout, outputLayout, ignore)) + if (fullLayout.getChannelSet (true, 1) == AudioChannelSet::mono()) { check (desc.AddSideChainIn (JUCEAlgorithmIDs::sideChainBuffers)); properties->AddProperty (AAX_eProperty_SupportsSideChainInput, true); } + const int maxAuxBuses = jmax (0, jmin (15, fullLayout.outputBuses.size() - 1)); + + // add the output buses // This is incrdibly dumb: the output bus format must be well defined // for every main bus in/out format pair. This means that there cannot // be two configurations with different aux formats but // identical main bus in/out formats. - for (int busIdx = 1; busIdx < busUtils.getBusCount (false); ++busIdx) + for (int busIdx = 1; busIdx < maxAuxBuses + 1; ++busIdx) { - AudioChannelSet outBusLayout = busUtils.getChannelSet (false, busIdx); + const AudioChannelSet& set = fullLayout.getChannelSet (false, busIdx); + if (set.isDisabled()) break; - if (outBusLayout != AudioChannelSet::disabled()) + AAX_EStemFormat auxFormat = getFormatForAudioChannelSet (set, true); + if (auxFormat != AAX_eStemFormat_INT32_MAX && auxFormat != AAX_eStemFormat_None) { - AAX_EStemFormat auxFormat = getFormatForAudioChannelSet (outBusLayout, busUtils.busIgnoresLayout (false, busIdx)); - if (auxFormat != AAX_eStemFormat_INT32_MAX && auxFormat != AAX_eStemFormat_None) - { - const String& name = busUtils.processor.busArrangement.outputBuses.getReference (busIdx).name; - check (desc.AddAuxOutputStem (0, static_cast (auxFormat), name.toRawUTF8())); - } + const String& name = processor.getBus (false, busIdx)->getName(); + check (desc.AddAuxOutputStem (0, static_cast (auxFormat), name.toRawUTF8())); } } - // this assertion should be covered by the assertions above - // if not please report a bug - jassert (busUtils.getNumEnabledBuses (true) <= 2); - check (desc.AddProcessProc_Native (algorithmProcessCallback, properties)); } static void getPlugInDescription (AAX_IEffectDescriptor& descriptor) { PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_AAX; - ScopedPointer plugin = createPluginFilterOfType (AudioProcessor::wrapperType_AAX); - PluginBusUtilities busUtils (*plugin, false, maxAAXChannels); - - busUtils.init(); - - // AAX requires your default layout to be non-discrete! - // For example, your default layout must be mono, stereo, quadrophonic - // and not AudioChannelSet::discreteChannels (2) etc. - jassert (busUtils.checkBusFormatsAreNotDiscrete()); + const int numInputBuses = plugin->getBusCount (true); + const int numOutputBuses = plugin->getBusCount (false); descriptor.AddName (JucePlugin_Desc); descriptor.AddName (JucePlugin_Name); @@ -1574,21 +1700,19 @@ struct AAXClasses #if JucePlugin_IsMidiEffect // MIDI effect plug-ins do not support any audio channels - jassert (busUtils.getBusCount (true) == 0 && busUtils.getBusCount (false) == 0); + jassert (numInputBuses == 0 && numOutputBuses == 0); if (AAX_IComponentDescriptor* const desc = descriptor.NewComponentDescriptor()) { - createDescriptor (*desc, 0, busUtils, - AudioChannelSet::disabled(), AudioChannelSet::disabled(), - AAX_eStemFormat_Mono, AAX_eStemFormat_Mono); + createDescriptor (*desc, 0, plugin->getBusesLayout(), *plugin); check (descriptor.AddComponent (desc)); } #else int configIndex = 0; - const int numIns = busUtils.getBusCount (true) > 0 ? AAX_eStemFormatNum : 0; - const int numOuts = busUtils.getBusCount (false) > 0 ? AAX_eStemFormatNum : 0; + const int numIns = numInputBuses > 0 ? AAX_eStemFormatNum : 0; + const int numOuts = numOutputBuses > 0 ? AAX_eStemFormatNum : 0; for (int inIdx = 0; inIdx < jmax (numIns, 1); ++inIdx) { @@ -1600,33 +1724,13 @@ struct AAXClasses AAX_EStemFormat aaxOutFormat = numOuts > 0 ? aaxFormats[outIdx] : AAX_eStemFormat_None; AudioChannelSet outLayout = channelSetFromStemFormat (aaxOutFormat, false); - bool success = true; - - if (numIns > 0) - success = busUtils.processor.setPreferredBusArrangement (true, 0, inLayout); - - if (numOuts > 0 && success) - success = busUtils.processor.setPreferredBusArrangement (false, 0, outLayout); - - if (! success) - continue; - - // if we can't set both in AND out formats simultaneously then ignore this format! - if (numIns > 0 && numOuts > 0 && (inLayout != busUtils.getChannelSet (true, 0) || (outLayout != busUtils.getChannelSet (false, 0)))) - continue; - - // AAX requires a single input if this plug-in is a synth - #if JucePlugin_IsSynth - if (numIns == 0) - aaxInFormat = aaxOutFormat; - #endif - - if (aaxInFormat == AAX_eStemFormat_None && aaxOutFormat == AAX_eStemFormat_None) + AudioProcessor::BusesLayout fullLayout; + if (! JuceAAX_Processor::fullBusesLayoutFromMainLayout (*plugin, inLayout, outLayout, fullLayout)) continue; if (AAX_IComponentDescriptor* const desc = descriptor.NewComponentDescriptor()) { - createDescriptor (*desc, configIndex++, busUtils, inLayout, outLayout, aaxInFormat, aaxOutFormat); + createDescriptor (*desc, configIndex++, fullLayout, *plugin); check (descriptor.AddComponent (desc)); } } @@ -1636,43 +1740,12 @@ struct AAXClasses jassert (configIndex > 0); #endif } -}; +} -//============================================================================== -AAX_EStemFormat AAXClasses::aaxFormats[] = -{ - AAX_eStemFormat_Mono, - AAX_eStemFormat_Stereo, - AAX_eStemFormat_LCR, - AAX_eStemFormat_LCRS, - AAX_eStemFormat_Quad, - AAX_eStemFormat_5_0, - AAX_eStemFormat_5_1, - AAX_eStemFormat_6_0, - AAX_eStemFormat_6_1, - AAX_eStemFormat_7_0_SDDS, - AAX_eStemFormat_7_1_SDDS, - AAX_eStemFormat_7_0_DTS, - AAX_eStemFormat_7_1_DTS -}; - -AAXClasses::AAXChannelStreamOrder AAXClasses::aaxChannelOrder[] = +void AAX_CALLBACK AAXClasses::algorithmProcessCallback (JUCEAlgorithmContext* const instancesBegin[], const void* const instancesEnd) { - {AAX_eStemFormat_Mono, {AudioChannelSet::centre, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown}}, - {AAX_eStemFormat_Stereo, {AudioChannelSet::left, AudioChannelSet::right, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown}}, - {AAX_eStemFormat_LCR, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown}}, - {AAX_eStemFormat_LCRS, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::surround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown}}, - {AAX_eStemFormat_Quad, {AudioChannelSet::left, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown}}, - {AAX_eStemFormat_5_0, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown}}, - {AAX_eStemFormat_5_1, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::subbass, AudioChannelSet::unknown, AudioChannelSet::unknown}}, - {AAX_eStemFormat_6_0, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::surround, AudioChannelSet::rightSurround, AudioChannelSet::unknown, AudioChannelSet::unknown}}, - {AAX_eStemFormat_6_1, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::surround, AudioChannelSet::rightSurround, AudioChannelSet::subbass, AudioChannelSet::unknown}}, - {AAX_eStemFormat_7_0_SDDS, {AudioChannelSet::left, AudioChannelSet::leftCentre, AudioChannelSet::centre, AudioChannelSet::rightCentre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown}}, - {AAX_eStemFormat_7_0_DTS, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftRearSurround, AudioChannelSet::rightRearSurround, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::unknown}}, - {AAX_eStemFormat_7_1_SDDS, {AudioChannelSet::left, AudioChannelSet::leftCentre, AudioChannelSet::centre, AudioChannelSet::rightCentre, AudioChannelSet::right, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::subbass}}, - {AAX_eStemFormat_7_1_DTS, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftRearSurround, AudioChannelSet::rightRearSurround, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::subbass}}, - {AAX_eStemFormat_None, {AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown, AudioChannelSet::unknown}}, -}; + AAXClasses::JuceAAX_Processor::algorithmCallback (instancesBegin, instancesEnd); +} //============================================================================== AAX_Result JUCE_CDECL GetEffectDescriptions (AAX_ICollection*); diff --git a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm index efe02faae7..990b927645 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm @@ -76,9 +76,8 @@ #include "../utility/juce_IncludeModuleHeaders.h" #include "../utility/juce_FakeMouseMoveGenerator.h" #include "../utility/juce_CarbonVisibility.h" -#include "../utility/juce_PluginBusUtilities.h" -#include "juce_AU_Shared.h" +#include "../../juce_audio_processors/format_types/juce_AU_Shared.h" //============================================================================== static Array activePlugins, activeUIs; @@ -100,6 +99,9 @@ struct AudioProcessorHolder } juceFilter = createPluginFilterOfType (AudioProcessor::wrapperType_AudioUnit); + + // audio units do not have a notion of enabled or un-enabled buses + juceFilter->enableAllBuses(); } ScopedPointer juceFilter; @@ -115,17 +117,32 @@ class JuceAU : public AudioProcessorHolder, public: JuceAU (AudioUnit component) : AudioProcessorHolder(activePlugins.size() + activeUIs.size() == 0), - MusicDeviceBase (component, (UInt32) PluginBusUtilities (*juceFilter, false).getNumEnabledBuses (true), - (UInt32) PluginBusUtilities (*juceFilter, false).getNumEnabledBuses (false)), + MusicDeviceBase (component, (UInt32) juceFilter->getBusCount (true), (UInt32) juceFilter->getBusCount (false)), isBypassed (false), - busUtils (*juceFilter, true, maxChannelsToProbeFor()), - totalInChannels (busUtils.findTotalNumChannels (true)), - totalOutChannels (busUtils.findTotalNumChannels (false)), - mapper (busUtils) + mapper (*juceFilter) { - busUtils.init(); + #ifdef JucePlugin_PreferredChannelConfigurations + short configs[][2] = {JucePlugin_PreferredChannelConfigurations}; + const int numConfigs = sizeof (configs) / sizeof (short[2]); + + jassert (numConfigs > 0 && (configs[0][0] > 0 || configs[0][1] > 0)); + juceFilter->setPlayConfigDetails (configs[0][0], configs[0][1], 44100.0, 1024); + + for (int i = 0; i < numConfigs; ++i) + { + AUChannelInfo info; + + info.inChannels = configs[i][0]; + info.outChannels = configs[i][1]; + + channelInfo.add (info); + } + #else + channelInfo = AudioUnitHelpers::getAUChannelInfo (*juceFilter); + #endif - channelInfo = AudioUnitHelpers::getAUChannelInfo (busUtils); + totalInChannels = juceFilter->getTotalNumInputChannels(); + totalOutChannels = juceFilter->getTotalNumOutputChannels(); juceFilter->setPlayHead (this); juceFilter->addListener (this); @@ -164,7 +181,6 @@ public: ComponentResult Initialize() override { ComponentResult err; - PluginBusUtilities::ScopedBusRestorer restorer (busUtils); if ((err = syncProcessorWithAudioUnit()) != noErr) return err; @@ -175,7 +191,6 @@ public: mapper.alloc(); prepareToPlay(); - restorer.release(); return noErr; } @@ -254,11 +269,11 @@ public: #if JucePlugin_IsMidiEffect return false; #elif JucePlugin_IsSynth - if (isInput) return busUtils.hasDynamicInBuses(); + if (isInput) return false; #endif - return isInput ? (busUtils.getBusCount (true) > 1 && busUtils.hasDynamicInBuses()) - : (busUtils.getBusCount (false) > 1 && busUtils.hasDynamicOutBuses()); + const int busCount = juceFilter->getBusCount (isInput); + return (juceFilter->canAddBus (isInput) || (busCount > 0 && juceFilter->canRemoveBus (isInput))); } OSStatus SetBusCount (AudioUnitScope scope, UInt32 count) override @@ -269,48 +284,69 @@ public: if ((err = scopeToDirection (scope, isInput)) != noErr) return err; - if (count != GetScope (scope).GetNumberOfElements()) + if (count != (UInt32) juceFilter->getBusCount (isInput)) { - if ((isInput && (! busUtils.hasDynamicInBuses())) || ((! isInput) && (! busUtils.hasDynamicOutBuses()))) - return kAudioUnitErr_PropertyNotWritable; + const int busCount = juceFilter->getBusCount (isInput); - // Similar as with the stream format, we don't really tell the AudioProcessor about - // the bus count change until Initialize is called. We only generally test if - // this bus count can work. - if (static_cast (count) > busUtils.getBusCount (isInput)) - return kAudioUnitErr_FormatNotSupported; - - // we need to already create the underlying elements so that we can change their formats - if ((err = MusicDeviceBase::SetBusCount (scope, count)) != noErr) - return err; + if ((! juceFilter->canAddBus (isInput)) && ((busCount == 0) || (! juceFilter->canRemoveBus (isInput)))) + return kAudioUnitErr_PropertyNotWritable; // however we do need to update the format tag: we need to do the same thing in SetFormat, for example - const int currentNumBus = busUtils.getNumEnabledBuses (isInput); const int requestedNumBus = static_cast (count); - - if (currentNumBus < requestedNumBus) { - for (int busNr = currentNumBus; busNr < requestedNumBus; ++busNr) - if ((err = syncAudioUnitWithChannelSet (isInput, busNr, busUtils.getDefaultLayoutForBus (isInput, busNr))) != noErr) - break; + int busNr; + + for (busNr = (busCount - 1); busNr != (requestedNumBus - 1); busNr += (requestedNumBus > busCount ? 1 : -1)) + { + if (requestedNumBus > busCount) + { + if (! juceFilter->addBus (isInput)) + break; + + err = syncAudioUnitWithChannelSet (isInput, busNr, + juceFilter->getBus (isInput, busNr + 1)->getDefaultLayout()); + if (err != noErr) + break; + } + else + { + if (! juceFilter->removeBus (isInput)) + break; + } + } + + err = (busNr == (requestedNumBus - 1) ? noErr : kAudioUnitErr_FormatNotSupported); } - else + + // we need to already create the underlying elements so that we can change their formats + if (err == noErr) + err = MusicDeviceBase::SetBusCount (scope, count); + + // was there an error? + if (err != noErr) { - AudioChannelLayoutTag nulltag = AudioUnitHelpers::ChannelSetToCALayoutTag (AudioChannelSet()); + // restore bus state + const int newBusCount = juceFilter->getBusCount (isInput); + for (int i = newBusCount; i != busCount; i += (busCount > newBusCount ? 1 : -1)) + { + if (busCount > newBusCount) + juceFilter->addBus (isInput); + else + juceFilter->removeBus (isInput); + } - for (int busNr = requestedNumBus; busNr < currentNumBus; ++busNr) - getCurrentLayout (isInput, busNr) = nulltag; + return kAudioUnitErr_FormatNotSupported; } // update total channel count - totalInChannels = busUtils.findTotalNumChannels (true); - totalOutChannels = busUtils.findTotalNumChannels (false); + totalInChannels = juceFilter->getTotalNumInputChannels(); + totalOutChannels = juceFilter->getTotalNumOutputChannels(); if (err != noErr) return err; } - return MusicDeviceBase::SetBusCount (scope, count); + return noErr; } UInt32 SupportedNumChannels (const AUChannelInfo** outInfo) override @@ -625,6 +661,29 @@ public: } //============================================================================== + bool busIgnoresLayout (bool isInput, int busNr) const + { + #ifdef JucePlugin_PreferredChannelConfigurations + ignoreUnused (isInput, busNr); + + return true; + #else + if (const AudioProcessor::Bus* bus = juceFilter->getBus (isInput, busNr)) + { + AudioChannelSet discreteRangeSet; + const int n = bus->getDefaultLayout().size(); + for (int i = 0; i < n; ++i) + discreteRangeSet.addChannel ((AudioChannelSet::ChannelType) (256 + i)); + + // if the audioprocessor supports this it cannot + // really be interested in the bus layouts + return bus->isLayoutSupported (discreteRangeSet); + } + + return true; + #endif + } + UInt32 GetAudioChannelLayout (AudioUnitScope scope, AudioUnitElement element, AudioChannelLayout* outLayoutPtr, Boolean& outWritable) override { @@ -636,7 +695,7 @@ public: if (elementToBusIdx (scope, element, isInput, busNr) != noErr) return 0; - if (busUtils.busIgnoresLayout(isInput, busNr)) + if (busIgnoresLayout (isInput, busNr)) return 0; outWritable = true; @@ -660,7 +719,7 @@ public: if (elementToBusIdx (scope, element, isInput, busNr) != noErr) return 0; - if (busUtils.busIgnoresLayout(isInput, busNr)) + if (busIgnoresLayout (isInput, busNr)) return 0; const Array& layouts = getSupportedBusLayouts (isInput, busNr); @@ -680,12 +739,9 @@ public: if ((err = elementToBusIdx (scope, element, isInput, busNr)) != noErr) return err; - if (busUtils.busIgnoresLayout(isInput, busNr)) + if (busIgnoresLayout (isInput, busNr)) return kAudioUnitErr_PropertyNotWritable; - if (IsInitialized()) - jassertfalse; // TODO: Fabian arrggghhhh: auval changes layout after it is initialized - if (inLayout == nullptr) return kAudioUnitErr_InvalidPropertyValue; @@ -693,17 +749,21 @@ public: { const AudioChannelSet newChannelSet = AudioUnitHelpers::CoreAudioChannelLayoutToJuceType (*inLayout); const int currentNumChannels = static_cast (ioElement->GetStreamFormat().NumberChannels()); + const int newChannelNum = newChannelSet.size(); - if (currentNumChannels != newChannelSet.size()) + if (currentNumChannels != newChannelNum) return kAudioUnitErr_InvalidPropertyValue; // check if the new layout could be potentially set - PluginBusUtilities::ScopedBusRestorer restorer (busUtils); - - bool success = juceFilter->setPreferredBusArrangement (isInput, busNr, newChannelSet); + #ifdef JucePlugin_PreferredChannelConfigurations + short configs[][2] = {JucePlugin_PreferredChannelConfigurations}; - if (!success) + if (! AudioUnitHelpers::isLayoutSupported (*juceFilter, isInput, busNr, newChannelNum, configs)) return kAudioUnitErr_FormatNotSupported; + #else + if (! juceFilter->getBus (isInput, busNr)->isLayoutSupported (newChannelSet)) + return kAudioUnitErr_FormatNotSupported; + #endif getCurrentLayout (isInput, busNr) = AudioUnitHelpers::ChannelSetToCALayoutTag (newChannelSet); @@ -800,7 +860,7 @@ public: ComponentResult Version() override { return JucePlugin_VersionCode; } bool SupportsTail() override { return true; } Float64 GetTailTime() override { return juceFilter->getTailLengthSeconds(); } - double getSampleRate() { return busUtils.getNumEnabledBuses (false) > 0 ? GetOutput(0)->GetStreamFormat().mSampleRate : 44100.0; } + double getSampleRate() { return juceFilter->getBusCount (false) > 0 ? GetOutput(0)->GetStreamFormat().mSampleRate : 44100.0; } Float64 GetLatency() override { @@ -940,15 +1000,27 @@ public: return false; const int newNumChannels = static_cast (format.NumberChannels()); - const int oldNumChannels = busUtils.getNumChannels (isInput, busNr); + const int oldNumChannels = juceFilter->getChannelCountOfBus (isInput, busNr); if (newNumChannels == oldNumChannels) return true; - PluginBusUtilities::ScopedBusRestorer restorer (busUtils); + if (AudioProcessor::Bus* bus = juceFilter->getBus (isInput, busNr)) + { + if (! MusicDeviceBase::ValidFormat (scope, element, format)) + return false; + + #ifdef JucePlugin_PreferredChannelConfigurations + short configs[][2] = {JucePlugin_PreferredChannelConfigurations}; + + ignoreUnused (bus); + return AudioUnitHelpers::isLayoutSupported (*juceFilter, isInput, busNr, newNumChannels, configs); + #else + return bus->isNumberOfChannelsSupported (newNumChannels); + #endif + } - return juceFilter->setPreferredBusArrangement (isInput, busNr, busUtils.getDefaultLayoutForChannelNumAndBus (isInput, busNr, newNumChannels)) - && MusicDeviceBase::ValidFormat (scope, element, format); + return false; } // AU requires us to override this for the sole reason that we need to find a default layout tag if the number of channels have changed @@ -964,11 +1036,18 @@ public: AudioChannelLayoutTag& currentTag = getCurrentLayout (isInput, busNr); const int newNumChannels = static_cast (format.NumberChannels()); - const int oldNumChannels = busUtils.getNumChannels (isInput, busNr); + const int oldNumChannels = juceFilter->getChannelCountOfBus (isInput, busNr); + + #ifdef JucePlugin_PreferredChannelConfigurations + short configs[][2] = {JucePlugin_PreferredChannelConfigurations}; + + if (! AudioUnitHelpers::isLayoutSupported (*juceFilter, isInput, busNr, newNumChannels, configs)) + return kAudioUnitErr_FormatNotSupported; + #endif // predict channel layout - AudioChannelSet set = (newNumChannels != oldNumChannels) ? busUtils.getDefaultLayoutForChannelNumAndBus (isInput, busNr, newNumChannels) - : busUtils.getChannelSet (isInput, busNr); + AudioChannelSet set = (newNumChannels != oldNumChannels) ? juceFilter->getBus (isInput, busNr)->supportedLayoutWithChannels (newNumChannels) + : juceFilter->getChannelLayoutOfBus (isInput, busNr); if (set == AudioChannelSet()) return kAudioUnitErr_FormatNotSupported; @@ -1019,17 +1098,17 @@ public: } // use input pointers on remaining channels - int channelCount = 0; for (int busIdx = 0; chIdx < totalInChannels;) { - busIdx = busUtils.getBusIdxForChannelIdx (true, chIdx, channelCount, busIdx); + int channelIndexInBus = juceFilter->getOffsetInBusBufferForAbsoluteChannelIndex (true, chIdx, busIdx); if (! GetAudioBufferList (true, busIdx, buffer, interleaved, numChannels)) continue; const int* inLayoutMap = mapper.get (true, busIdx); - for (int ch = chIdx - channelCount; ch < numChannels; ++ch) + const int n = juceFilter->getChannelCountOfBus (true, busIdx); + for (int ch = channelIndexInBus; ch < n; ++ch) audioBuffer.setBuffer (chIdx++, interleaved ? nullptr : static_cast (buffer->mBuffers[inLayoutMap[ch]].mData)); } } @@ -1426,7 +1505,6 @@ private: CriticalSection incomingMidiLock; AUMIDIOutputCallbackStruct midiCallback; AudioTimeStamp lastTimeStamp; - PluginBusUtilities busUtils; int totalInChannels, totalOutChannels; //============================================================================== @@ -1560,7 +1638,7 @@ private: busIdx = static_cast (element); if ((err = scopeToDirection (scope, isInput)) != noErr) return err; - if (isPositiveAndBelow (busIdx, busUtils.getBusCount (isInput))) return noErr; + if (isPositiveAndBelow (busIdx, juceFilter->getBusCount (isInput))) return noErr; return kAudioUnitErr_InvalidElement; } @@ -1636,8 +1714,8 @@ private: OSStatus syncAudioUnitWithProcessor() { OSStatus err = noErr; - const int enabledInputs = busUtils.getNumEnabledBuses (true); - const int enabledOutputs = busUtils.getNumEnabledBuses (false); + const int enabledInputs = juceFilter->getBusCount (true); + const int enabledOutputs = juceFilter->getBusCount (false); if ((err = MusicDeviceBase::SetBusCount (kAudioUnitScope_Input, static_cast (enabledInputs))) != noErr) return err; @@ -1647,73 +1725,60 @@ private: addSupportedLayoutTags(); - for (int i = 0; i < juceFilter->busArrangement.inputBuses.size(); ++i) - if ((err = syncAudioUnitWithChannelSet (true, i, busUtils.getChannelSet (true, i))) != noErr) return err; - - for (int i = 0; i < juceFilter->busArrangement.outputBuses.size(); ++i) - if ((err = syncAudioUnitWithChannelSet (false, i, busUtils.getChannelSet (false, i))) != noErr) return err; + for (int i = 0; i < enabledInputs; ++i) + if ((err = syncAudioUnitWithChannelSet (true, i, juceFilter->getChannelLayoutOfBus (true, i))) != noErr) return err; - // if you are hitting this assertion then your plug-in allows disabling/enabling buses (i.e. you - // do not return false in setPreferredBusArrangement when the number of channels is zero), however, - // AudioUnits require at least the main bus to be enabled by default in this case. Please assign - // a non-zero number of channels to your main input or output bus in the constructor of your AudioProcessor - jassert ((! busUtils.hasDynamicInBuses() && ! busUtils.hasDynamicOutBuses()) || (enabledInputs > 0) || (enabledOutputs > 0)); + for (int i = 0; i < enabledOutputs; ++i) + if ((err = syncAudioUnitWithChannelSet (false, i, juceFilter->getChannelLayoutOfBus (false, i))) != noErr) return err; return noErr; } OSStatus syncProcessorWithAudioUnit() { - OSStatus err; - const int numInputBuses = busUtils.getBusCount (true); - const int numOutputBuses = busUtils.getBusCount (false); + const int numInputBuses = juceFilter->getBusCount (true); + const int numOutputBuses = juceFilter->getBusCount (false); const int numInputElements = static_cast (GetScope(kAudioUnitScope_Input). GetNumberOfElements()); const int numOutputElements = static_cast (GetScope(kAudioUnitScope_Output).GetNumberOfElements()); - for (int i = 0; i < numInputBuses; ++i) - if ((err = syncProcessorWithAudioUnitForBus (true, i)) != noErr) return err; - - for (int i = 0; i < numOutputBuses; ++i) - if ((err = syncProcessorWithAudioUnitForBus (false, i)) != noErr) return err; - - if (numInputElements != busUtils.getNumEnabledBuses (true) || numOutputElements != busUtils.getNumEnabledBuses (false)) - return kAudioUnitErr_FormatNotSupported; - - // re-check the format of all buses to see if it matches what CoreAudio actually requested - for (int i = 0; i < busUtils.getNumEnabledBuses (true); ++i) - if (! audioUnitAndProcessorIsFormatMatching (true, i)) return kAudioUnitErr_FormatNotSupported; + AudioProcessor::BusesLayout requestedLayouts; + for (int dir = 0; dir < 2; ++dir) + { + const bool isInput = (dir == 0); + const int n = (isInput ? numInputBuses : numOutputBuses); + const int numAUElements = (isInput ? numInputElements : numOutputElements); + Array& requestedBuses = (isInput ? requestedLayouts.inputBuses : requestedLayouts.outputBuses); - for (int i = 0; i < busUtils.getNumEnabledBuses (false); ++i) - if (! audioUnitAndProcessorIsFormatMatching (false, i)) return kAudioUnitErr_FormatNotSupported; + for (int busIdx = 0; busIdx < n; ++busIdx) + { + const AUIOElement* element = (busIdx < numAUElements ? GetIOElement (isInput ? kAudioUnitScope_Input : kAudioUnitScope_Output, (UInt32) busIdx) : nullptr); + const int numChannels = (element != nullptr ? static_cast (element->GetStreamFormat().NumberChannels()) : 0); - // update total channel count - totalInChannels = busUtils.findTotalNumChannels (true); - totalOutChannels = busUtils.findTotalNumChannels (false); + AudioChannelLayoutTag currentLayoutTag = isInput ? currentInputLayout[busIdx] : currentOutputLayout[busIdx]; + const int tagNumChannels = currentLayoutTag & 0xffff; - return noErr; - } - - //============================================================================== - OSStatus syncProcessorWithAudioUnitForBus (bool isInput, int busNr) - { - jassert (isPositiveAndBelow (busNr, busUtils.getBusCount (isInput))); + if (numChannels != tagNumChannels) + return kAudioUnitErr_FormatNotSupported; - const int numAUElements = static_cast (GetScope(isInput ? kAudioUnitScope_Input : kAudioUnitScope_Output).GetNumberOfElements()); - const AUIOElement* element = (busNr < numAUElements ? GetIOElement (isInput ? kAudioUnitScope_Input : kAudioUnitScope_Output, (UInt32) busNr) : nullptr); - const int numChannels = (element != nullptr ? static_cast (element->GetStreamFormat().NumberChannels()) : 0); + requestedBuses.add (AudioUnitHelpers::CALayoutTagToChannelSet(currentLayoutTag)); + } + } - AudioChannelLayoutTag currentLayoutTag = isInput ? currentInputLayout[busNr] : currentOutputLayout[busNr]; - const int tagNumChannels = currentLayoutTag & 0xffff; + #ifdef JucePlugin_PreferredChannelConfigurations + short configs[][2] = {JucePlugin_PreferredChannelConfigurations}; - if (numChannels != tagNumChannels) + if (! AudioProcessor::containsLayout (requestedLayouts, configs)) return kAudioUnitErr_FormatNotSupported; + #endif - const AudioChannelSet channelFormat = AudioUnitHelpers::CALayoutTagToChannelSet(currentLayoutTag); - - if (! juceFilter->setPreferredBusArrangement (isInput, busNr, channelFormat)) + if (! juceFilter->setBusesLayout (requestedLayouts)) return kAudioUnitErr_FormatNotSupported; + // update total channel count + totalInChannels = juceFilter->getTotalNumInputChannels(); + totalOutChannels = juceFilter->getTotalNumOutputChannels(); + return noErr; } @@ -1729,7 +1794,7 @@ private: if (AUIOElement* element = GetIOElement (isInput ? kAudioUnitScope_Input : kAudioUnitScope_Output, (UInt32) busNr)) { - element->SetName ((CFStringRef) juceStringToNS (busUtils.getFilterBus (isInput).getReference (busNr).name)); + element->SetName ((CFStringRef) juceStringToNS (juceFilter->getBus (isInput, busNr)->getName())); CAStreamBasicDescription streamDescription; streamDescription.mSampleRate = getSampleRate(); @@ -1743,24 +1808,6 @@ private: return kAudioUnitErr_InvalidElement; } - //============================================================================== - bool audioUnitAndProcessorIsFormatMatching (bool isInput, int busNr) - { - const AudioProcessor::AudioProcessorBus& bus = isInput ? juceFilter->busArrangement.inputBuses. getReference (busNr) - : juceFilter->busArrangement.outputBuses.getReference (busNr); - - if (const AUIOElement* element = GetIOElement (isInput ? kAudioUnitScope_Input : kAudioUnitScope_Output, (UInt32) busNr)) - { - const int numChannels = static_cast (element->GetStreamFormat().NumberChannels()); - - return (numChannels == bus.channels.size()); - } - else - jassertfalse; - - return false; - } - //============================================================================== void clearPresetsArray() const { @@ -1791,37 +1838,36 @@ private: AudioChannelLayoutTag& getCurrentLayout (bool isInput, int bus) noexcept { return (isInput ? currentInputLayout : currentOutputLayout).getReference (bus); } AudioChannelLayoutTag getCurrentLayout (bool isInput, int bus) const noexcept { return (isInput ? currentInputLayout : currentOutputLayout)[bus]; } - bool toggleBus (bool isInput, int busIdx) - { - if (busUtils.busCanBeDisabled (isInput, busIdx)) - return false; - - AudioChannelSet newSet; - - if (! busUtils.isBusEnabled (isInput, busIdx)) - newSet = busUtils.getDefaultLayoutForBus (isInput, busIdx); - - return juceFilter->setPreferredBusArrangement (isInput, busIdx, newSet); - } - //============================================================================== void addSupportedLayoutTagsForBus (bool isInput, int busNum, Array& tags) { int layoutIndex; AudioChannelLayoutTag tag; - for (layoutIndex = 0; (tag = AudioUnitHelpers::auChannelStreamOrder[layoutIndex].auLayoutTag) != 0; ++layoutIndex) - if (juceFilter->setPreferredBusArrangement (isInput, busNum, AudioUnitHelpers::CALayoutTagToChannelSet (tag))) - tags.add (tag); + if (AudioProcessor::Bus* bus = juceFilter->getBus (isInput, busNum)) + { + #ifndef JucePlugin_PreferredChannelConfigurations + for (layoutIndex = 0; (tag = AudioUnitHelpers::StreamOrder::auChannelStreamOrder[layoutIndex].auLayoutTag) != 0; ++layoutIndex) + if (bus->isLayoutSupported (AudioUnitHelpers::CALayoutTagToChannelSet (tag))) + tags.add (tag); + #endif - // add discrete layout tags - int n = busUtils.findMaxNumberOfChannelsForBus (true, busNum); - n = n < 0 ? maxChannelsToProbeFor() : n; + // add discrete layout tags + int n = bus->getMaxSupportedChannels(maxChannelsToProbeFor()); - for (int ch = 0; ch < n; ++ch) - { - if (juceFilter->setPreferredBusArrangement (isInput, busNum, AudioChannelSet::discreteChannels (ch))) - tags.add (static_cast ((int) kAudioChannelLayoutTag_DiscreteInOrder | ch)); + for (int ch = 0; ch < n; ++ch) + { + #ifdef JucePlugin_PreferredChannelConfigurations + ignoreUnused (layoutIndex, tag); + + const short configs[][2] = { JucePlugin_PreferredChannelConfigurations }; + if (AudioUnitHelpers::isLayoutSupported (*juceFilter, isInput, busNum, ch, configs)) + tags.add (static_cast ((int) kAudioChannelLayoutTag_DiscreteInOrder | ch)); + #else + if (bus->isLayoutSupported (AudioChannelSet::discreteChannels (ch))) + tags.add (static_cast ((int) kAudioChannelLayoutTag_DiscreteInOrder | ch)); + #endif + } } } @@ -1830,7 +1876,8 @@ private: Array >& layouts = isInput ? supportedInputLayouts : supportedOutputLayouts; layouts.clear(); - for (int busNr = 0; busNr < busUtils.getBusCount (isInput); ++busNr) + const int numBuses = juceFilter->getBusCount (isInput); + for (int busNr = 0; busNr < numBuses; ++busNr) { Array busLayouts; addSupportedLayoutTagsForBus (isInput, busNr, busLayouts); @@ -1843,10 +1890,9 @@ private: { currentInputLayout.clear(); currentOutputLayout.clear(); - currentInputLayout. resize (juceFilter->busArrangement.inputBuses. size()); - currentOutputLayout.resize (juceFilter->busArrangement.outputBuses.size()); + currentInputLayout. resize (juceFilter->getBusCount (true)); + currentOutputLayout.resize (juceFilter->getBusCount (false)); - PluginBusUtilities::ScopedBusRestorer busRestorer (busUtils); addSupportedLayoutTagsForDirection (true); addSupportedLayoutTagsForDirection (false); } diff --git a/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm index b2278b4c7c..a1f8cd0082 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm @@ -50,7 +50,6 @@ #include "../utility/juce_IncludeSystemHeaders.h" #include "../utility/juce_IncludeModuleHeaders.h" #include "../../juce_core/native/juce_osx_ObjCHelpers.h" -#include "../utility/juce_PluginBusUtilities.h" #include "../../juce_graphics/native/juce_mac_CoreGraphicsHelpers.h" #include "juce_AU_Shared.h" @@ -134,7 +133,12 @@ public: AUAudioUnit* getAudioUnit() noexcept { return au; } virtual int getVirtualMIDICableCount() { return 0; } virtual void reset() {} - virtual bool shouldChangeToFormat (AVAudioFormat*, AUAudioUnitBus*) { return true; } + virtual bool shouldChangeToFormat (AVAudioFormat* format, AUAudioUnitBus* bus) + { + objc_super s = { getAudioUnit(), [AUAudioUnit class] }; + return (ObjCMsgSendSuper (&s, @selector (shouldChangeToFormat:forBus:), format, bus) == YES); + } + virtual AUAudioUnitPreset* getCurrentPreset() { return nullptr; } virtual void setCurrentPreset(AUAudioUnitPreset*) {} virtual NSTimeInterval getLatency() { return 0.0; } @@ -176,10 +180,7 @@ public: virtual bool allocateRenderResourcesAndReturnError (NSError **outError) { objc_super s = { getAudioUnit(), [AUAudioUnit class] }; - if (! ObjCMsgSendSuper (&s, @selector (allocateRenderResourcesAndReturnError:), outError)) - return false; - - return true; + return (ObjCMsgSendSuper (&s, @selector (allocateRenderResourcesAndReturnError:), outError) == YES); } virtual void deallocateRenderResources() @@ -271,11 +272,11 @@ private: static AUAudioUnitBusArray* getOutputBusses (id self, SEL) { return _this (self)->getOutputBusses(); } static AUParameterTree* getParameterTree (id self, SEL) { return _this (self)->getParameterTree(); } static AUInternalRenderBlock getInternalRenderBlock (id self, SEL) { return _this (self)->getInternalRenderBlock(); } - static BOOL allocateRenderResourcesAndReturnError (id self, SEL, NSError** error) { return _this (self)->allocateRenderResourcesAndReturnError (error); } + static BOOL allocateRenderResourcesAndReturnError (id self, SEL, NSError** error) { return _this (self)->allocateRenderResourcesAndReturnError (error) ? YES : NO; } static void deallocateRenderResources (id self, SEL) { _this (self)->deallocateRenderResources(); } static void reset (id self, SEL) { _this (self)->reset(); } static NSInteger getVirtualMIDICableCount (id self, SEL) { return _this (self)->getVirtualMIDICableCount(); } - static BOOL shouldChangeToFormat (id self, SEL, AVAudioFormat* format, AUAudioUnitBus* bus) { return _this (self)->shouldChangeToFormat (format, bus); } + static BOOL shouldChangeToFormat (id self, SEL, AVAudioFormat* format, AUAudioUnitBus* bus) { return _this (self)->shouldChangeToFormat (format, bus) ? YES : NO; } static NSArray* parametersForOverviewWithCount (id self, SEL, NSInteger count) { return _this (self)->parametersForOverviewWithCount (static_cast (count)); } static NSArray* getFactoryPresets (id self, SEL) { return _this (self)->getFactoryPresets(); } static AUAudioUnitPreset* getCurrentPreset (id self, SEL) { return _this (self)->getCurrentPreset(); } @@ -284,8 +285,8 @@ private: static void setFullState (id self, SEL, NSDictionary* state) { return _this (self)->setFullState (state); } static NSTimeInterval getLatency (id self, SEL) { return _this (self)->getLatency(); } static NSTimeInterval getTailTime (id self, SEL) { return _this (self)->getTailTime(); } - static BOOL getCanProcessInPlace (id self, SEL) { return _this (self)->getCanProcessInPlace(); } - static BOOL getRenderingOffline (id self, SEL) { return _this (self)->getRenderingOffline(); } + static BOOL getCanProcessInPlace (id self, SEL) { return _this (self)->getCanProcessInPlace() ? YES : NO; } + static BOOL getRenderingOffline (id self, SEL) { return _this (self)->getRenderingOffline() ? YES : NO; } static void setRenderingOffline (id self, SEL, BOOL renderingOffline) { _this (self)->setRenderingOffline (renderingOffline); } static NSArray* getChannelCapabilities (id self, SEL) { return _this (self)->getChannelCapabilities(); } }; @@ -316,8 +317,7 @@ public: NSError** error) : JuceAudioUnitv3Base (descr, options, error), processorHolder (processor), - busUtils (**processorHolder, true, 8), - mapper (busUtils) + mapper (*processorHolder->get()) { init(); } @@ -325,8 +325,7 @@ public: JuceAudioUnitv3 (AUAudioUnit* audioUnit, AudioComponentDescription, AudioComponentInstantiationOptions, NSError**) : JuceAudioUnitv3Base (audioUnit), processorHolder (new AudioProcessorHolder (createPluginFilterOfType (AudioProcessor::wrapperType_AudioUnitv3))), - busUtils (**processorHolder, true, 8), - mapper (busUtils) + mapper (*processorHolder->get()) { init(); } @@ -349,21 +348,43 @@ public: //============================================================================== void init() { - busUtils.init(); + AudioProcessor& processor = getAudioProcessor(); + const AUAudioFrameCount maxFrames = [getAudioUnit() maximumFramesToRender]; + + #ifdef JucePlugin_PreferredChannelConfigurations + short configs[][2] = {JucePlugin_PreferredChannelConfigurations}; + const int numConfigs = sizeof (configs) / sizeof (short[2]); - getAudioProcessor().setPlayHead (this); + jassert (numConfigs > 0 && (configs[0][0] > 0 || configs[0][1] > 0)); + processor.setPlayConfigDetails (configs[0][0], configs[0][1], kDefaultSampleRate, static_cast (maxFrames)); - totalInChannels = busUtils.findTotalNumChannels (true); - totalOutChannels = busUtils.findTotalNumChannels (false); + Array channelInfos; + + for (int i = 0; i < numConfigs; ++i) + { + AUChannelInfo channelInfo; + + channelInfo.inChannels = configs[i][0]; + channelInfo.outChannels = configs[i][1]; + + channelInfos.add (channelInfo); + } + #else + Array channelInfos = AudioUnitHelpers::getAUChannelInfo (processor); + #endif + + processor.setPlayHead (this); + + totalInChannels = processor.getTotalNumInputChannels(); + totalOutChannels = processor.getTotalNumOutputChannels(); { channelCapabilities = [[NSMutableArray alloc] init]; - Array channelInfo = AudioUnitHelpers::getAUChannelInfo (busUtils); - for (int i = 0; i < channelInfo.size(); ++i) - { - AUChannelInfo& info = channelInfo.getReference (i); + for (int i = 0; i < channelInfos.size(); ++i) + { + AUChannelInfo& info = channelInfos.getReference (i); [channelCapabilities addObject: [NSNumber numberWithInteger: info.inChannels]]; [channelCapabilities addObject: [NSNumber numberWithInteger: info.outChannels]]; @@ -373,9 +394,6 @@ public: editorObserverToken = nullptr; internalRenderBlock = CreateObjCBlock (this, &JuceAudioUnitv3::renderCallback); - const AUAudioFrameCount maxFrames = [getAudioUnit() maximumFramesToRender]; - - auto& processor = getAudioProcessor(); processor.setRateAndBufferSizeDetails (kDefaultSampleRate, static_cast (maxFrames)); processor.prepareToPlay (kDefaultSampleRate, static_cast (maxFrames)); processor.addListener (this); @@ -511,13 +529,65 @@ public: //============================================================================== bool allocateRenderResourcesAndReturnError (NSError **outError) override { + AudioProcessor& processor = getAudioProcessor(); const AUAudioFrameCount maxFrames = [getAudioUnit() maximumFramesToRender]; if (! JuceAudioUnitv3Base::allocateRenderResourcesAndReturnError (outError)) return false; - totalInChannels = busUtils.findTotalNumChannels (true); - totalOutChannels = busUtils.findTotalNumChannels (false); + if (outError != nullptr) + *outError = nullptr; + + AudioProcessor::BusesLayout layouts; + for (int dir = 0; dir < 2; ++dir) + { + const bool isInput = (dir == 0); + const int n = processor.getBusCount (isInput); + Array& channelSets = (isInput ? layouts.inputBuses : layouts.outputBuses); + + AUAudioUnitBusArray* auBuses = (isInput ? [getAudioUnit() inputBusses] : [getAudioUnit() outputBusses]); + jassert ([auBuses count] == static_cast (n)); + + for (int busIdx = 0; busIdx < n; ++busIdx) + { + AudioProcessor::Bus* bus = processor.getBus (isInput, busIdx); + AVAudioFormat* format = [[auBuses objectAtIndexedSubscript:static_cast (busIdx)] format]; + + AudioChannelSet newLayout; + if (const AVAudioChannelLayout* layout = [format channelLayout]) + newLayout = AudioUnitHelpers::CALayoutTagToChannelSet ([layout layoutTag]); + else + newLayout = bus->supportedLayoutWithChannels (static_cast ([format channelCount])); + + if (newLayout.isDisabled()) + return false; + + channelSets.add (newLayout); + } + } + + #ifdef JucePlugin_PreferredChannelConfigurations + short configs[][2] = {JucePlugin_PreferredChannelConfigurations}; + + if (! AudioProcessor::containsLayout (layouts, configs)) + { + if (outError != nullptr) + *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:kAudioUnitErr_FormatNotSupported userInfo:nullptr]; + + return false; + } + #endif + + if (! processor.setBusesLayout (layouts)) + { + if (outError != nullptr) + *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:kAudioUnitErr_FormatNotSupported userInfo:nullptr]; + + return false; + } + + totalInChannels = processor.getTotalNumInputChannels(); + totalOutChannels = processor.getTotalNumOutputChannels(); allocateBusBuffer (true); allocateBusBuffer (false); @@ -526,10 +596,9 @@ public: audioBuffer.prepare (totalInChannels, totalOutChannels, static_cast (maxFrames)); - double sampleRate = (jmax (busUtils.getBusCount (true), busUtils.getBusCount (false)) > 0 ? + double sampleRate = (jmax (processor.getBusCount (true), processor.getBusCount (false)) > 0 ? [[[([inputBusses count] > 0 ? inputBusses : outputBusses) objectAtIndexedSubscript: 0] format] sampleRate] : 44100.0); - auto& processor = getAudioProcessor(); processor.setRateAndBufferSizeDetails (sampleRate, static_cast (maxFrames)); processor.prepareToPlay (sampleRate, static_cast (maxFrames)); @@ -565,28 +634,45 @@ public: } //============================================================================== - bool shouldChangeToFormat (AVAudioFormat* format, AUAudioUnitBus* bus) override + bool shouldChangeToFormat (AVAudioFormat* format, AUAudioUnitBus* auBus) override { - const bool isInput = ([bus busType] == AUAudioUnitBusTypeInput); - const int busIdx = static_cast ([bus index]); - const int newNumChannels = static_cast ([format streamDescription]->mChannelsPerFrame); + const bool isInput = ([auBus busType] == AUAudioUnitBusTypeInput); + const int busIdx = static_cast ([auBus index]); + const int newNumChannels = static_cast ([format channelCount]); - AudioChannelSet newLayout; + AudioProcessor& processor = getAudioProcessor(); - if (const AVAudioChannelLayout* layout = [format channelLayout]) - newLayout = AudioUnitHelpers::CALayoutTagToChannelSet ([layout layoutTag]); - else - newLayout = busUtils.getDefaultLayoutForChannelNumAndBus(isInput, busIdx, newNumChannels); + if (AudioProcessor::Bus* bus = processor.getBus (isInput, busIdx)) + { + #ifdef JucePlugin_PreferredChannelConfigurations + ignoreUnused (bus); - if (newLayout.size() != newNumChannels) - return false; + short configs[][2] = {JucePlugin_PreferredChannelConfigurations}; + + if (! AudioUnitHelpers::isLayoutSupported (processor, isInput, busIdx, newNumChannels, configs)) + return false; + #else + if (const AVAudioChannelLayout* layout = [format channelLayout]) + { + AudioChannelSet newLayout = AudioUnitHelpers::CALayoutTagToChannelSet ([layout layoutTag]); + + if (newLayout.size() != newNumChannels) + return false; - bool success = getAudioProcessor().setPreferredBusArrangement (isInput, busIdx, newLayout); + if (! bus->isLayoutSupported (newLayout)) + return false; + } + else + { + if (! bus->isNumberOfChannelsSupported (newNumChannels)) + return false; + } + #endif - totalInChannels = busUtils.findTotalNumChannels (true); - totalOutChannels = busUtils.findTotalNumChannels (false); + return true; + } - return success; + return false; } //============================================================================== @@ -782,14 +868,16 @@ private: void addAudioUnitBusses (bool isInput) { ScopedPointer > array = [[NSMutableArray alloc] init]; + AudioProcessor& processor = getAudioProcessor(); + const int n = processor.getBusCount (isInput); - for (int i = 0; i < busUtils.getBusCount (isInput); ++i) + for (int i = 0; i < n; ++i) { ScopedPointer audioUnitBus; { ScopedPointer defaultFormat = [[AVAudioFormat alloc] initStandardFormatWithSampleRate: kDefaultSampleRate - channels: static_cast (busUtils.getNumChannels (isInput, i))]; + channels: static_cast (processor.getChannelCountOfBus (isInput, i))]; audioUnitBus = [[AUAudioUnitBus alloc] initWithFormat: defaultFormat error: nullptr]; @@ -908,7 +996,7 @@ private: OwnedArray& busBuffers = isInput ? inBusBuffers : outBusBuffers; busBuffers.clear(); - const int n = busUtils.getBusCount (isInput); + const int n = getAudioProcessor().getBusCount (isInput); const AUAudioFrameCount maxFrames = [getAudioUnit() maximumFramesToRender]; for (int busIdx = 0; busIdx < n; ++busIdx) @@ -950,10 +1038,11 @@ private: NSInteger outputBusNumber, AudioBufferList* outputData, const AURenderEvent *__nullable realtimeEventListHead, AURenderPullInputBlock __nullable pullInputBlock) { + auto& processor = getAudioProcessor(); jassert (static_cast (frameCount) <= getAudioProcessor().getBlockSize()); // process params - const int numParams = getAudioProcessor().getNumParameters(); + const int numParams = processor.getNumParameters(); processEvents (realtimeEventListHead, numParams, static_cast (timestamp->mSampleTime)); if (lastTimeStamp.mSampleTime != timestamp->mSampleTime) @@ -1017,22 +1106,16 @@ private: } // use input pointers on remaining channels - int channelCount = 0; for (int busIdx = 0; chIdx < totalInChannels;) { - busIdx = busUtils.getBusIdxForChannelIdx (true, chIdx, channelCount, busIdx); + const int channelOffset = processor.getOffsetInBusBufferForAbsoluteChannelIndex (true, chIdx, busIdx); BusBuffer& busBuffer = *inBusBuffers[busIdx]; AudioBufferList* buffer = busBuffer.get(); - const bool interleaved = busBuffer.interleaved(); - const int numChannels = busBuffer.numChannels(); - const int* inLayoutMap = mapper.get (true, busIdx); - - for (int ch = chIdx - channelCount; ch < numChannels; ++ch) - audioBuffer.setBuffer (chIdx++, interleaved ? nullptr : static_cast (buffer->mBuffers[inLayoutMap[ch]].mData)); + audioBuffer.setBuffer (chIdx++, busBuffer.interleaved() ? nullptr : static_cast (buffer->mBuffers[inLayoutMap[channelOffset]].mData)); } } @@ -1140,7 +1223,6 @@ private: static const double kDefaultSampleRate; AudioProcessorHolder::Ptr processorHolder; - PluginBusUtilities busUtils; int totalInChannels, totalOutChannels; diff --git a/modules/juce_audio_plugin_client/AUResources.r b/modules/juce_audio_plugin_client/AUResources.r new file mode 100644 index 0000000000..55040fc396 --- /dev/null +++ b/modules/juce_audio_plugin_client/AUResources.r @@ -0,0 +1,140 @@ +/* + File: AUResources.r + Abstract: AUResources.r + Version: 1.1 + + Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple + Inc. ("Apple") in consideration of your agreement to the following + terms, and your use, installation, modification or redistribution of + this Apple software constitutes acceptance of these terms. If you do + not agree with these terms, please do not use, install, modify or + redistribute this Apple software. + + In consideration of your agreement to abide by the following terms, and + subject to these terms, Apple grants you a personal, non-exclusive + license, under Apple's copyrights in this original Apple software (the + "Apple Software"), to use, reproduce, modify and redistribute the Apple + Software, with or without modifications, in source and/or binary forms; + provided that if you redistribute the Apple Software in its entirety and + without modifications, you must retain this notice and the following + text and disclaimers in all such redistributions of the Apple Software. + Neither the name, trademarks, service marks or logos of Apple Inc. may + be used to endorse or promote products derived from the Apple Software + without specific prior written permission from Apple. Except as + expressly stated in this notice, no other rights or licenses, express or + implied, are granted by Apple herein, including but not limited to any + patent rights that may be infringed by your derivative works or by other + works in which the Apple Software may be incorporated. + + The Apple Software is provided by Apple on an "AS IS" basis. APPLE + MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION + THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND + OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. + + IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, + MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED + AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), + STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + Copyright (C) 2014 Apple Inc. All Rights Reserved. + +*/ +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// AUResources.r +// +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ + +/* sample macro definitions -- all of these symbols must be defined +#define RES_ID kHALOutputResID +#define COMP_TYPE kAudioUnitComponentType +#define COMP_SUBTYPE kAudioUnitOutputSubType +#define COMP_MANUF kAudioUnitAudioHardwareOutputSubSubType +#define VERSION 0x00010000 +#define NAME "AudioHALOutput" +#define DESCRIPTION "Audio hardware output AudioUnit" +#define ENTRY_POINT "AUHALEntry" +*/ +#define UseExtendedThingResource 1 + +#include + +// this is a define used to indicate that a component has no static data that would mean +// that no more than one instance could be open at a time - never been true for AUs +#ifndef cmpThreadSafeOnMac +#define cmpThreadSafeOnMac 0x10000000 +#endif + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +resource 'STR ' (RES_ID, purgeable) { + NAME +}; + +resource 'STR ' (RES_ID + 1, purgeable) { + DESCRIPTION +}; + +resource 'dlle' (RES_ID) { + ENTRY_POINT +}; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +resource 'thng' (RES_ID, NAME) { + COMP_TYPE, + COMP_SUBTYPE, + COMP_MANUF, + 0, 0, 0, 0, // no 68K + 'STR ', RES_ID, + 'STR ', RES_ID + 1, + 0, 0, /* icon */ + VERSION, + componentHasMultiplePlatforms | componentDoAutoVersion, + 0, + { + #if defined(ppc_YES) + cmpThreadSafeOnMac, + 'dlle', RES_ID, platformPowerPCNativeEntryPoint + #define NeedLeadingComma 1 + #endif + #if defined(ppc64_YES) + #if defined(NeedLeadingComma) + , + #endif + cmpThreadSafeOnMac, + 'dlle', RES_ID, platformPowerPC64NativeEntryPoint + #define NeedLeadingComma 1 + #endif + #if defined(i386_YES) + #if defined(NeedLeadingComma) + , + #endif + cmpThreadSafeOnMac, + 'dlle', RES_ID, platformIA32NativeEntryPoint + #define NeedLeadingComma 1 + #endif + #if defined(x86_64_YES) + #if defined(NeedLeadingComma) + , + #endif + cmpThreadSafeOnMac, + 'dlle', RES_ID, 8 + #define NeedLeadingComma 1 + #endif + } +}; + +#undef RES_ID +#undef COMP_TYPE +#undef COMP_SUBTYPE +#undef COMP_MANUF +#undef VERSION +#undef NAME +#undef DESCRIPTION +#undef ENTRY_POINT +#undef NeedLeadingComma diff --git a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp index 647346ca9e..cad491ca83 100644 --- a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp +++ b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp @@ -29,7 +29,6 @@ #include "../utility/juce_IncludeModuleHeaders.h" #include "../utility/juce_FakeMouseMoveGenerator.h" #include "../utility/juce_WindowsHooks.h" -#include "../utility/juce_PluginBusUtilities.h" #include #include diff --git a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h index b5b39e44cd..e69dbb66ff 100644 --- a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h +++ b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h @@ -93,16 +93,7 @@ public: #endif jassert (processor != nullptr); // Your createPluginFilter() function must return a valid object! - // try to disable sidechain and aux buses - const int numInBuses = processor->busArrangement.inputBuses. size(); - const int numOutBuses = processor->busArrangement.outputBuses.size(); - - for (int busIdx = 1; busIdx < numInBuses; ++busIdx) - processor->setPreferredBusArrangement (true, busIdx, AudioChannelSet::disabled()); - - for (int busIdx = 1; busIdx < numOutBuses; ++busIdx) - processor->setPreferredBusArrangement (false, busIdx, AudioChannelSet::disabled()); - + processor->disableNonMainBuses(); processor->setRateAndBufferSizeDetails(44100, 512); } diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp index b5b7116a55..82f42a19ec 100644 --- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp @@ -84,7 +84,8 @@ #include "../utility/juce_IncludeModuleHeaders.h" #include "../utility/juce_FakeMouseMoveGenerator.h" #include "../utility/juce_WindowsHooks.h" -#include "../utility/juce_PluginBusUtilities.h" + +#include "../../juce_audio_processors/format_types/juce_VSTCommon.h" #ifdef _MSC_VER #pragma pack (pop) @@ -255,7 +256,6 @@ public: sampleRate (44100.f), blockSize (1024), filter (af), - busUtils (*filter, true, 64), chunkMemoryTime (0), isProcessing (false), isBypassed (false), @@ -270,28 +270,20 @@ public: #endif hostWindow (0) { - busUtils.init(); - // VST-2 does not support disabling buses: so always enable all of them - if (busUtils.hasDynamicInBuses() || busUtils.hasDynamicOutBuses()) - busUtils.enableAllBuses(); + filter->enableAllBuses(); - { - // Using the legacy Projucer field? Then keep the maximum number of channels - // as the default plug-in layout. Otherwise, leave it up to the user - // which default layout the prefer. - #ifndef JucePlugin_PreferredChannelConfigurations - PluginBusUtilities::ScopedBusRestorer busRestorer (busUtils); - #endif - - findMaxTotalChannels (maxNumInChannels, maxNumOutChannels); - bool success = setBusArrangementFromTotalChannelNum (maxNumInChannels, maxNumOutChannels); - ignoreUnused (success); - - // please file a bug if you hit this assertion! - jassert (maxNumInChannels == busUtils.findTotalNumChannels (true) && success - && maxNumOutChannels == busUtils.findTotalNumChannels (false)); - } + findMaxTotalChannels (maxNumInChannels, maxNumOutChannels); + + // You must at least have some channels + jassert (filter->isMidiEffect() || (maxNumInChannels > 0 || maxNumOutChannels > 0)); + + if (filter->isMidiEffect()) + maxNumInChannels = maxNumOutChannels = 2; + + #ifdef JucePlugin_PreferredChannelConfigurations + filter->setPlayConfigDetails (maxNumInChannels, maxNumOutChannels, 44100.0, 1024); + #endif filter->setRateAndBufferSizeDetails (0, 0); filter->setPlayHead (this); @@ -374,6 +366,8 @@ public: void internalProcessReplacing (FloatType** inputs, FloatType** outputs, int32 numSamples, VstTempBuffers& tmpBuffers) { + const bool isMidiEffect = filter->isMidiEffect(); + if (firstProcessCallback) { firstProcessCallback = false; @@ -399,7 +393,7 @@ public: #endif } - #if JUCE_DEBUG && ! JucePlugin_ProducesMidiOutput + #if JUCE_DEBUG && ! (JucePlugin_ProducesMidiOutput || JucePlugin_IsMidiEffect) const int numMidiEventsComingIn = midiEvents.getNumEvents(); #endif @@ -459,7 +453,7 @@ public: { const int numChannels = jmax (numIn, numOut); - AudioBuffer chans (tmpBuffers.channels, numChannels, numSamples); + AudioBuffer chans (tmpBuffers.channels, isMidiEffect ? 0 : numChannels, numSamples); if (isBypassed) filter->processBlockBypassed (chans, midiEvents); @@ -476,7 +470,7 @@ public: if (! midiEvents.isEmpty()) { - #if JucePlugin_ProducesMidiOutput + #if JucePlugin_ProducesMidiOutput || JucePlugin_IsMidiEffect const int numEvents = midiEvents.getNumEvents(); outgoingEvents.ensureSize (numEvents); @@ -753,53 +747,51 @@ public: bool getPinProperties (VstPinInfo& properties, bool direction, int index) const { + if (filter->isMidiEffect()) + return false; + + int channelIdx, busIdx; + // fill with default - properties.flags = vstPinInfoFlagValid; + properties.flags = 0; properties.text[0] = 0; properties.shortText[0] = 0; properties.configurationType = vstSpeakerConfigTypeEmpty; - // index refers to the absolute index when combining all channels of every bus - if (index >= (direction ? vstEffect.numInputChannels : vstEffect.numOutputChannels)) - return false; - - const int n = busUtils.getBusCount(direction); - int busIdx; - for (busIdx = 0; busIdx < n; ++busIdx) + if ((channelIdx = filter->getOffsetInBusBufferForAbsoluteChannelIndex (direction, index, busIdx)) >= 0) { - const int numChans = busUtils.getNumChannels (direction, busIdx); - if (index < numChans) - break; + AudioProcessor::Bus& bus = *filter->getBus (direction, busIdx); + const AudioChannelSet& channelSet = bus.getCurrentLayout(); + AudioChannelSet::ChannelType channelType = channelSet.getTypeOfChannel (channelIdx); - index -= numChans; - } - - if (busIdx >= n) - return true; + properties.flags = vstPinInfoFlagIsActive | vstPinInfoFlagIsStereo; + properties.configurationType = SpeakerMappings::channelSetToVstArrangementType (channelSet); + String label = bus.getName(); - const AudioProcessor::AudioProcessorBus& busInfo = busUtils.getFilterBus (direction).getReference (busIdx); - - String channelName = busInfo.name; - #ifdef JucePlugin_PreferredChannelConfigurations - channelName += String (" ") + String (index); - #else - if (busUtils.getNumChannels (direction, busIdx) > 1) - channelName += String (" ") + AudioChannelSet::getAbbreviatedChannelTypeName (busInfo.channels.getTypeOfChannel (index)); - #endif - - channelName.copyToUTF8 (properties.text, (size_t) (vstMaxParameterOrPinLabelLength + 1)); - channelName.copyToUTF8 (properties.shortText, (size_t) (vstMaxParameterOrPinShortLabelLength + 1)); + #ifdef JucePlugin_PreferredChannelConfigurations + label += String (" ") + String (channelIdx); + #else + if (channelSet.size() > 1) + label += String (" ") + AudioChannelSet::getAbbreviatedChannelTypeName (channelType); + #endif - properties.flags = vstPinInfoFlagValid | vstPinInfoFlagIsActive; - properties.configurationType = SpeakerMappings::channelSetToVstArrangementType (busInfo.channels); + label.copyToUTF8 (properties.text, (size_t) (vstMaxParameterOrPinLabelLength + 1)); + label.copyToUTF8 (properties.shortText, (size_t) (vstMaxParameterOrPinShortLabelLength + 1)); - if (properties.configurationType == vstSpeakerConfigTypeEmpty) - properties.flags &= vstPinInfoFlagIsActive; + if (channelType == AudioChannelSet::left + || channelType == AudioChannelSet::leftSurround + || channelType == AudioChannelSet::leftCentre + || channelType == AudioChannelSet::leftSurroundSide + || channelType == AudioChannelSet::topFrontLeft + || channelType == AudioChannelSet::topRearLeft + || channelType == AudioChannelSet::leftSurroundRear + || channelType == AudioChannelSet::wideLeft) + properties.flags |= vstPinInfoFlagIsStereo; - if (busInfo.channels.size() == 2) - properties.flags |= vstPinInfoFlagIsStereo; + return true; + } - return true; + return false; } //============================================================================== @@ -829,6 +821,24 @@ public: static AudioChannelSet vstArrangementTypeToChannelSet (const VstSpeakerConfiguration& arr) { + if (arr.type == vstSpeakerConfigTypeEmpty) return AudioChannelSet::disabled(); + else if (arr.type == vstSpeakerConfigTypeMono) return AudioChannelSet::mono(); + else if (arr.type == vstSpeakerConfigTypeLR) return AudioChannelSet::stereo(); + else if (arr.type == vstSpeakerConfigTypeLRC) return AudioChannelSet::createLCR(); + else if (arr.type == vstSpeakerConfigTypeLRS) return AudioChannelSet::createLRS(); + else if (arr.type == vstSpeakerConfigTypeLRCS) return AudioChannelSet::createLCRS(); + else if (arr.type == vstSpeakerConfigTypeLRCLsRs) return AudioChannelSet::create5point0(); + else if (arr.type == vstSpeakerConfigTypeLRCLfeLsRs) return AudioChannelSet::create5point1(); + else if (arr.type == vstSpeakerConfigTypeLRCLsRsCs) return AudioChannelSet::create6point0(); + else if (arr.type == vstSpeakerConfigTypeLRCLfeLsRsCs) return AudioChannelSet::create6point1(); + else if (arr.type == vstSpeakerConfigTypeLRLsRsSlSr) return AudioChannelSet::create6point0Music(); + else if (arr.type == vstSpeakerConfigTypeLRLfeLsRsSlSr) return AudioChannelSet::create6point1Music(); + else if (arr.type == vstSpeakerConfigTypeLRCLsRsSlSr) return AudioChannelSet::create7point0(); + else if (arr.type == vstSpeakerConfigTypeLRCLsRsLcRc) return AudioChannelSet::create7point0SDDS(); + else if (arr.type == vstSpeakerConfigTypeLRCLfeLsRsSlSr) return AudioChannelSet::create7point1(); + else if (arr.type == vstSpeakerConfigTypeLRCLfeLsRsLcRc) return AudioChannelSet::create7point1SDDS(); + else if (arr.type == vstSpeakerConfigTypeLRLsRs) return AudioChannelSet::quadraphonic(); + for (const Mapping* m = getMappings(); m->vst2 != vstSpeakerConfigTypeEmpty; ++m) { if (m->vst2 == arr.type) @@ -847,6 +857,24 @@ public: static int32 channelSetToVstArrangementType (AudioChannelSet channels) { + if (channels == AudioChannelSet::disabled()) return vstSpeakerConfigTypeEmpty; + else if (channels == AudioChannelSet::mono()) return vstSpeakerConfigTypeMono; + else if (channels == AudioChannelSet::stereo()) return vstSpeakerConfigTypeLR; + else if (channels == AudioChannelSet::createLCR()) return vstSpeakerConfigTypeLRC; + else if (channels == AudioChannelSet::createLRS()) return vstSpeakerConfigTypeLRS; + else if (channels == AudioChannelSet::createLCRS()) return vstSpeakerConfigTypeLRCS; + else if (channels == AudioChannelSet::create5point0()) return vstSpeakerConfigTypeLRCLsRs; + else if (channels == AudioChannelSet::create5point1()) return vstSpeakerConfigTypeLRCLfeLsRs; + else if (channels == AudioChannelSet::create6point0()) return vstSpeakerConfigTypeLRCLsRsCs; + else if (channels == AudioChannelSet::create6point1()) return vstSpeakerConfigTypeLRCLfeLsRsCs; + else if (channels == AudioChannelSet::create6point0Music()) return vstSpeakerConfigTypeLRLsRsSlSr; + else if (channels == AudioChannelSet::create6point1Music()) return vstSpeakerConfigTypeLRLfeLsRsSlSr; + else if (channels == AudioChannelSet::create7point0()) return vstSpeakerConfigTypeLRCLsRsSlSr; + else if (channels == AudioChannelSet::create7point0SDDS()) return vstSpeakerConfigTypeLRCLsRsLcRc; + else if (channels == AudioChannelSet::create7point1()) return vstSpeakerConfigTypeLRCLfeLsRsSlSr; + else if (channels == AudioChannelSet::create7point1SDDS()) return vstSpeakerConfigTypeLRCLfeLsRsLcRc; + else if (channels == AudioChannelSet::quadraphonic()) return vstSpeakerConfigTypeLRLsRs; + Array chans (channels.getChannelTypes()); if (channels == AudioChannelSet::disabled()) @@ -881,31 +909,31 @@ public: { vstSpeakerConfigTypeLR, { left, right, unknown } }, { vstSpeakerConfigTypeLsRs, { leftSurround, rightSurround, unknown } }, { vstSpeakerConfigTypeLcRc, { leftCentre, rightCentre, unknown } }, - { vstSpeakerConfigTypeSlSr, { leftRearSurround, rightRearSurround, unknown } }, - { vstSpeakerConfigTypeCLfe, { centre, subbass, unknown } }, + { vstSpeakerConfigTypeSlSr, { leftSurroundRear, rightSurroundRear, unknown } }, + { vstSpeakerConfigTypeCLfe, { centre, LFE, unknown } }, { vstSpeakerConfigTypeLRC, { left, right, centre, unknown } }, { vstSpeakerConfigTypeLRS, { left, right, surround, unknown } }, - { vstSpeakerConfigTypeLRCLfe, { left, right, centre, subbass, unknown } }, - { vstSpeakerConfigTypeLRLfeS, { left, right, subbass, surround, unknown } }, + { vstSpeakerConfigTypeLRCLfe, { left, right, centre, LFE, unknown } }, + { vstSpeakerConfigTypeLRLfeS, { left, right, LFE, surround, unknown } }, { vstSpeakerConfigTypeLRCS, { left, right, centre, surround, unknown } }, { vstSpeakerConfigTypeLRLsRs, { left, right, leftSurround, rightSurround, unknown } }, - { vstSpeakerConfigTypeLRCLfeS, { left, right, centre, subbass, surround, unknown } }, - { vstSpeakerConfigTypeLRLfeLsRs, { left, right, subbass, leftSurround, rightSurround, unknown } }, + { vstSpeakerConfigTypeLRCLfeS, { left, right, centre, LFE, surround, unknown } }, + { vstSpeakerConfigTypeLRLfeLsRs, { left, right, LFE, leftSurround, rightSurround, unknown } }, { vstSpeakerConfigTypeLRCLsRs, { left, right, centre, leftSurround, rightSurround, unknown } }, - { vstSpeakerConfigTypeLRCLfeLsRs, { left, right, centre, subbass, leftSurround, rightSurround, unknown } }, + { vstSpeakerConfigTypeLRCLfeLsRs, { left, right, centre, LFE, leftSurround, rightSurround, unknown } }, { vstSpeakerConfigTypeLRCLsRsCs, { left, right, centre, leftSurround, rightSurround, surround, unknown } }, - { vstSpeakerConfigTypeLRLsRsSlSr, { left, right, leftSurround, rightSurround, leftRearSurround, rightRearSurround, unknown } }, - { vstSpeakerConfigTypeLRCLfeLsRsCs, { left, right, centre, subbass, leftSurround, rightSurround, surround, unknown } }, - { vstSpeakerConfigTypeLRLfeLsRsSlSr, { left, right, subbass, leftSurround, rightSurround, leftRearSurround, rightRearSurround, unknown } }, + { vstSpeakerConfigTypeLRLsRsSlSr, { left, right, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, + { vstSpeakerConfigTypeLRCLfeLsRsCs, { left, right, centre, LFE, leftSurround, rightSurround, surround, unknown } }, + { vstSpeakerConfigTypeLRLfeLsRsSlSr, { left, right, LFE, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, { vstSpeakerConfigTypeLRCLsRsLcRc, { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, - { vstSpeakerConfigTypeLRCLsRsSlSr, { left, right, centre, leftSurround, rightSurround, leftRearSurround, rightRearSurround, unknown } }, - { vstSpeakerConfigTypeLRCLfeLsRsLcRc, { left, right, centre, subbass, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, - { vstSpeakerConfigTypeLRCLfeLsRsSlSr, { left, right, centre, subbass, leftSurround, rightSurround, leftRearSurround, rightRearSurround, unknown } }, + { vstSpeakerConfigTypeLRCLsRsSlSr, { left, right, centre, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, + { vstSpeakerConfigTypeLRCLfeLsRsLcRc, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, + { vstSpeakerConfigTypeLRCLfeLsRsSlSr, { left, right, centre, LFE, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, { vstSpeakerConfigTypeLRCLsRsLcRcCs, { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, - { vstSpeakerConfigTypeLRCLsRsCsSlSr, { left, right, centre, leftSurround, rightSurround, surround, leftRearSurround, rightRearSurround, unknown } }, - { vstSpeakerConfigTypeLRCLfeLsRsLcRcCs, { left, right, centre, subbass, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, - { vstSpeakerConfigTypeLRCLfeLsRsCsSlSr, { left, right, centre, subbass, leftSurround, rightSurround, surround, leftRearSurround, rightRearSurround, unknown } }, - { vstSpeakerConfigTypeLRCLfeLsRsTflTfcTfrTrlTrrLfe2, { left, right, centre, subbass, leftSurround, rightSurround, topFrontLeft, topFrontCentre, topFrontRight, topRearLeft, topRearRight, subbass2, unknown } }, + { vstSpeakerConfigTypeLRCLsRsCsSlSr, { left, right, centre, leftSurround, rightSurround, surround, leftSurroundRear, rightSurroundRear, unknown } }, + { vstSpeakerConfigTypeLRCLfeLsRsLcRcCs, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, + { vstSpeakerConfigTypeLRCLfeLsRsCsSlSr, { left, right, centre, LFE, leftSurround, rightSurround, surround, leftSurroundRear, rightSurroundRear, unknown } }, + { vstSpeakerConfigTypeLRCLfeLsRsTflTfcTfrTrlTrrLfe2, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontCentre, topFrontRight, topRearLeft, topRearRight, LFE2, unknown } }, { vstSpeakerConfigTypeEmpty, { unknown } } }; @@ -919,14 +947,14 @@ public: case AudioChannelSet::left: return vstIndividualSpeakerTypeLeft; case AudioChannelSet::right: return vstIndividualSpeakerTypeRight; case AudioChannelSet::centre: return vstIndividualSpeakerTypeCentre; - case AudioChannelSet::subbass: return vstIndividualSpeakerTypeSubbass; + case AudioChannelSet::LFE: return vstIndividualSpeakerTypeLFE; case AudioChannelSet::leftSurround: return vstIndividualSpeakerTypeLeftSurround; case AudioChannelSet::rightSurround: return vstIndividualSpeakerTypeRightSurround; case AudioChannelSet::leftCentre: return vstIndividualSpeakerTypeLeftCentre; case AudioChannelSet::rightCentre: return vstIndividualSpeakerTypeRightCentre; case AudioChannelSet::surround: return vstIndividualSpeakerTypeSurround; - case AudioChannelSet::leftRearSurround: return vstIndividualSpeakerTypeLeftRearSurround; - case AudioChannelSet::rightRearSurround: return vstIndividualSpeakerTypeRightRearSurround; + case AudioChannelSet::leftSurroundRear: return vstIndividualSpeakerTypeLeftRearSurround; + case AudioChannelSet::rightSurroundRear: return vstIndividualSpeakerTypeRightRearSurround; case AudioChannelSet::topMiddle: return vstIndividualSpeakerTypeTopMiddle; case AudioChannelSet::topFrontLeft: return vstIndividualSpeakerTypeTopFrontLeft; case AudioChannelSet::topFrontCentre: return vstIndividualSpeakerTypeTopFrontCentre; @@ -934,7 +962,7 @@ public: case AudioChannelSet::topRearLeft: return vstIndividualSpeakerTypeTopRearLeft; case AudioChannelSet::topRearCentre: return vstIndividualSpeakerTypeTopRearCentre; case AudioChannelSet::topRearRight: return vstIndividualSpeakerTypeTopRearRight; - case AudioChannelSet::subbass2: return vstIndividualSpeakerTypeSubbass2; + case AudioChannelSet::LFE2: return vstIndividualSpeakerTypeLFE2; default: break; } @@ -948,14 +976,14 @@ public: case vstIndividualSpeakerTypeLeft: return AudioChannelSet::left; case vstIndividualSpeakerTypeRight: return AudioChannelSet::right; case vstIndividualSpeakerTypeCentre: return AudioChannelSet::centre; - case vstIndividualSpeakerTypeSubbass: return AudioChannelSet::subbass; + case vstIndividualSpeakerTypeLFE: return AudioChannelSet::LFE; case vstIndividualSpeakerTypeLeftSurround: return AudioChannelSet::leftSurround; case vstIndividualSpeakerTypeRightSurround: return AudioChannelSet::rightSurround; case vstIndividualSpeakerTypeLeftCentre: return AudioChannelSet::leftCentre; case vstIndividualSpeakerTypeRightCentre: return AudioChannelSet::rightCentre; case vstIndividualSpeakerTypeSurround: return AudioChannelSet::surround; - case vstIndividualSpeakerTypeLeftRearSurround: return AudioChannelSet::leftRearSurround; - case vstIndividualSpeakerTypeRightRearSurround: return AudioChannelSet::rightRearSurround; + case vstIndividualSpeakerTypeLeftRearSurround: return AudioChannelSet::leftSurroundRear; + case vstIndividualSpeakerTypeRightRearSurround: return AudioChannelSet::rightSurroundRear; case vstIndividualSpeakerTypeTopMiddle: return AudioChannelSet::topMiddle; case vstIndividualSpeakerTypeTopFrontLeft: return AudioChannelSet::topFrontLeft; case vstIndividualSpeakerTypeTopFrontCentre: return AudioChannelSet::topFrontCentre; @@ -963,7 +991,7 @@ public: case vstIndividualSpeakerTypeTopRearLeft: return AudioChannelSet::topRearLeft; case vstIndividualSpeakerTypeTopRearCentre: return AudioChannelSet::topRearCentre; case vstIndividualSpeakerTypeTopRearRight: return AudioChannelSet::topRearRight; - case vstIndividualSpeakerTypeSubbass2: return AudioChannelSet::subbass2; + case vstIndividualSpeakerTypeLFE2: return AudioChannelSet::LFE2; default: break; } @@ -1327,7 +1355,6 @@ private: int32 blockSize; VstEffectInterface vstEffect; AudioProcessor* filter; - PluginBusUtilities busUtils; juce::MemoryBlock chunkMemory; juce::uint32 chunkMemoryTime; ScopedPointer editorComp; @@ -1340,6 +1367,8 @@ private: VstTempBuffers doubleTempBuffers; int maxNumInChannels, maxNumOutChannels; + HeapBlock cachedInArrangement, cachedOutArrangement; + #if JUCE_MAC void* hostWindow; #elif JUCE_LINUX @@ -1418,213 +1447,32 @@ private: //============================================================================== void findMaxTotalChannels (int& maxTotalIns, int& maxTotalOuts) { - setMaxChannelsOnAllBuses (true); - setMaxChannelsOnAllBuses (false); - - maxTotalIns = busUtils.findTotalNumChannels (true); - maxTotalOuts = busUtils.findTotalNumChannels (false); - } - - void setMaxChannelsOnAllBuses (bool isInput) - { - const int n = busUtils.getBusCount (isInput); - - for (int i = 0; i < n; ++i) - { - int ch = busUtils.findMaxNumberOfChannelsForBus (isInput, i); - - if (ch == -1) - { - // VST-2 requires a maximum number of channels. If you are hitting this assertion - // then make sure that your setPreferredBusArrangement only accepts layouts - // up to a maximum number of channels - jassertfalse; - - // do something sensible if the above assertions was hit - ch = busUtils.getDefaultLayoutForBus (isInput, i).size(); - } - - AudioChannelSet set = - busUtils.getDefaultLayoutForChannelNumAndBus (isInput, i, ch); - - bool success = filter->setPreferredBusArrangement (isInput, i, set); - ignoreUnused (success); - - // If you are hitting this assertsion then please file bug! - jassert ((! set.isDisabled()) && success); - } - } - - - //============================================================================== - void resetAuxChannelsToDefaultLayout (bool isInput) const - { - // set side-chain and aux channels to their default layout - for (int busIdx = 1; busIdx < busUtils.getBusCount (isInput); ++busIdx) - { - bool success = filter->setPreferredBusArrangement (isInput, busIdx, busUtils.getDefaultLayoutForBus (isInput, busIdx)); - - // VST 2 only supports a static channel layout on aux/sidechain channels - // You must at least support the default layout regardless of the layout of the main bus. - // If this is a problem for your plug-in, then consider using VST-3. - jassert (success); - ignoreUnused (success); - } - } - - bool setBusArrangementFromTotalChannelNum (const int numInChannels, const int numOutChannels) - { - PluginBusUtilities::ScopedBusRestorer busRestorer (busUtils); - const int numIns = busUtils.getBusCount (true); - const int numOuts = busUtils.getBusCount (false); - - const int n = numIns + numOuts; - HeapBlock config (static_cast (n), true); - HeapBlock maxChans (static_cast (n), true); - - for (int i = 0; i < numIns; ++i) - maxChans[i] = busUtils.findMaxNumberOfChannelsForBus (true, i, numInChannels); - - for (int i = 0; i < numOuts; ++i) - maxChans[i + numIns] = busUtils.findMaxNumberOfChannelsForBus (false, i, numOutChannels); - - const int* inConfig = config.getData(); - const int* outConfig = config.getData() + numIns; - - #if JUCE_DEBUG - bool firstMatch = true; - AudioProcessor::AudioBusArrangement saveFirstMatch; - #endif + #if defined (JucePlugin_MaxNumInputChannels) && defined (JucePlugin_MaxNumOutputChannels) + maxTotalIns = JucePlugin_MaxNumInputChannels; + maxTotalOuts = JucePlugin_MaxNumOutputChannels; + #else + const int numInputBuses = filter->getBusCount (true); + const int numOutputBuses = filter->getBusCount (false); - for (int i = 0; i < n;) + if (numInputBuses > 1 || numOutputBuses > 1) { - if (sumOfConfig (inConfig, numIns) == numInChannels - && sumOfConfig (outConfig, numOuts) == numOutChannels) - { - if (applyConfiguration (inConfig, outConfig)) - { - #if JUCE_DEBUG - if (! firstMatch) - { - // Unfortunately, VST-2 requires that there is a unique plug-in bus - // arrangement for every x,y pair where x,y is the total number of - // input, output channels respectively. - jassertfalse; + maxTotalIns = maxTotalOuts = 0; - busUtils.restoreBusArrangement (saveFirstMatch); - return true; - } + for (int i = 0; i < numInputBuses; ++i) + maxTotalIns += filter->getChannelCountOfBus (true, i); - saveFirstMatch = filter->busArrangement; - firstMatch = false; - #else - busRestorer.release(); - return true; - #endif - } - } - - for (i = 0; i < n; ++i) - if ((config[i] = maxChans[i] ? (config[i] + 1) % maxChans[i] : 0) > 0) - break; + for (int i = 0; i < numOutputBuses; ++i) + maxTotalOuts += filter->getChannelCountOfBus (false, i); } - - #if JUCE_DEBUG - if (! firstMatch) + else { - busRestorer.release(); - busUtils.restoreBusArrangement (saveFirstMatch); - return true; + maxTotalIns = numInputBuses > 0 ? filter->getBus (true, 0)->getMaxSupportedChannels () : 0; + maxTotalOuts = numOutputBuses > 0 ? filter->getBus (false, 0)->getMaxSupportedChannels () : 0; } #endif - - return false; - } - - bool setBusConfiguration (bool isInput, const int config[], const int n) - { - Array& busArray = isInput ? filter->busArrangement.inputBuses - : filter->busArrangement.outputBuses; - - int idx; - for (idx = 0; idx < n; ++idx) - { - if (busArray.getReference (idx).channels.size() == (config [idx] + 1)) - continue; - - AudioChannelSet set; - if ((set = busUtils.getDefaultLayoutForChannelNumAndBus (isInput, idx, config [idx] + 1)).isDisabled()) - break; - - if (! filter->setPreferredBusArrangement (isInput, idx, set)) - break; - } - - return (idx >= n); - } - - bool configurationMatches (bool isInput, const int config[], const int n) - { - Array& busArray = isInput ? filter->busArrangement.inputBuses - : filter->busArrangement.outputBuses; - - int idx; - for (idx = 0; idx < n; ++idx) - if (busArray.getReference (idx).channels.size() != (config [idx] + 1)) - break; - - return (idx >= n); - } - - bool applyConfiguration (const int inConfig[], const int outConfig[]) - { - const int numIns = busUtils.getBusCount (true); - const int numOuts = busUtils.getBusCount (false); - - if (! setBusConfiguration (true, inConfig, numIns)) - return false; - - if (! setBusConfiguration (false, outConfig, numOuts)) - return false; - - // re-check configuration - if (configurationMatches (true, inConfig, numIns) && configurationMatches (false, outConfig, numOuts)) - return true; - - return false; - } - - void allocateSpeakerArrangement (VstSpeakerConfiguration** arrangement, int32 nChannels) - { - if (*arrangement) - delete [] (char*) *arrangement; - - // The last member of a full VstSpeakerConfiguration struct is an array of 8 - // VstIndividualSpeakerInfo. Here we only allocate space for channels we will - // actually use. - const size_t allocationSizeToSubtract = static_cast (8 - nChannels) * sizeof (VstIndividualSpeakerInfo); - const size_t allocationSize = sizeof (VstSpeakerConfiguration) - allocationSizeToSubtract; - char* newAllocation = new char[allocationSize]; - memset (newAllocation, 0, allocationSize); - - *arrangement = (VstSpeakerConfiguration*) newAllocation; - (*arrangement)->numberOfChannels = nChannels; - } - - //============================================================================== - bool pluginHasSidechainsOrAuxs() const - { - return (busUtils.getBusCount (true) > 1 || busUtils.getBusCount (false) > 1); } - static int sumOfConfig (const int config[], int num) noexcept - { - int retval = 0; - for (int i = 0; i < num; ++i) - retval += (config [i] + 1); - - return retval; - } + bool pluginHasSidechainsOrAuxs() const { return (filter->getBusCount (true) > 1 || filter->getBusCount (false) > 1); } //============================================================================== /** Host to plug-in calls. */ @@ -1907,17 +1755,14 @@ private: pointer_sized_int handleSetSpeakerConfiguration (VstOpCodeArguments args) { - VstSpeakerConfiguration* pluginInput = reinterpret_cast (args.value); - VstSpeakerConfiguration* pluginOutput = (VstSpeakerConfiguration*) args.ptr; - - const int numIns = busUtils.getBusCount (true); - const int numOuts = busUtils.getBusCount (false);; + VstSpeakerConfiguration* pluginInput = reinterpret_cast (args.value); + VstSpeakerConfiguration* pluginOutput = reinterpret_cast (args.ptr); - if (pluginInput != nullptr && numIns == 0) + if (pluginHasSidechainsOrAuxs() || filter->isMidiEffect()) return 0; - if (pluginOutput != nullptr && numOuts == 0) - return 0; + const int numIns = filter->getBusCount (true); + const int numOuts = filter->getBusCount (false); if (pluginInput != nullptr && pluginInput->type >= 0) { @@ -1933,52 +1778,41 @@ private: return 0; } - if (numIns > 1 || numOuts > 1) - { - int newNumInChannels = (pluginInput != nullptr && pluginInput-> numberOfChannels >= 0) - ? pluginInput-> numberOfChannels - : busUtils.findTotalNumChannels (true); - int newNumOutChannels = (pluginOutput != nullptr && pluginOutput->numberOfChannels >= 0) - ? pluginOutput->numberOfChannels - : busUtils.findTotalNumChannels (false); + if (pluginInput != nullptr && pluginInput->numberOfChannels > 0 && numIns == 0) + return 0; - newNumInChannels = jmin (newNumInChannels, maxNumInChannels); - newNumOutChannels = jmin (newNumOutChannels, maxNumOutChannels); + if (pluginOutput != nullptr && pluginOutput->numberOfChannels > 0 && numOuts == 0) + return 0; - if (! setBusArrangementFromTotalChannelNum (newNumInChannels, newNumOutChannels)) + if (pluginInput != nullptr && pluginInput->type >= 0) + { + // inconsistent request? + if (SpeakerMappings::vstArrangementTypeToChannelSet (*pluginInput).size() != pluginInput->numberOfChannels) return 0; } - else - { - PluginBusUtilities::ScopedBusRestorer busRestorer (busUtils); - AudioChannelSet inLayoutType; - if (pluginInput != nullptr && pluginInput-> numberOfChannels >= 0) - { - inLayoutType = SpeakerMappings::vstArrangementTypeToChannelSet (*pluginInput); - if (busUtils.getChannelSet (true, 0) != inLayoutType) - if (! filter->setPreferredBusArrangement (true, 0, inLayoutType)) - return 0; - } + if (pluginOutput != nullptr && pluginOutput->type >= 0) + { + // inconsistent request? + if (SpeakerMappings::vstArrangementTypeToChannelSet (*pluginOutput).size() != pluginOutput->numberOfChannels) + return 0; + } - if (pluginOutput != nullptr && pluginOutput->numberOfChannels >= 0) - { - AudioChannelSet newType = SpeakerMappings::vstArrangementTypeToChannelSet (*pluginOutput); + AudioProcessor::BusesLayout layouts = filter->getBusesLayout(); - if (busUtils.getChannelSet (false, 0) != newType) - if (! filter->setPreferredBusArrangement (false, 0, newType)) - return 0; + if (pluginInput != nullptr && pluginInput-> numberOfChannels >= 0 && numIns > 0) + layouts.getChannelSet (true, 0) = SpeakerMappings::vstArrangementTypeToChannelSet (*pluginInput); - // re-check the input - if ((! inLayoutType.isDisabled()) && busUtils.getChannelSet (true, 0) != inLayoutType) - return 0; + if (pluginOutput != nullptr && pluginOutput->numberOfChannels >= 0 && numOuts > 0) + layouts.getChannelSet (false, 0) = SpeakerMappings::vstArrangementTypeToChannelSet (*pluginOutput); - busRestorer.release(); - } - } + #ifdef JucePlugin_PreferredChannelConfigurations + short configs[][2] = {JucePlugin_PreferredChannelConfigurations}; + if (! AudioProcessor::containsLayout (layouts, configs)) + return 0; + #endif - filter->setRateAndBufferSizeDetails(0, 0); - return 1; + return filter->setBusesLayout (layouts) ? 1 : 0; } pointer_sized_int handleSetBypass (VstOpCodeArguments args) @@ -2094,30 +1928,25 @@ private: pointer_sized_int handleGetSpeakerConfiguration (VstOpCodeArguments args) { - VstSpeakerConfiguration** pluginInput = reinterpret_cast (args.value); - VstSpeakerConfiguration** pluginOutput = (VstSpeakerConfiguration**) args.ptr; - *pluginInput = nullptr; - *pluginOutput = nullptr; + VstSpeakerConfiguration** pluginInput = reinterpret_cast (args.value); + VstSpeakerConfiguration** pluginOutput = reinterpret_cast (args.ptr); - allocateSpeakerArrangement (pluginInput, busUtils.findTotalNumChannels (true)); - allocateSpeakerArrangement (pluginOutput, busUtils.findTotalNumChannels (false)); + if (pluginHasSidechainsOrAuxs() || filter->isMidiEffect()) + return false; - if (pluginHasSidechainsOrAuxs()) - { - int numIns = busUtils.findTotalNumChannels (true); - int numOuts = busUtils.findTotalNumChannels (false); + AudioChannelSet inputLayout = filter->getChannelLayoutOfBus (true, 0); + AudioChannelSet outputLayout = filter->getChannelLayoutOfBus (false, 0); - AudioChannelSet layout = AudioChannelSet::canonicalChannelSet (numIns); - SpeakerMappings::channelSetToVstArrangement (layout, **pluginInput); + const std::size_t speakerBaseSize = sizeof (VstSpeakerConfiguration) - (sizeof (VstIndividualSpeakerInfo) * 8); - layout = AudioChannelSet::canonicalChannelSet (numOuts); - SpeakerMappings::channelSetToVstArrangement (layout, **pluginOutput); - } - else - { - SpeakerMappings::channelSetToVstArrangement (busUtils.getChannelSet (true, 0), **pluginInput); - SpeakerMappings::channelSetToVstArrangement (busUtils.getChannelSet (false, 0), **pluginOutput); - } + cachedInArrangement .malloc (speakerBaseSize + (static_cast (inputLayout. size()) * sizeof (VstSpeakerConfiguration)), 1); + cachedOutArrangement.malloc (speakerBaseSize + (static_cast (outputLayout.size()) * sizeof (VstSpeakerConfiguration)), 1); + + *pluginInput = cachedInArrangement. getData(); + *pluginOutput = cachedOutArrangement.getData(); + + SpeakerMappings::channelSetToVstArrangement (filter->getChannelLayoutOfBus (true, 0), **pluginInput); + SpeakerMappings::channelSetToVstArrangement (filter->getChannelLayoutOfBus (false, 0), **pluginOutput); return 1; } diff --git a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp index 345addae77..e0ce74fec7 100644 --- a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp @@ -39,7 +39,6 @@ #include "../utility/juce_CheckSettingMacros.h" #include "../utility/juce_IncludeModuleHeaders.h" #include "../utility/juce_WindowsHooks.h" -#include "../utility/juce_PluginBusUtilities.h" #include "../utility/juce_FakeMouseMoveGenerator.h" #include "../../juce_audio_processors/format_types/juce_VST3Common.h" @@ -964,8 +963,7 @@ public: pluginInstance (createPluginFilterOfType (AudioProcessor::wrapperType_VST3)), host (h), isMidiInputBusEnabled (false), - isMidiOutputBusEnabled (false), - busUtils (*pluginInstance, false) + isMidiOutputBusEnabled (false) { #if JucePlugin_WantsMidiInput isMidiInputBusEnabled = true; @@ -975,15 +973,19 @@ public: isMidiOutputBusEnabled = true; #endif - busUtils.init(); + #ifdef JucePlugin_PreferredChannelConfigurations + short configs[][2] = {JucePlugin_PreferredChannelConfigurations}; + const int numConfigs = sizeof (configs) / sizeof (short[2]); + + jassert (numConfigs > 0 && (configs[0][0] > 0 || configs[0][1] > 0)); + + pluginInstance->setPlayConfigDetails (configs[0][0], configs[0][1], 44100.0, 1024); + #endif // VST-3 requires your default layout to be non-discrete! // For example, your default layout must be mono, stereo, quadrophonic // and not AudioChannelSet::discreteChannels (2) etc. - jassert (busUtils.checkBusFormatsAreNotDiscrete()); - - copyBusArrangements (currentBusState.inputBuses, pluginInstance->busArrangement.inputBuses, Vst::kInput); - copyBusArrangements (currentBusState.outputBuses, pluginInstance->busArrangement.outputBuses, Vst::kOutput); + jassert (checkBusFormatsAreNotDiscrete()); comPluginInstance = new JuceAudioProcessor (pluginInstance); @@ -1537,8 +1539,7 @@ public: Steinberg::int32 PLUGIN_API getBusCount (Vst::MediaType type, Vst::BusDirection dir) override { if (type == Vst::kAudio) - return (dir == Vst::kInput ? pluginInstance->busArrangement.inputBuses - : pluginInstance->busArrangement.outputBuses).size(); + return pluginInstance->getBusCount (dir == Vst::kInput); if (type == Vst::kEvent) { @@ -1552,31 +1553,17 @@ public: return 0; } - static const AudioProcessor::AudioProcessorBus* getAudioBus (AudioProcessor::AudioBusArrangement& busArrangement, - Vst::BusDirection dir, Steinberg::int32 index) noexcept - { - const Array& buses = dir == Vst::kInput ? busArrangement.inputBuses - : busArrangement.outputBuses; - - return isPositiveAndBelow (index, static_cast (buses.size())) ? &buses.getReference (index) : nullptr; - } - - const AudioProcessor::AudioProcessorBus* getAudioBus (Vst::BusDirection dir, Steinberg::int32 index) const noexcept - { - return getAudioBus (pluginInstance->busArrangement, dir, index); - } - tresult PLUGIN_API getBusInfo (Vst::MediaType type, Vst::BusDirection dir, Steinberg::int32 index, Vst::BusInfo& info) override { if (type == Vst::kAudio) { - if (const AudioProcessor::AudioProcessorBus* bus = getAudioBus (currentBusState, dir, index)) + if (const AudioProcessor::Bus* bus = pluginInstance->getBus (dir == Vst::kInput, index)) { info.mediaType = Vst::kAudio; info.direction = dir; - info.channelCount = bus->channels.size(); - toString128 (info.name, bus->name); + info.channelCount = bus->getLastEnabledLayout().size(); + toString128 (info.name, bus->getName()); #if JucePlugin_IsSynth info.busType = (dir == Vst::kInput && index > 0 ? Vst::kAux : Vst::kMain); @@ -1584,7 +1571,7 @@ public: info.busType = (index == 0 ? Vst::kMain : Vst::kAux); #endif - info.flags = busUtils.isBusEnabledByDefault (dir == Vst::kInput, index) ? Vst::BusInfo::kDefaultActive : 0; + info.flags = (bus->isEnabledByDefault()) ? Vst::BusInfo::kDefaultActive : 0; return kResultTrue; } } @@ -1639,103 +1626,64 @@ public: if (type == Vst::kAudio) { - if (const AudioProcessor::AudioProcessorBus* bus = getAudioBus (dir, index)) - { - if (state == (bus->channels.size() > 0)) - return kResultTrue; - - AudioChannelSet newChannels; - - if (state) - if (const AudioProcessor::AudioProcessorBus* lastBusState = getAudioBus (currentBusState, dir, index)) - newChannels = lastBusState->channels; + // don't allow disabling the main bus + if (state == 0 && index == 0) + return kResultFalse; - if (pluginInstance->setPreferredBusArrangement (dir == Vst::kInput, index, newChannels)) - return kResultTrue; - } + if (AudioProcessor::Bus* bus = pluginInstance->getBus (dir == Vst::kInput, index)) + return (bus->enable (state != 0) ? kResultTrue : kResultFalse); } return kResultFalse; } - void copyBusArrangements (Array& copies, - const Array& source, - Vst::BusDirection dir) + bool checkBusFormatsAreNotDiscrete() { - for (int i = 0; i < source.size(); ++i) - { - AudioProcessor::AudioProcessorBus bus = source.getReference (i); + const int numInputBuses = pluginInstance->getBusCount (true); + const int numOutputBuses = pluginInstance->getBusCount (false); - if (bus.channels.size() == 0 && i < copies.size()) - bus = AudioProcessor::AudioProcessorBus (bus.name, copies.getReference (i).channels); + for (int i = 0; i < numInputBuses; ++i) + if (pluginInstance->getChannelLayoutOfBus (true, i).isDiscreteLayout()) + return false; - if (bus.channels.size() == 0) - bus = AudioProcessor::AudioProcessorBus (bus.name, busUtils.getDefaultLayoutForBus (dir == Vst::kInput, i)); + for (int i = 0; i < numOutputBuses; ++i) + if (pluginInstance->getChannelLayoutOfBus (false, i).isDiscreteLayout()) + return false; - copies.set (i, bus); - } + return true; } tresult PLUGIN_API setBusArrangements (Vst::SpeakerArrangement* inputs, Steinberg::int32 numIns, Vst::SpeakerArrangement* outputs, Steinberg::int32 numOuts) override { - PluginBusUtilities::ScopedBusRestorer restorer (busUtils); - - Array inputsEnabled, outputsEnabled; + const int numInputBuses = pluginInstance->getBusCount (true); + const int numOutputBuses = pluginInstance->getBusCount (false); - // save enabled/disabled state of buses - for (int i = 0; i < busUtils.getBusCount (true); ++i) - inputsEnabled.add (busUtils.isBusEnabled (true, i)); - - for (int i = 0; i < busUtils.getBusCount (false); ++i) - outputsEnabled.add (busUtils.isBusEnabled (false, i)); - - // set the buses - for (int i = 0; i < numIns; ++i) - if (! pluginInstance->setPreferredBusArrangement (true, i, getChannelSetForSpeakerArrangement (inputs[i]))) - return kInvalidArgument; + if (numIns > numInputBuses || numOuts > numOutputBuses) + return false; - for (int i = 0; i < numOuts; ++i) - if (! pluginInstance->setPreferredBusArrangement (false, i, getChannelSetForSpeakerArrangement (outputs[i]))) - return kInvalidArgument; + AudioProcessor::BusesLayout requested = pluginInstance->getBusesLayout(); - // re-check if the bus arrangement mateches the request for (int i = 0; i < numIns; ++i) - if (getChannelSetForSpeakerArrangement (inputs[i]) != busUtils.getChannelSet (true, i)) - return kInvalidArgument; + requested.getChannelSet (true, i) = getChannelSetForSpeakerArrangement (inputs[i]); for (int i = 0; i < numOuts; ++i) - if (getChannelSetForSpeakerArrangement (outputs[i]) != busUtils.getChannelSet (false, i)) - return kInvalidArgument; - - // save the state of the plug-in layout - copyBusArrangements (currentBusState.inputBuses, pluginInstance->busArrangement.inputBuses, Vst::kInput); - copyBusArrangements (currentBusState.outputBuses, pluginInstance->busArrangement.outputBuses, Vst::kOutput); - - // re-enable/disable the buses - for (int i = 0; i < busUtils.getBusCount (true); ++i) - if (! inputsEnabled.getReference (i) && busUtils.isBusEnabled (true, i)) - if (! pluginInstance->setPreferredBusArrangement (true, i, AudioChannelSet())) - return kInvalidArgument; - - for (int i = 0; i < busUtils.getBusCount (false); ++i) - if (! outputsEnabled.getReference (i) && busUtils.isBusEnabled (false, i)) - if (! pluginInstance->setPreferredBusArrangement (false, i, AudioChannelSet())) - return kInvalidArgument; - - restorer.release(); + requested.getChannelSet (false, i) = getChannelSetForSpeakerArrangement (outputs[i]); - preparePlugin (getPluginInstance().getSampleRate(), - getPluginInstance().getBlockSize()); + #ifdef JucePlugin_PreferredChannelConfigurations + short configs[][2] = {JucePlugin_PreferredChannelConfigurations}; + if (! AudioProcessor::containsLayout (requested, configs)) + return kResultFalse; + #endif - return kResultTrue; + return (pluginInstance->setBusesLayoutWithoutEnabling (requested) ? kResultTrue : kResultFalse); } tresult PLUGIN_API getBusArrangement (Vst::BusDirection dir, Steinberg::int32 index, Vst::SpeakerArrangement& arr) override { - if (const AudioProcessor::AudioProcessorBus* bus = getAudioBus (currentBusState, dir, index)) + if (AudioProcessor::Bus* bus = pluginInstance->getBus (dir == Vst::kInput, index)) { - arr = getSpeakerArrangement (bus->channels); + arr = getVst3SpeakerArrangement (bus->getLastEnabledLayout()); return kResultTrue; } @@ -1919,9 +1867,7 @@ private: Array channelListFloat; Array channelListDouble; - AudioProcessor::AudioBusArrangement currentBusState; bool isMidiInputBusEnabled, isMidiOutputBusEnabled; - PluginBusUtilities busUtils; ScopedJuceInitialiser_GUI libraryInitialiser; @@ -2101,7 +2047,8 @@ private: // Consider yourself very unlucky if you hit this assertion. The hash code of your // parameter ids are not unique. - jassert (! vstParamIDs.contains (static_cast (paramID))); + jassert (! vstParamIDs.contains (static_cast (paramID))); + vstParamIDs.add (paramID); paramMap.set (static_cast (paramID), i); diff --git a/modules/juce_audio_plugin_client/utility/juce_PluginBusUtilities.h b/modules/juce_audio_plugin_client/utility/juce_PluginBusUtilities.h deleted file mode 100644 index 143e2e978e..0000000000 --- a/modules/juce_audio_plugin_client/utility/juce_PluginBusUtilities.h +++ /dev/null @@ -1,536 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library. - Copyright (c) 2015 - ROLI Ltd. - - Permission is granted to use this software under the terms of either: - a) the GPL v2 (or any later version) - b) the Affero GPL v3 - - Details of these licenses can be found at: www.gnu.org/licenses - - JUCE is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.juce.com for more information. - - ============================================================================== -*/ - -struct PluginBusUtilities -{ - //============================================================================== - typedef Array AudioBusArray; - - //============================================================================== - PluginBusUtilities (AudioProcessor& plugin, bool markDiscreteLayoutsAsSupported, int maxProbeChannels = kDefaultMaxChannels) - : processor (plugin), - dynamicInBuses (false), - dynamicOutBuses (false), - plugInFormatSupportsDiscreteLayouts (markDiscreteLayoutsAsSupported), - maxChannelsToProbe (maxProbeChannels) - { - } - - // this will invoke setPreferredLayout many times - void init() { populateLayoutDetails(); } - - //============================================================================== - // Useful short-cuts - AudioBusArray& getFilterBus (bool inputBus) noexcept { return inputBus ? processor.busArrangement.inputBuses : processor.busArrangement.outputBuses; } - const AudioBusArray& getFilterBus (bool inputBus) const noexcept { return inputBus ? processor.busArrangement.inputBuses : processor.busArrangement.outputBuses; } - int getBusCount (bool inputBus) const noexcept { return getFilterBus (inputBus).size(); } - AudioChannelSet getChannelSet (bool inp, int bus) noexcept { return isPositiveAndBelow (bus, getBusCount (inp)) ? getFilterBus (inp).getReference (bus).channels : AudioChannelSet(); } - int getNumChannels (bool inp, int bus) const noexcept { return isPositiveAndBelow (bus, getBusCount (inp)) ? getFilterBus (inp).getReference (bus).channels.size() : 0; } - bool isBusEnabled (bool inputBus, int bus) const noexcept { return (getNumChannels (inputBus, bus) > 0); } - bool hasInputs (int bus) const noexcept { return isBusEnabled (true, bus); } - bool hasOutputs (int bus) const noexcept { return isBusEnabled (false, bus); } - bool hasDynamicInBuses() const noexcept { return dynamicInBuses; } - bool hasDynamicOutBuses() const noexcept { return dynamicOutBuses; } - - //============================================================================== - // Channel Counters - int getNumEnabledBuses (bool inputBus) const noexcept { int i; for (i = 0; i < getBusCount (inputBus); ++i) if (! isBusEnabled (inputBus, i)) break; return i; } - - int findTotalNumChannels (bool isInput, int busOffset = 0) const noexcept - { - int total = 0; - const AudioBusArray& ioBuses = getFilterBus (isInput); - - for (int i = busOffset; i < ioBuses.size(); ++i) - total += ioBuses.getReference (i).channels.size(); - - return total; - } - - int getBusIdxForChannelIdx (bool isInput, int channelIdx, int& totalChannels, int startBusIdx) - { - const int numBuses = getBusCount (isInput); - - for (int busIdx = startBusIdx; busIdx < numBuses; ++busIdx) - { - const int numChannels = getNumChannels (isInput, busIdx); - if ((totalChannels + numChannels) > channelIdx) - return busIdx; - - totalChannels += numChannels; - } - - return -1; - } - - int getBusIdxForChannelIdx (bool isInput, int channelIdx) - { - int totalChannels = 0; - return getBusIdxForChannelIdx (isInput, channelIdx, totalChannels, 0); - } - - //============================================================================== - // Bus properties & defaults - bool busIgnoresLayout (bool inp, int bus) const noexcept - { - return isPositiveAndBelow (bus, getLayoutDetails (inp).size()) ? getBusLayoutDetails (inp, bus).busIgnoresLayout : true; - } - - bool busCanBeDisabled (bool inp, int bus) const noexcept - { - return isPositiveAndBelow (bus, getLayoutDetails (inp).size()) ? getBusLayoutDetails (inp, bus).canBeDisabled : false; - } - - bool isBusEnabledByDefault (bool inp, int bus) const noexcept - { - return isPositiveAndBelow (bus, getLayoutDetails (inp).size()) ? getBusLayoutDetails (inp, bus).isEnabledByDefault : true; - } - - bool checkBusFormatsAreNotDiscrete() const { return (checkBusFormatsAreNotDiscrete (true) && checkBusFormatsAreNotDiscrete (false)); } - - const AudioChannelSet& getDefaultLayoutForBus (bool isInput, int busIdx) const noexcept { return getBusLayoutDetails (isInput, busIdx).defaultLayout; } - - AudioChannelSet getDefaultLayoutForChannelNumAndBus (bool isInput, int busIdx, int channelNum) const noexcept - { - if (busIdx < 0 || busIdx >= getBusCount (isInput) || channelNum == 0) - return AudioChannelSet::disabled(); - - const BusLayoutDetails& layouts = getBusLayoutDetails (isInput, busIdx); - - const AudioChannelSet& dflt = layouts.defaultLayout; - const AudioChannelSet discreteChannels = AudioChannelSet::discreteChannels (channelNum); - - if (dflt.size() == channelNum && (plugInFormatSupportsDiscreteLayouts || (! dflt.isDiscreteLayout()))) - return dflt; - - Array potentialLayouts = layoutListCompatibleWithChannelCount (channelNum); - - ScopedBusRestorer busRestorer (*this); - - // prefer non-discrete layouts if no explicit default layout is given - const int n = potentialLayouts.size(); - for (int i = 0; i < n; ++i) - { - const AudioChannelSet& layout = potentialLayouts.getReference (i); - if (processor.setPreferredBusArrangement (isInput, busIdx, layout)) - return layout; - } - - - if (plugInFormatSupportsDiscreteLayouts && processor.setPreferredBusArrangement (isInput, busIdx, discreteChannels)) - return discreteChannels; - - // we are out of options, bail out - return AudioChannelSet(); - } - - //============================================================================== - // This function is quite heavy so please cache the return value - int findMaxNumberOfChannelsForBus (bool isInput, int busNr, int upperlimit = std::numeric_limits::max()) - { - int maxChannelsPreprocessorDefs = -1; - #ifdef JucePlugin_MaxNumInputChannels - if (isInput) - maxChannelsPreprocessorDefs = jmin (upperlimit, JucePlugin_MaxNumInputChannels); - #endif - - #ifdef JucePlugin_MaxNumOutputChannels - if (! isInput) - maxChannelsPreprocessorDefs = jmin (upperlimit, JucePlugin_MaxNumOutputChannels); - #endif - - #ifdef JucePlugin_PreferredChannelConfigurations - if (busNr == 0) - { - int maxChannelCount = 0; - const short channelConfigs[][2] = { JucePlugin_PreferredChannelConfigurations }; - const int numChannelConfigs = sizeof (channelConfigs) / sizeof (*channelConfigs); - - for (int i = 0; i < numChannelConfigs; ++i) - { - const int numChannels = channelConfigs [i][isInput ? 0 : 1]; - if (numChannels < 0) - return -1; - - maxChannelCount = jmax (maxChannelCount, numChannels); - } - - return jmin (upperlimit, maxChannelCount); - } - #endif - - ScopedBusRestorer busRestorer (*this); - - if (plugInFormatSupportsDiscreteLayouts && - processor.setPreferredBusArrangement(isInput, busNr, AudioChannelSet::discreteChannels (insaneNumberOfChannels))) - return -1; // no limit in channels - - int n = maxChannelsPreprocessorDefs > 0 ? maxChannelsPreprocessorDefs - : (plugInFormatSupportsDiscreteLayouts ? maxChannelsToProbe - : maxNumChannelsOfNonDiscreteLayouts); - - n = jmin (upperlimit, n); - - for (int i = n; i > 0; --i) - { - if (plugInFormatSupportsDiscreteLayouts && processor.setPreferredBusArrangement (isInput, busNr, AudioChannelSet::discreteChannels (i))) - return i; - - Array sets = layoutListCompatibleWithChannelCount (i); - - for (int j = 0; j < sets.size(); ++j) - { - const AudioChannelSet& layout = sets.getReference (j); - - if (processor.setPreferredBusArrangement (isInput, busNr, layout)) - return i; - } - } - - return 0; - } - - //============================================================================== - void restoreBusArrangement (const AudioProcessor::AudioBusArrangement& original) const - { - const int numInputBuses = getBusCount (true); - const int numOutputBuses = getBusCount (false); - - jassert (original.inputBuses. size() == numInputBuses); - jassert (original.outputBuses.size() == numOutputBuses); - - for (int busNr = 0; busNr < numInputBuses; ++busNr) - processor.setPreferredBusArrangement (true, busNr, original.inputBuses.getReference (busNr).channels); - - for (int busNr = 0; busNr < numOutputBuses; ++busNr) - processor.setPreferredBusArrangement (false, busNr, original.outputBuses.getReference (busNr).channels); - } - - void enableAllBuses() - { - for (int busIdx = 1; busIdx < getBusCount (true); ++busIdx) - if (getChannelSet (true, busIdx) == AudioChannelSet::disabled()) - processor.setPreferredBusArrangement (true, busIdx, getDefaultLayoutForBus (true, busIdx)); - - for (int busIdx = 1; busIdx < getBusCount (false); ++busIdx) - if (getChannelSet (false, busIdx) == AudioChannelSet::disabled()) - processor.setPreferredBusArrangement (false, busIdx, getDefaultLayoutForBus (false, busIdx)); - } - - //============================================================================== - // Helper class which restores the original arrangement when it leaves scope - class ScopedBusRestorer - { - public: - ScopedBusRestorer (const PluginBusUtilities& bUtils) - : busUtils (bUtils), - originalArr (bUtils.processor.busArrangement), - shouldRestore (true) - {} - - ~ScopedBusRestorer() - { - if (shouldRestore) - busUtils.restoreBusArrangement (originalArr); - } - - void release() noexcept { shouldRestore = false; } - - private: - const PluginBusUtilities& busUtils; - const AudioProcessor::AudioBusArrangement originalArr; - bool shouldRestore; - - JUCE_DECLARE_NON_COPYABLE (ScopedBusRestorer) - }; - - //============================================================================== - AudioProcessor& processor; - - enum - { - kDefaultMaxChannels = 64 - }; - -private: - friend class ScopedBusRestorer; - - enum - { - maxNumChannelsOfNonDiscreteLayouts = 8, // surround 7.1 has the maximum amount of channels - pseudoChannelBitNum = 90, // use this bit index to check if plug-in really doesn't care about layouts - insaneNumberOfChannels = 512 - }; - - //============================================================================== - // the first layout is the default layout - struct BusLayoutDetails - { - BusLayoutDetails() : busIgnoresLayout (true), canBeDisabled (false), isEnabledByDefault (false) {} - - AudioChannelSet defaultLayout; - bool busIgnoresLayout, canBeDisabled, isEnabledByDefault; - }; - - Array& getLayoutDetails (bool isInput) noexcept { return isInput ? inputLayouts : outputLayouts; } - const Array& getLayoutDetails (bool isInput) const noexcept { return isInput ? inputLayouts : outputLayouts; } - BusLayoutDetails& getBusLayoutDetails (bool isInput, int busNr) noexcept { return getLayoutDetails (isInput).getReference (busNr); } - const BusLayoutDetails& getBusLayoutDetails (bool isInput, int busNr) const noexcept { return getLayoutDetails (isInput).getReference (busNr); } - - //============================================================================== - Array inputLayouts, outputLayouts; - bool dynamicInBuses, dynamicOutBuses, plugInFormatSupportsDiscreteLayouts; - int maxChannelsToProbe; - - //============================================================================== - void populateLayoutDetails() - { - clear (getBusCount (true), getBusCount (false)); - - // save the default layouts - for (int i = 0; i < getBusCount (true); ++i) - getBusLayoutDetails (true, i).defaultLayout = getChannelSet (true, i); - - for (int i = 0; i < getBusCount (false); ++i) - getBusLayoutDetails (false, i).defaultLayout = getChannelSet (false, i); - - { - ScopedBusRestorer restorer (*this); - - - for (int i = 0; i < getBusCount (true); ++i) addLayoutDetails (true, i); - for (int i = 0; i < getBusCount (false); ++i) addLayoutDetails (false, i); - - // find the defaults - for (int i = 0; i < getBusCount (true); ++i) - updateDefaultLayout (true, i); - - for (int i = 0; i < getBusCount (false); ++i) - updateDefaultLayout (false, i); - } - - // can any of the buses be disabled/enabled - dynamicInBuses = doesPlugInHaveDynamicBuses (true); - dynamicOutBuses = doesPlugInHaveDynamicBuses (false); - } - - //============================================================================== - bool busIgnoresLayoutForChannelNum (bool isInput, int busNr, int channelNum) - { - AudioChannelSet set; - - // If the plug-in does not complain about setting it's layout to an undefined layout - // then we assume that the plug-in ignores the layout altogether - for (int i = 0; i < channelNum; ++i) - set.addChannel (static_cast (pseudoChannelBitNum + i)); - - return processor.setPreferredBusArrangement (isInput, busNr, set); - } - - void addLayoutDetails (bool isInput, int busNr) - { - BusLayoutDetails& layouts = getBusLayoutDetails (isInput, busNr); - - // check if the plug-in bus can be disabled - layouts.canBeDisabled = processor.setPreferredBusArrangement (isInput, busNr, AudioChannelSet()); - layouts.busIgnoresLayout = true; - - for (int i = 1; i <= maxNumChannelsOfNonDiscreteLayouts; ++i) - { - const bool ignoresLayoutForChannel = busIgnoresLayoutForChannelNum (isInput, busNr, i); - - Array sets = layoutListCompatibleWithChannelCount (i); - - for (int j = 0; j < sets.size(); ++j) - { - const AudioChannelSet& layout = sets.getReference (j); - - if (processor.setPreferredBusArrangement (isInput, busNr, layout)) - { - if (! ignoresLayoutForChannel) - { - layouts.busIgnoresLayout = false; - return; - } - } - } - } - } - - bool doesPlugInHaveDynamicBuses (bool isInput) const - { - for (int i = 0; i < getBusCount (isInput); ++i) - if (getBusLayoutDetails (isInput, i).canBeDisabled) - return true; - - return false; - } - - bool checkBusFormatsAreNotDiscrete (bool isInput) const - { - const int n = getBusCount (isInput); - const Array& bus = isInput ? processor.busArrangement.inputBuses - : processor.busArrangement.outputBuses; - - for (int busIdx = 0; busIdx < n; ++busIdx) - if (bus.getReference (busIdx).channels.isDiscreteLayout()) - return false; - - return true; - } - - void updateDefaultLayout (bool isInput, int busIdx) - { - BusLayoutDetails& layouts = getBusLayoutDetails (isInput, busIdx); - AudioChannelSet& dfltLayout = layouts.defaultLayout; - - layouts.isEnabledByDefault = (dfltLayout.size() > 0); - - // If you hit this assertion then you are disabling the main bus by default - // which is unsupported - jassert (layouts.isEnabledByDefault || busIdx >= 0); - - if ((! plugInFormatSupportsDiscreteLayouts) && dfltLayout.isDiscreteLayout()) - { - // The default layout is a discrete channel layout, yet some plug-in formats (VST-3) - // do not support this format. We need to find a different default with the same - // number of channels - - dfltLayout = getDefaultLayoutForChannelNumAndBus (isInput, busIdx, dfltLayout.size()); - } - - // are we done? - if (dfltLayout != AudioChannelSet()) - return; - - const bool mainBusHasInputs = hasInputs (0); - const bool mainBusHasOutputs = hasOutputs (0); - - if (busIdx != 0 && (mainBusHasInputs || mainBusHasOutputs)) - { - // the AudioProcessor does not give us any default layout - // for an aux bus. Use the same number of channels as the - // default layout on the main bus as a sensible default for - // the aux bus - - const bool useInput = mainBusHasInputs && mainBusHasOutputs ? isInput : mainBusHasInputs; - dfltLayout = getBusLayoutDetails (useInput, 0).defaultLayout; - - const int numChannels = dfltLayout.size(); - const AudioChannelSet discreteChannelLayout = AudioChannelSet::discreteChannels (numChannels); - - if ((plugInFormatSupportsDiscreteLayouts || dfltLayout != discreteChannelLayout) && - processor.setPreferredBusArrangement (isInput, busIdx, dfltLayout)) - return; - - // no exact match: try at least to match the number of channels - dfltLayout = getDefaultLayoutForChannelNumAndBus (isInput, busIdx, dfltLayout.size()); - if (dfltLayout != AudioChannelSet()) - return; - } - - // check stereo first as this is often the more sensible default than mono - if (processor.setPreferredBusArrangement (isInput, busIdx, (dfltLayout = AudioChannelSet::stereo()))) - return; - - if (plugInFormatSupportsDiscreteLayouts && - processor.setPreferredBusArrangement (isInput, busIdx, (dfltLayout = AudioChannelSet::discreteChannels (2)))) - return; - - // let's guess - for (int numChans = 1; numChans < findMaxNumberOfChannelsForBus (isInput, busIdx); ++numChans) - { - Array sets = layoutListCompatibleWithChannelCount (numChans); - for (int j = 0; j < sets.size(); ++j) - if (processor.setPreferredBusArrangement (isInput, busIdx, (dfltLayout = sets.getReference (j)))) - return; - - if (plugInFormatSupportsDiscreteLayouts && - processor.setPreferredBusArrangement (isInput, busIdx, (dfltLayout = AudioChannelSet::discreteChannels (numChans)))) - return; - } - - // Your bus must support at least a single possible layout - jassertfalse; - } - - void clear (int inputCount, int outputCount) - { - inputLayouts.clear(); - inputLayouts.resize (inputCount); - outputLayouts.clear(); - outputLayouts.resize (outputCount); - } - - //============================================================================== - static Array layoutListCompatibleWithChannelCount (const int channelCount) noexcept - { - jassert (channelCount > 0); - - Array sets; - - switch (channelCount) - { - case 1: - sets.add (AudioChannelSet::mono()); - break; - case 2: - sets.add (AudioChannelSet::stereo()); - break; - case 3: - sets.add (AudioChannelSet::createLCR()); - sets.add (AudioChannelSet::createLRS()); - break; - case 4: - sets.add (AudioChannelSet::createLCRS()); - sets.add (AudioChannelSet::quadraphonic()); - sets.add (AudioChannelSet::ambisonic()); - break; - case 5: - sets.add (AudioChannelSet::pentagonal()); - sets.add (AudioChannelSet::create5point0()); - break; - case 6: - sets.add (AudioChannelSet::hexagonal()); - sets.add (AudioChannelSet::create5point1()); - sets.add (AudioChannelSet::create6point0()); - sets.add (AudioChannelSet::create6point0Music()); - break; - case 7: - sets.add (AudioChannelSet::create6point1()); - sets.add (AudioChannelSet::create7point0()); - break; - case 8: - sets.add (AudioChannelSet::octagonal()); - sets.add (AudioChannelSet::create7point1()); - sets.add (AudioChannelSet::create7point1AC3()); - sets.add (AudioChannelSet::createFront7point1()); - break; - } - - return sets; - } - - JUCE_DECLARE_NON_COPYABLE (PluginBusUtilities) -}; diff --git a/modules/juce_audio_plugin_client/AU/juce_AU_Shared.h b/modules/juce_audio_processors/format_types/juce_AU_Shared.h similarity index 71% rename from modules/juce_audio_plugin_client/AU/juce_AU_Shared.h rename to modules/juce_audio_processors/format_types/juce_AU_Shared.h index 415615f2d1..ee726b9237 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AU_Shared.h +++ b/modules/juce_audio_processors/format_types/juce_AU_Shared.h @@ -33,10 +33,13 @@ struct AudioUnitHelpers struct AUChannelStreamOrder { AudioChannelLayoutTag auLayoutTag; - AudioChannelLabel speakerOrder[8]; + AudioChannelSet::ChannelType speakerOrder[8]; }; - static AUChannelStreamOrder auChannelStreamOrder[]; + struct StreamOrder : public AudioChannelSet + { + static AUChannelStreamOrder auChannelStreamOrder[]; + }; static AudioChannelSet::ChannelType CoreAudioChannelLabelToJuceType (AudioChannelLabel label) noexcept { @@ -54,24 +57,24 @@ struct AudioUnitHelpers case kAudioChannelLabel_HeadphonesLeft: return AudioChannelSet::left; case kAudioChannelLabel_Right: case kAudioChannelLabel_HeadphonesRight: return AudioChannelSet::right; - case kAudioChannelLabel_LFEScreen: return AudioChannelSet::subbass; + case kAudioChannelLabel_LFEScreen: return AudioChannelSet::LFE; case kAudioChannelLabel_LeftSurround: return AudioChannelSet::leftSurround; case kAudioChannelLabel_RightSurround: return AudioChannelSet::rightSurround; case kAudioChannelLabel_LeftCenter: return AudioChannelSet::leftCentre; case kAudioChannelLabel_RightCenter: return AudioChannelSet::rightCentre; case kAudioChannelLabel_CenterSurround: return AudioChannelSet::surround; - case kAudioChannelLabel_LeftSurroundDirect: return AudioChannelSet::leftSurroundDirect; - case kAudioChannelLabel_RightSurroundDirect: return AudioChannelSet::rightSurroundDirect; + case kAudioChannelLabel_LeftSurroundDirect: return AudioChannelSet::leftSurroundSide; + case kAudioChannelLabel_RightSurroundDirect: return AudioChannelSet::rightSurroundSide; case kAudioChannelLabel_TopCenterSurround: return AudioChannelSet::topMiddle; case kAudioChannelLabel_VerticalHeightLeft: return AudioChannelSet::topFrontLeft; case kAudioChannelLabel_VerticalHeightRight: return AudioChannelSet::topFrontRight; case kAudioChannelLabel_VerticalHeightCenter: return AudioChannelSet::topFrontCentre; case kAudioChannelLabel_TopBackLeft: return AudioChannelSet::topRearLeft; - case kAudioChannelLabel_RearSurroundLeft: return AudioChannelSet::leftRearSurround; + case kAudioChannelLabel_RearSurroundLeft: return AudioChannelSet::leftSurroundRear; case kAudioChannelLabel_TopBackRight: return AudioChannelSet::topRearRight; - case kAudioChannelLabel_RearSurroundRight: return AudioChannelSet::rightRearSurround; + case kAudioChannelLabel_RearSurroundRight: return AudioChannelSet::rightSurroundRear; case kAudioChannelLabel_TopBackCenter: return AudioChannelSet::topRearCentre; - case kAudioChannelLabel_LFE2: return AudioChannelSet::subbass2; + case kAudioChannelLabel_LFE2: return AudioChannelSet::LFE2; case kAudioChannelLabel_LeftWide: return AudioChannelSet::wideLeft; case kAudioChannelLabel_RightWide: return AudioChannelSet::wideRight; case kAudioChannelLabel_Ambisonic_W: return AudioChannelSet::ambisonicW; @@ -95,9 +98,9 @@ struct AudioUnitHelpers case AudioChannelSet::centre: return kAudioChannelLabel_Center; case AudioChannelSet::left: return kAudioChannelLabel_Left; case AudioChannelSet::right: return kAudioChannelLabel_Right; - case AudioChannelSet::subbass: return kAudioChannelLabel_LFEScreen; - case AudioChannelSet::leftRearSurround: return kAudioChannelLabel_RearSurroundLeft; - case AudioChannelSet::rightRearSurround: return kAudioChannelLabel_RearSurroundRight; + case AudioChannelSet::LFE: return kAudioChannelLabel_LFEScreen; + case AudioChannelSet::leftSurroundRear: return kAudioChannelLabel_RearSurroundLeft; + case AudioChannelSet::rightSurroundRear: return kAudioChannelLabel_RearSurroundRight; case AudioChannelSet::leftCentre: return kAudioChannelLabel_LeftCenter; case AudioChannelSet::rightCentre: return kAudioChannelLabel_RightCenter; case AudioChannelSet::surround: return kAudioChannelLabel_CenterSurround; @@ -110,15 +113,15 @@ struct AudioUnitHelpers case AudioChannelSet::topRearLeft: return kAudioChannelLabel_TopBackLeft; case AudioChannelSet::topRearRight: return kAudioChannelLabel_TopBackRight; case AudioChannelSet::topRearCentre: return kAudioChannelLabel_TopBackCenter; - case AudioChannelSet::subbass2: return kAudioChannelLabel_LFE2; + case AudioChannelSet::LFE2: return kAudioChannelLabel_LFE2; case AudioChannelSet::wideLeft: return kAudioChannelLabel_LeftWide; case AudioChannelSet::wideRight: return kAudioChannelLabel_RightWide; case AudioChannelSet::ambisonicW: return kAudioChannelLabel_Ambisonic_W; case AudioChannelSet::ambisonicX: return kAudioChannelLabel_Ambisonic_X; case AudioChannelSet::ambisonicY: return kAudioChannelLabel_Ambisonic_Y; case AudioChannelSet::ambisonicZ: return kAudioChannelLabel_Ambisonic_Z; - case AudioChannelSet::leftSurroundDirect: return kAudioChannelLabel_LeftSurroundDirect; - case AudioChannelSet::rightSurroundDirect: return kAudioChannelLabel_RightSurroundDirect; + case AudioChannelSet::leftSurroundSide: return kAudioChannelLabel_LeftSurroundDirect; + case AudioChannelSet::rightSurroundSide: return kAudioChannelLabel_RightSurroundDirect; case AudioChannelSet::unknown: return kAudioChannelLabel_Unknown; case AudioChannelSet::discreteChannel0: return kAudioChannelLabel_Discrete_0; } @@ -133,9 +136,9 @@ struct AudioUnitHelpers if ((bitmap & kAudioChannelBit_Left) != 0) set.addChannel (AudioChannelSet::left); if ((bitmap & kAudioChannelBit_Right) != 0) set.addChannel (AudioChannelSet::right); if ((bitmap & kAudioChannelBit_Center) != 0) set.addChannel (AudioChannelSet::centre); - if ((bitmap & kAudioChannelBit_LFEScreen) != 0) set.addChannel (AudioChannelSet::subbass); - if ((bitmap & kAudioChannelBit_LeftSurroundDirect) != 0) set.addChannel (AudioChannelSet::leftSurroundDirect); - if ((bitmap & kAudioChannelBit_RightSurroundDirect) != 0) set.addChannel (AudioChannelSet::rightSurroundDirect); + if ((bitmap & kAudioChannelBit_LFEScreen) != 0) set.addChannel (AudioChannelSet::LFE); + if ((bitmap & kAudioChannelBit_LeftSurroundDirect) != 0) set.addChannel (AudioChannelSet::leftSurroundSide); + if ((bitmap & kAudioChannelBit_RightSurroundDirect) != 0) set.addChannel (AudioChannelSet::rightSurroundSide); if ((bitmap & kAudioChannelBit_LeftCenter) != 0) set.addChannel (AudioChannelSet::leftCentre); if ((bitmap & kAudioChannelBit_RightCenter) != 0) set.addChannel (AudioChannelSet::rightCentre); if ((bitmap & kAudioChannelBit_CenterSurround) != 0) set.addChannel (AudioChannelSet::surround); @@ -163,9 +166,9 @@ struct AudioUnitHelpers { // first try to convert the layout via the auChannelStreamOrder array int layoutIndex; - for (layoutIndex = 0; auChannelStreamOrder[layoutIndex].auLayoutTag != 0; ++layoutIndex) + for (layoutIndex = 0; StreamOrder::auChannelStreamOrder[layoutIndex].auLayoutTag != 0; ++layoutIndex) { - const AUChannelStreamOrder& streamOrder = auChannelStreamOrder[layoutIndex]; + const AUChannelStreamOrder& streamOrder = StreamOrder::auChannelStreamOrder[layoutIndex]; int numChannels; for (numChannels = 0; numChannels < 8 && streamOrder.speakerOrder[numChannels] != 0;) @@ -176,7 +179,7 @@ struct AudioUnitHelpers int ch; for (ch = 0; ch < numChannels; ++ch) - if (streamOrder.speakerOrder[ch] != layout.mChannelDescriptions[ch].mChannelLabel) + if (JuceChannelTypeToCoreAudioLabel (streamOrder.speakerOrder[ch]) != layout.mChannelDescriptions[ch].mChannelLabel) break; // match! @@ -184,8 +187,8 @@ struct AudioUnitHelpers break; } - if (auChannelStreamOrder[layoutIndex].auLayoutTag != 0) - return CALayoutTagToChannelSet (auChannelStreamOrder[layoutIndex].auLayoutTag); + if (StreamOrder::auChannelStreamOrder[layoutIndex].auLayoutTag != 0) + return CALayoutTagToChannelSet (StreamOrder::auChannelStreamOrder[layoutIndex].auLayoutTag); } AudioChannelSet set; for (unsigned int i = 0; i < layout.mNumberChannelDescriptions; ++i) @@ -214,19 +217,21 @@ struct AudioUnitHelpers case kAudioChannelLayoutTag_AudioUnit_6_0: return AudioChannelSet::create6point0(); case kAudioChannelLayoutTag_DTS_6_0_A: return AudioChannelSet::create6point0Music(); case kAudioChannelLayoutTag_MPEG_6_1_A: return AudioChannelSet::create6point1(); - case kAudioChannelLayoutTag_MPEG_5_0_B: return AudioChannelSet::create5point0(); + case kAudioChannelLayoutTag_DTS_6_1_A: return AudioChannelSet::create6point1Music(); + case kAudioChannelLayoutTag_MPEG_5_0_B: + case kAudioChannelLayoutTag_MPEG_5_0_A: + return AudioChannelSet::create5point0(); case kAudioChannelLayoutTag_MPEG_5_1_A: return AudioChannelSet::create5point1(); case kAudioChannelLayoutTag_DTS_7_1: - case kAudioChannelLayoutTag_MPEG_7_1_C: return AudioChannelSet::create7point1(); case kAudioChannelLayoutTag_AudioUnit_7_0: return AudioChannelSet::create7point0(); - case kAudioChannelLayoutTag_AudioUnit_7_0_Front: return AudioChannelSet::createFront7point0(); - case kAudioChannelLayoutTag_AudioUnit_7_1_Front: return AudioChannelSet::createFront7point1(); + case kAudioChannelLayoutTag_AudioUnit_7_0_Front: return AudioChannelSet::create7point0SDDS(); + case kAudioChannelLayoutTag_MPEG_7_1_A: return AudioChannelSet::create7point1SDDS(); case kAudioChannelLayoutTag_MPEG_3_0_A: case kAudioChannelLayoutTag_MPEG_3_0_B: return AudioChannelSet::createLCR(); case kAudioChannelLayoutTag_MPEG_4_0_A: case kAudioChannelLayoutTag_MPEG_4_0_B: return AudioChannelSet::createLCRS(); case kAudioChannelLayoutTag_ITU_2_1: return AudioChannelSet::createLRS(); - case kAudioChannelLayoutTag_EAC3_7_1_C: return AudioChannelSet::create7point1AC3(); + case kAudioChannelLayoutTag_MPEG_7_1_C: return AudioChannelSet::create7point1(); } if (int numChannels = static_cast (tag) & 0xffff) @@ -249,16 +254,16 @@ struct AudioUnitHelpers if (set == AudioChannelSet::hexagonal()) return kAudioChannelLayoutTag_Hexagonal; if (set == AudioChannelSet::octagonal()) return kAudioChannelLayoutTag_Octagonal; if (set == AudioChannelSet::ambisonic()) return kAudioChannelLayoutTag_Ambisonic_B_Format; - if (set == AudioChannelSet::create5point0()) return kAudioChannelLayoutTag_MPEG_5_0_B; + if (set == AudioChannelSet::create5point0()) return kAudioChannelLayoutTag_MPEG_5_0_A; if (set == AudioChannelSet::create5point1()) return kAudioChannelLayoutTag_MPEG_5_1_A; if (set == AudioChannelSet::create6point0()) return kAudioChannelLayoutTag_AudioUnit_6_0; if (set == AudioChannelSet::create6point0Music()) return kAudioChannelLayoutTag_DTS_6_0_A; + if (set == AudioChannelSet::create6point1Music()) return kAudioChannelLayoutTag_DTS_6_1_A; if (set == AudioChannelSet::create6point1()) return kAudioChannelLayoutTag_MPEG_6_1_A; if (set == AudioChannelSet::create7point0()) return kAudioChannelLayoutTag_AudioUnit_7_0; if (set == AudioChannelSet::create7point1()) return kAudioChannelLayoutTag_MPEG_7_1_C; - if (set == AudioChannelSet::createFront7point0()) return kAudioChannelLayoutTag_AudioUnit_7_0_Front; - if (set == AudioChannelSet::createFront7point1()) return kAudioChannelLayoutTag_AudioUnit_7_1_Front; - if (set == AudioChannelSet::create7point1AC3()) return kAudioChannelLayoutTag_EAC3_7_1_C; + if (set == AudioChannelSet::create7point0SDDS()) return kAudioChannelLayoutTag_AudioUnit_7_0_Front; + if (set == AudioChannelSet::create7point1SDDS()) return kAudioChannelLayoutTag_MPEG_7_1_A; if (set == AudioChannelSet::disabled()) return kAudioChannelLayoutTag_Unknown; return static_cast ((int) kAudioChannelLayoutTag_DiscreteInOrder | set.size()); @@ -271,27 +276,11 @@ struct AudioUnitHelpers AudioChannelLayoutTag currentLayout = ChannelSetToCALayoutTag (channelSet); int layoutIndex; - for (layoutIndex = 0; auChannelStreamOrder[layoutIndex].auLayoutTag != currentLayout; ++layoutIndex) - if (auChannelStreamOrder[layoutIndex].auLayoutTag == 0) return auIndex; + for (layoutIndex = 0; StreamOrder::auChannelStreamOrder[layoutIndex].auLayoutTag != currentLayout; ++layoutIndex) + if (StreamOrder::auChannelStreamOrder[layoutIndex].auLayoutTag == 0) return auIndex; AudioChannelSet::ChannelType channelType - = CoreAudioChannelLabelToJuceType (auChannelStreamOrder[layoutIndex].speakerOrder[auIndex]); - - // We need to map surround channels to rear surround channels for petagonal and hexagonal - if (channelSet == AudioChannelSet::pentagonal() || channelSet == AudioChannelSet::hexagonal()) - { - switch (channelType) - { - case AudioChannelSet::leftSurround: - channelType = AudioChannelSet::leftRearSurround; - break; - case AudioChannelSet::rightSurround: - channelType = AudioChannelSet::rightRearSurround; - break; - default: - break; - } - } + = StreamOrder::auChannelStreamOrder[layoutIndex].speakerOrder[auIndex]; const int juceIndex = channelSet.getChannelTypes().indexOf (channelType); @@ -301,39 +290,26 @@ struct AudioUnitHelpers static int juceChannelIndexToAu (int juceIndex, const AudioChannelSet& channelSet) { + if (channelSet.isDiscreteLayout()) + return juceIndex; + AudioChannelLayoutTag currentLayout = ChannelSetToCALayoutTag (channelSet); int layoutIndex; - for (layoutIndex = 0; auChannelStreamOrder[layoutIndex].auLayoutTag != currentLayout; ++layoutIndex) + for (layoutIndex = 0; StreamOrder::auChannelStreamOrder[layoutIndex].auLayoutTag != currentLayout; ++layoutIndex) { - if (auChannelStreamOrder[layoutIndex].auLayoutTag == 0) + if (StreamOrder::auChannelStreamOrder[layoutIndex].auLayoutTag == 0) { jassertfalse; return juceIndex; } } - const AUChannelStreamOrder& channelOrder = auChannelStreamOrder[layoutIndex]; + const AUChannelStreamOrder& channelOrder = StreamOrder::auChannelStreamOrder[layoutIndex]; AudioChannelSet::ChannelType channelType = channelSet.getTypeOfChannel (juceIndex); - // We need to map rear surround channels to surround channels for petagonal and hexagonal - if (channelSet == AudioChannelSet::pentagonal() || channelSet == AudioChannelSet::hexagonal()) - { - switch (channelType) - { - case AudioChannelSet::leftRearSurround: - channelType = AudioChannelSet::leftSurround; - break; - case AudioChannelSet::rightRearSurround: - channelType = AudioChannelSet::rightSurround; - break; - default: - break; - } - } - for (int i = 0; i < 8 && channelOrder.speakerOrder[i] != 0; ++i) - if (CoreAudioChannelLabelToJuceType (channelOrder.speakerOrder[i]) == channelType) + if (channelOrder.speakerOrder[i] == channelType) return i; jassertfalse; @@ -343,13 +319,13 @@ struct AudioUnitHelpers class ChannelRemapper { public: - ChannelRemapper (PluginBusUtilities& bUtils) : busUtils (bUtils), inputLayoutMap (nullptr), outputLayoutMap (nullptr) {} + ChannelRemapper (AudioProcessor& p) : processor (p), inputLayoutMap (nullptr), outputLayoutMap (nullptr) {} ~ChannelRemapper() {} void alloc() { - const int numInputBuses = busUtils.getBusCount (true); - const int numOutputBuses = busUtils.getBusCount (false); + const int numInputBuses = processor.getBusCount (true); + const int numOutputBuses = processor.getBusCount (false); initializeChannelMapArray (true, numInputBuses); initializeChannelMapArray (false, numOutputBuses); @@ -374,7 +350,7 @@ struct AudioUnitHelpers private: //============================================================================== - PluginBusUtilities& busUtils; + AudioProcessor& processor; HeapBlock inputLayoutMapPtrStorage, outputLayoutMapPtrStorage; HeapBlock inputLayoutMapStorage, outputLayoutMapStorage; int** inputLayoutMap; @@ -387,8 +363,8 @@ struct AudioUnitHelpers HeapBlock& layoutMapStorage = isInput ? inputLayoutMapStorage : outputLayoutMapStorage; int**& layoutMap = isInput ? inputLayoutMap : outputLayoutMap; - const int totalInChannels = busUtils.findTotalNumChannels (true); - const int totalOutChannels = busUtils.findTotalNumChannels (false); + const int totalInChannels = processor.getTotalNumInputChannels (); + const int totalOutChannels = processor.getTotalNumOutputChannels(); layoutMapPtrStorage.calloc (static_cast (numBuses)); layoutMapStorage.calloc (static_cast (isInput ? totalInChannels : totalOutChannels)); @@ -399,14 +375,14 @@ struct AudioUnitHelpers for (int busIdx = 0; busIdx < numBuses; ++busIdx) { layoutMap[busIdx] = layoutMapStorage.getData() + ch; - ch += busUtils.getNumChannels (isInput, busIdx); + ch += processor.getChannelCountOfBus (isInput, busIdx); } } void fillLayoutChannelMaps (bool isInput, int busNr) { int* layoutMap = (isInput ? inputLayoutMap : outputLayoutMap)[busNr]; - const AudioChannelSet& channelFormat = busUtils.getChannelSet (isInput, busNr); + const AudioChannelSet& channelFormat = processor.getChannelLayoutOfBus (isInput, busNr); const int numChannels = channelFormat.size(); for (int i = 0; i < numChannels; ++i) @@ -604,16 +580,39 @@ struct AudioUnitHelpers } } - static Array getAUChannelInfo (PluginBusUtilities& busUtils) + template + static bool isLayoutSupported (const AudioProcessor& processor, + bool isInput, int busIdx, + int numChannels, + const short (&channelLayoutList) [numLayouts][2], + bool hasLayoutMap = true) { - Array channelInfo; + if (const AudioProcessor::Bus* bus = processor.getBus (isInput, busIdx)) + { + if (! bus->isNumberOfChannelsSupported (numChannels)) + return false; - AudioProcessor* juceFilter = &busUtils.processor; - const AudioProcessor::AudioBusArrangement& arr = juceFilter->busArrangement; - PluginBusUtilities::ScopedBusRestorer restorer (busUtils); + if (! hasLayoutMap) + return true; - const bool hasMainInputBus = (busUtils.getNumEnabledBuses (true) > 0); - const bool hasMainOutputBus = (busUtils.getNumEnabledBuses (false) > 0); + const int numConfigs = sizeof (channelLayoutList) / sizeof (short[2]); + + for (int i = 0; i < numConfigs; ++i) + { + if (channelLayoutList[i][isInput ? 0 : 1] == numChannels) + return true; + } + } + + return false; + } + + static Array getAUChannelInfo (const AudioProcessor& processor) + { + Array channelInfo; + + const bool hasMainInputBus = (processor.getBusCount (true) > 0); + const bool hasMainOutputBus = (processor.getBusCount (false) > 0); if ((! hasMainInputBus) && (! hasMainOutputBus)) { @@ -629,8 +628,8 @@ struct AudioUnitHelpers { const uint32_t maxNumChanToCheckFor = 9; - uint32_t defaultInputs = static_cast (busUtils.getNumChannels (true, 0)); - uint32_t defaultOutputs = static_cast (busUtils.getNumChannels (false, 0)); + uint32_t defaultInputs = static_cast (processor.getChannelCountOfBus (true, 0)); + uint32_t defaultOutputs = static_cast (processor.getChannelCountOfBus (false, 0)); uint32_t lastInputs = defaultInputs; uint32_t lastOutputs = defaultOutputs; @@ -643,43 +642,41 @@ struct AudioUnitHelpers for (uint32_t inChanNum = hasMainInputBus ? 1 : 0; inChanNum <= (hasMainInputBus ? maxNumChanToCheckFor : 0); ++inChanNum) { - const AudioChannelSet dfltInLayout = busUtils.getDefaultLayoutForChannelNumAndBus(true, 0, static_cast (inChanNum)); + const AudioProcessor::Bus* inBus = processor.getBus (true, 0); - if (inChanNum != 0 && dfltInLayout.isDisabled()) + if (inBus != nullptr && (! inBus->isNumberOfChannelsSupported ((int) inChanNum))) continue; for (uint32_t outChanNum = hasMainOutputBus ? 1 : 0; outChanNum <= (hasMainOutputBus ? maxNumChanToCheckFor : 0); ++outChanNum) { - const AudioChannelSet dfltOutLayout = busUtils.getDefaultLayoutForChannelNumAndBus(false, 0, static_cast (outChanNum)); - if (outChanNum != 0 && dfltOutLayout.isDisabled()) - continue; + const AudioProcessor::Bus* outBus = processor.getBus (false, 0); - // get the number of channels again. This is only needed for some processors that change their configuration - // even when they indicate that setPreferredBusArrangement failed. - lastInputs = hasMainInputBus ? static_cast (arr.inputBuses. getReference (0). channels.size()) : 0; - lastOutputs = hasMainOutputBus ? static_cast (arr.outputBuses.getReference (0). channels.size()) : 0; + if (outBus != nullptr && (! outBus->isNumberOfChannelsSupported ((int) outChanNum))) + continue; uint32_t channelConfiguration = (inChanNum << 16) | outChanNum; // did we already try this configuration? if (supportedChannels.contains (channelConfiguration)) continue; - if (lastInputs != inChanNum && (! dfltInLayout.isDisabled())) + if (lastInputs != inChanNum && (inChanNum > 0 && inBus != nullptr)) { - if (! juceFilter->setPreferredBusArrangement (true, 0, dfltInLayout)) continue; + AudioChannelSet set = inBus->supportedLayoutWithChannels ((int) inChanNum); + AudioProcessor::BusesLayout layouts = inBus->getBusesLayoutForLayoutChangeOfBus (set); lastInputs = inChanNum; - lastOutputs = hasMainOutputBus ? static_cast (arr.outputBuses.getReference (0). channels.size()) : 0; + lastOutputs = hasMainOutputBus ? static_cast (layouts.outputBuses.getReference (0).size()) : 0; supportedChannels.add ((lastInputs << 16) | lastOutputs); } - if (lastOutputs != outChanNum && (! dfltOutLayout.isDisabled())) + if (lastOutputs != outChanNum && (outChanNum > 0 && outBus != nullptr)) { - if (! juceFilter->setPreferredBusArrangement (false, 0, dfltOutLayout)) continue; + AudioChannelSet set = outBus->supportedLayoutWithChannels ((int) outChanNum); + AudioProcessor::BusesLayout layouts = outBus->getBusesLayoutForLayoutChangeOfBus (set); - lastInputs = hasMainInputBus ? static_cast (arr.inputBuses.getReference (0).channels.size()) : 0; lastOutputs = outChanNum; + lastInputs = hasMainInputBus ? static_cast (layouts.inputBuses.getReference (0).size()) : 0; supportedChannels.add ((lastInputs << 16) | lastOutputs); } @@ -748,31 +745,34 @@ struct AudioUnitHelpers } }; -AudioUnitHelpers::AUChannelStreamOrder AudioUnitHelpers::auChannelStreamOrder[] = +AudioUnitHelpers::AUChannelStreamOrder AudioUnitHelpers::StreamOrder::auChannelStreamOrder[] = { - {kAudioChannelLayoutTag_Mono, {kAudioChannelLabel_Center, 0, 0, 0, 0, 0, 0, 0}}, - {kAudioChannelLayoutTag_Stereo, {kAudioChannelLabel_Left, kAudioChannelLabel_Right, 0, 0, 0, 0, 0, 0}}, - {kAudioChannelLayoutTag_StereoHeadphones, {kAudioChannelLabel_HeadphonesLeft, kAudioChannelLabel_HeadphonesRight, 0, 0, 0, 0, 0, 0}}, - {kAudioChannelLayoutTag_Binaural, {kAudioChannelLabel_Left, kAudioChannelLabel_Right, 0, 0, 0, 0, 0, 0}}, - {kAudioChannelLayoutTag_Quadraphonic, {kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_LeftSurround, kAudioChannelLabel_RightSurround, 0, 0, 0, 0}}, - {kAudioChannelLayoutTag_Pentagonal, {kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_LeftSurround, kAudioChannelLabel_RightSurround, kAudioChannelLabel_Center, 0, 0, 0}}, - {kAudioChannelLayoutTag_Hexagonal, {kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_LeftSurround, kAudioChannelLabel_RightSurround, kAudioChannelLabel_Center, kAudioChannelLabel_CenterSurround, 0, 0}}, - {kAudioChannelLayoutTag_Octagonal, {kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_LeftSurround, kAudioChannelLabel_RightSurround, kAudioChannelLabel_Center, kAudioChannelLabel_CenterSurround, kAudioChannelLabel_LeftWide, kAudioChannelLabel_RightWide}}, - {kAudioChannelLayoutTag_Ambisonic_B_Format, {kAudioChannelLabel_Ambisonic_W, kAudioChannelLabel_Ambisonic_X, kAudioChannelLabel_Ambisonic_Y, kAudioChannelLabel_Ambisonic_Z, 0, 0, 0, 0}}, - {kAudioChannelLayoutTag_MPEG_5_0_B, {kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_LeftSurround, kAudioChannelLabel_RightSurround, kAudioChannelLabel_Center, 0, 0, 0}}, - {kAudioChannelLayoutTag_MPEG_5_1_A, {kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_Center, kAudioChannelLabel_LFEScreen, kAudioChannelLabel_LeftSurround, kAudioChannelLabel_RightSurround, 0, 0}}, - {kAudioChannelLayoutTag_AudioUnit_6_0, {kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_LeftSurround, kAudioChannelLabel_RightSurround, kAudioChannelLabel_Center, kAudioChannelLabel_CenterSurround, 0, 0}}, - {kAudioChannelLayoutTag_DTS_6_0_A, {kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_LeftSurround, kAudioChannelLabel_RightSurround, kAudioChannelLabel_RearSurroundLeft, kAudioChannelLabel_RearSurroundRight, 0, 0}}, - {kAudioChannelLayoutTag_MPEG_6_1_A, {kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_Center, kAudioChannelLabel_LFEScreen, kAudioChannelLabel_LeftSurround, kAudioChannelLabel_RightSurround, kAudioChannelLabel_CenterSurround, 0}}, - {kAudioChannelLayoutTag_AudioUnit_7_0, {kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_LeftSurround, kAudioChannelLabel_RightSurround, kAudioChannelLabel_Center, kAudioChannelLabel_RearSurroundLeft, kAudioChannelLabel_RearSurroundRight, 0}}, - {kAudioChannelLayoutTag_MPEG_7_1_C, {kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_Center, kAudioChannelLabel_LFEScreen, kAudioChannelLabel_LeftSurround, kAudioChannelLabel_RightSurround, kAudioChannelLabel_RearSurroundLeft, kAudioChannelLabel_RearSurroundRight}}, - {kAudioChannelLayoutTag_AudioUnit_7_0_Front,{kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_LeftSurround, kAudioChannelLabel_RightSurround, kAudioChannelLabel_Center, kAudioChannelLabel_LeftCenter, kAudioChannelLabel_RightCenter, 0}}, - {kAudioChannelLayoutTag_AudioUnit_7_1_Front,{kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_Center, kAudioChannelLabel_LFEScreen, kAudioChannelLabel_LeftSurround, kAudioChannelLabel_RightSurround, kAudioChannelLabel_LeftCenter, kAudioChannelLabel_RightCenter}}, - {kAudioChannelLayoutTag_MPEG_3_0_A, {kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_Center, 0, 0, 0, 0, 0}}, - {kAudioChannelLayoutTag_MPEG_3_0_B, {kAudioChannelLabel_Center, kAudioChannelLabel_Left, kAudioChannelLabel_Right, 0, 0, 0, 0, 0}}, - {kAudioChannelLayoutTag_MPEG_4_0_A, {kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_Center, kAudioChannelLabel_CenterSurround, 0, 0, 0, 0}}, - {kAudioChannelLayoutTag_MPEG_4_0_B, {kAudioChannelLabel_Center, kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_CenterSurround, 0, 0, 0, 0}}, - {kAudioChannelLayoutTag_ITU_2_1, {kAudioChannelLabel_Left, kAudioChannelLabel_Right, kAudioChannelLabel_CenterSurround, 0, 0, 0, 0, 0}}, - {kAudioChannelLayoutTag_EAC3_7_1_C, {kAudioChannelLabel_Left, kAudioChannelLabel_Center, kAudioChannelLabel_Right, kAudioChannelLabel_LeftSurround, kAudioChannelLabel_RightSurround, kAudioChannelLabel_LFEScreen, kAudioChannelLabel_LeftSurroundDirect, kAudioChannelLabel_RightSurroundDirect}}, - {0, {0,0,0,0,0,0,0,0}} + {kAudioChannelLayoutTag_Mono, {centre, unknown, unknown, unknown, unknown, unknown, unknown, unknown}}, + {kAudioChannelLayoutTag_Stereo, {left, right, unknown, unknown, unknown, unknown, unknown, unknown}}, + {kAudioChannelLayoutTag_StereoHeadphones, {left, right, unknown, unknown, unknown, unknown, unknown, unknown}}, + {kAudioChannelLayoutTag_Binaural, {left, right, unknown, unknown, unknown, unknown, unknown, unknown}}, + {kAudioChannelLayoutTag_Quadraphonic, {left, right, leftSurround, rightSurround, unknown, unknown, unknown, unknown}}, + {kAudioChannelLayoutTag_Pentagonal, {left, right, leftSurroundRear, rightSurroundRear, centre, unknown, unknown, unknown}}, + {kAudioChannelLayoutTag_Hexagonal, {left, right, leftSurroundRear, rightSurroundRear, centre, centreSurround, unknown, unknown}}, + {kAudioChannelLayoutTag_Octagonal, {left, right, leftSurround, rightSurround, centre, centreSurround, wideLeft, wideRight}}, + {kAudioChannelLayoutTag_Ambisonic_B_Format, {ambisonicW, ambisonicX, ambisonicY, ambisonicZ, unknown, unknown, unknown, unknown}}, + {kAudioChannelLayoutTag_MPEG_5_0_A, {left, right, centre, leftSurround, rightSurround, unknown, unknown, unknown}}, + {kAudioChannelLayoutTag_MPEG_5_0_B, {left, right, leftSurround, rightSurround, centre, unknown, unknown, unknown}}, + {kAudioChannelLayoutTag_MPEG_5_1_A, {left, right, centre, LFE, leftSurround, rightSurround, unknown, unknown}}, + {kAudioChannelLayoutTag_AudioUnit_6_0, {left, right, leftSurround, rightSurround, centre, centreSurround, unknown, unknown}}, + {kAudioChannelLayoutTag_DTS_6_0_A, {left, right, leftSurround, rightSurround, leftSurroundSide, rightSurroundSide, unknown, unknown}}, // TODO check this one + {kAudioChannelLayoutTag_MPEG_6_1_A, {left, right, centre, LFE, leftSurround, rightSurround, centre, unknown}}, + {kAudioChannelLayoutTag_DTS_6_1_A, {leftSurroundSide, rightSurroundSide, left, right, leftSurround, rightSurround, LFE, unknown}}, + {kAudioChannelLayoutTag_AudioUnit_7_0, {left, right, leftSurroundSide, rightSurroundSide, centre, leftSurroundRear, rightSurroundRear, unknown}}, + {kAudioChannelLayoutTag_MPEG_7_1_C, {left, right, centre, LFE, leftSurroundSide, rightSurroundSide, leftSurroundRear, rightSurroundRear}}, + {kAudioChannelLayoutTag_AudioUnit_7_0_Front,{left, right, leftSurround, rightSurround, centre, leftCentre, rightCentre, unknown}}, + {kAudioChannelLayoutTag_MPEG_7_1_A, {left, right, centre, LFE, leftSurround, rightSurround, leftCentre, rightCentre}}, + {kAudioChannelLayoutTag_DTS_7_1, {leftCentre, centre, rightCentre, left, right, leftSurround, rightSurround, LFE}}, + {kAudioChannelLayoutTag_MPEG_3_0_A, {left, right, centre, unknown, unknown, unknown, unknown, unknown}}, + {kAudioChannelLayoutTag_MPEG_3_0_B, {centre, left, right, unknown, unknown, unknown, unknown, unknown}}, + {kAudioChannelLayoutTag_MPEG_4_0_A, {left, right, centre, centreSurround, unknown, unknown, unknown, unknown}}, + {kAudioChannelLayoutTag_MPEG_4_0_B, {centre, left, right, centreSurround, unknown, unknown, unknown, unknown}}, + {kAudioChannelLayoutTag_ITU_2_1, {left, right, centreSurround, unknown, unknown, unknown, unknown, unknown}}, + {kAudioChannelLayoutTag_EAC3_7_1_C, {left, centre, right, leftSurround, rightSurround, LFE, leftSurroundSide, rightSurroundSide}}, + {unknown, {unknown,unknown,unknown,unknown,unknown,unknown,unknown,unknown}} }; diff --git a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm index 14d1964e60..67a4483862 100644 --- a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm +++ b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm @@ -64,6 +64,8 @@ namespace juce #include "../../juce_core/native/juce_osx_ObjCHelpers.h" +#include "juce_AU_Shared.h" + // Change this to disable logging of various activities #ifndef AU_LOGGING #define AU_LOGGING 1 @@ -118,6 +120,8 @@ namespace AudioUnitFormatHelpers s << "Generators/"; else if (desc.componentType == kAudioUnitType_Panner) s << "Panners/"; + else if (desc.componentType == kAudioUnitType_Mixer) + s << "Mixers/"; s << osTypeToString (desc.componentType) << "," << osTypeToString (desc.componentSubType) << "," @@ -249,7 +253,8 @@ namespace AudioUnitFormatHelpers || types[0] == kAudioUnitType_MusicEffect || types[0] == kAudioUnitType_Effect || types[0] == kAudioUnitType_Generator - || types[0] == kAudioUnitType_Panner) + || types[0] == kAudioUnitType_Panner + || types[0] == kAudioUnitType_Mixer) { desc.componentType = types[0]; desc.componentSubType = types[1]; @@ -284,6 +289,7 @@ namespace AudioUnitFormatHelpers case kAudioUnitType_MusicDevice: return "Synth"; case kAudioUnitType_Generator: return "Generator"; case kAudioUnitType_Panner: return "Panner"; + case kAudioUnitType_Mixer: return "Mixer"; default: break; } @@ -300,17 +306,14 @@ class AudioUnitPluginInstance : public AudioPluginInstance { public: AudioUnitPluginInstance (AudioComponentInstance au) - : auComponent (AudioComponentInstanceGetComponent (au)), + : AudioPluginInstance (getBusesProperties (au)), + auComponent (AudioComponentInstanceGetComponent (au)), wantsMidiMessages (false), producesMidiMessages (false), wasPlaying (false), prepared (false), isAUv3 (false), currentBuffer (nullptr), - numInputBusChannels (0), - numOutputBusChannels (0), - numInputBusses (0), - numOutputBusses (0), audioUnit (au), #if JUCE_MAC eventListenerRef (0), @@ -330,6 +333,7 @@ public: AudioComponentDescription ignore; getComponentDescFromIdentifier (createPluginIdentifier (componentDesc), ignore, pluginName, version, manufacturer); + updateSupportedLayouts(); } ~AudioUnitPluginInstance() @@ -393,14 +397,241 @@ public: bool initialise (double rate, int blockSize) { - updateNumChannels(); producesMidiMessages = canProduceMidiOutput(); - setPlayConfigDetails ((int) (numInputBusChannels * numInputBusses), - (int) (numOutputBusChannels * numOutputBusses), - rate, blockSize); + setRateAndBufferSizeDetails (rate, blockSize); setLatencySamples (0); refreshParameterList(); - setPluginCallbacks(); + createPluginCallbacks(); + + return true; + } + + //============================================================================== + bool canAddBus (bool isInput) const override { return isBusCountWritable (isInput); } + bool canRemoveBus (bool isInput) const override { return isBusCountWritable (isInput); } + + bool canApplyBusCountChange (bool isInput, bool isAdding, BusProperties& outProperties) override + { + int currentCount = getBusCount (isInput); + int newCount = currentCount + (isAdding ? 1 : -1); + AudioUnitScope scope = isInput ? kAudioUnitScope_Input : kAudioUnitScope_Output; + + if (AudioUnitSetProperty (audioUnit, kAudioUnitProperty_ElementCount, scope, 0, &newCount, sizeof (newCount)) == noErr) + { + getBusProperties (isInput, currentCount, outProperties.busName, outProperties.defaultLayout); + outProperties.isActivatedByDefault = true; + updateSupportedLayouts(); + + return true; + } + + return false; + } + + //============================================================================== + bool isBusesLayoutSupported (const BusesLayout& layouts) const override + { + if (layouts == getBusesLayout()) + return true; + + for (int dir = 0; dir < 2; ++dir) + { + const bool isInput = (dir == 0); + const Array& requestedLayouts = (isInput ? layouts.inputBuses : layouts.outputBuses); + const Array& oppositeRequestedLayouts = (isInput ? layouts.outputBuses : layouts.inputBuses); + const Array >& supported = (isInput ? supportedInLayouts : supportedOutLayouts); + const int n = getBusCount (isInput); + + for (int busIdx = 0; busIdx < n; ++busIdx) + { + const AudioChannelSet& requested = requestedLayouts.getReference (busIdx); + const int oppositeBusIdx = jmin (getBusCount (! isInput) - 1, busIdx); + const bool hasOppositeBus = (oppositeBusIdx >= 0); + const AudioChannelSet oppositeRequested = (hasOppositeBus ? oppositeRequestedLayouts.getReference (oppositeBusIdx) : AudioChannelSet()); + const Array& possible = supported.getReference (busIdx); + + if (requested.isDisabled()) + return false; + + if (possible.size() > 0 && ! possible.contains (requested)) + return false; + + int i; + for (i = 0; i < numChannelInfos; ++i) + { + const AUChannelInfo& info = channelInfos[i]; + const SInt16& thisChannels = (isInput ? info.inChannels : info.outChannels); + const SInt16& opChannels = (isInput ? info.outChannels : info.inChannels); + + // this bus + if (thisChannels == 0) continue; + else if (thisChannels > 0 && requested.size() != thisChannels) continue; + else if (thisChannels < -2 && requested.size() > (thisChannels * -1)) continue; + + // opposite bus + if (opChannels == 0 && hasOppositeBus) continue; + else if (opChannels > 0 && oppositeRequested.size() != opChannels) continue; + else if (opChannels < -2 && oppositeRequested.size() > (opChannels * -1)) continue; + + // both buses + if (thisChannels == -2 && opChannels == -2) continue; + if (thisChannels == -1 && opChannels == -1) + { + int numOppositeBuses = getBusCount (! isInput); + int j; + for (j = 0; j < numOppositeBuses; ++j) + if (requested.size() != oppositeRequestedLayouts.getReference (j).size()) + break; + + if (j < numOppositeBuses) continue; + } + + break; + } + + if (i >= numChannelInfos) + return false; + } + } + + return true; + } + + bool syncBusLayouts (const BusesLayout& layouts, bool isInitialized, bool& layoutHasChanged) const + { + layoutHasChanged = false; + + for (int dir = 0; dir < 2; ++dir) + { + const bool isInput = (dir == 0); + const AudioUnitScope scope = isInput ? kAudioUnitScope_Input : kAudioUnitScope_Output; + const int n = getBusCount (isInput); + + if (getElementCount (scope) != n && isBusCountWritable (isInput)) + { + OSStatus err; + UInt32 newCount = static_cast (n); + layoutHasChanged = true; + + err = AudioUnitSetProperty (audioUnit, kAudioUnitProperty_ElementCount, scope, 0, &newCount, sizeof (newCount)); + jassert (err == noErr); + } + + for (int i = 0; i < n; ++i) + { + Float64 sampleRate; + UInt32 sampleRateSize = sizeof (sampleRate); + + AudioUnitGetProperty (audioUnit, kAudioUnitProperty_SampleRate, scope, static_cast (i), &sampleRate, &sampleRateSize); + + const AudioChannelSet& set = layouts.getChannelSet (isInput, i); + const int requestedNumChannels = set.size(); + + { + AudioStreamBasicDescription stream; + UInt32 dataSize = sizeof (stream); + OSStatus err = AudioUnitGetProperty (audioUnit, kAudioUnitProperty_StreamFormat, scope, static_cast (i), &stream, &dataSize); + if (err != noErr || dataSize < sizeof (stream)) + return false; + + const int actualNumChannels = static_cast (stream.mChannelsPerFrame); + + if (actualNumChannels != requestedNumChannels) + { + layoutHasChanged = true; + zerostruct (stream); // (can't use "= { 0 }" on this object because it's typedef'ed as a C struct) + stream.mSampleRate = sampleRate; + stream.mFormatID = kAudioFormatLinearPCM; + stream.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kAudioFormatFlagIsNonInterleaved | kAudioFormatFlagsNativeEndian; + stream.mFramesPerPacket = 1; + stream.mBytesPerPacket = 4; + stream.mBytesPerFrame = 4; + stream.mBitsPerChannel = 32; + stream.mChannelsPerFrame = static_cast (requestedNumChannels); + + err = AudioUnitSetProperty (audioUnit, kAudioUnitProperty_StreamFormat, scope, static_cast (i), &stream, sizeof (stream)); + if (err != noErr) return false; + } + } + + if (! set.isDiscreteLayout()) + { + const AudioChannelLayoutTag requestedTag = AudioUnitHelpers::ChannelSetToCALayoutTag (set); + + AudioChannelLayout layout; + const UInt32 minDataSize = sizeof (layout) - sizeof (AudioChannelDescription); + UInt32 dataSize = minDataSize; + + AudioChannelLayoutTag actualTag = kAudioChannelLayoutTag_Unknown; + OSStatus err = AudioUnitGetProperty (audioUnit, kAudioUnitProperty_AudioChannelLayout, scope, static_cast (i), &layout, &dataSize); + bool supportsLayouts = (err == noErr && dataSize >= minDataSize); + + if (supportsLayouts) + { + const UInt32 expectedSize = + minDataSize + (sizeof (AudioChannelDescription) * layout.mNumberChannelDescriptions); + + HeapBlock layoutBuffer; + layoutBuffer.malloc (1, expectedSize); + dataSize = expectedSize; + + err = AudioUnitGetProperty (audioUnit, kAudioUnitProperty_AudioChannelLayout, scope, + static_cast (i), layoutBuffer.getData(), &dataSize); + + if (err != noErr || dataSize < expectedSize) + return false; + + actualTag = AudioUnitHelpers::ChannelSetToCALayoutTag (AudioUnitHelpers::CoreAudioChannelLayoutToJuceType (layout)); + } + + if (actualTag != requestedTag) + { + zerostruct (layout); + layout.mChannelLayoutTag = requestedTag; + + err = AudioUnitSetProperty (audioUnit, kAudioUnitProperty_AudioChannelLayout, scope, static_cast (i), &layout, minDataSize); + + // only bail out if the plug-in claims to support layouts + // See AudioUnit headers on kAudioUnitProperty_AudioChannelLayout + if (err != noErr && supportsLayouts && isInitialized) + return false; + } + } + } + } + + return true; + } + + bool canApplyBusesLayout (const BusesLayout& layouts) const override + { + // You cannot call setBusesLayout when the AudioProcessor is processing. + // Call releaseResources first! + jassert (! prepared); + + bool layoutHasChanged = false; + + if (! syncBusLayouts (layouts, false, layoutHasChanged)) + return false; + + // did anything actually change + if (layoutHasChanged) + { + bool success = (AudioUnitInitialize (audioUnit) == noErr); + + // Some plug-ins require the LayoutTag to be set after initialization + if (success) + success = syncBusLayouts (layouts, true, layoutHasChanged); + + AudioUnitUninitialize (audioUnit); + + if (! success) + // make sure that the layout is back to it's original state + syncBusLayouts (getBusesLayout(), false, layoutHasChanged); + + return success; + } + return true; } @@ -452,76 +683,75 @@ public: if (audioUnit != nullptr) { releaseResources(); - updateNumChannels(); - - Float64 sampleRateIn = 0, sampleRateOut = 0; - UInt32 sampleRateSize = sizeof (sampleRateIn); - const Float64 sr = newSampleRate; - for (AudioUnitElement i = 0; i < numInputBusses; ++i) + for (int dir = 0; dir < 2; ++dir) { - AudioUnitGetProperty (audioUnit, kAudioUnitProperty_SampleRate, kAudioUnitScope_Input, i, &sampleRateIn, &sampleRateSize); + const bool isInput = (dir == 0); + const AudioUnitScope scope = isInput ? kAudioUnitScope_Input : kAudioUnitScope_Output; + const int n = getBusCount (isInput); - if (sampleRateIn != sr) - AudioUnitSetProperty (audioUnit, kAudioUnitProperty_SampleRate, kAudioUnitScope_Input, i, &sr, sizeof (sr)); - } + for (int i = 0; i < n; ++i) + { + Float64 sampleRate; + UInt32 sampleRateSize = sizeof (sampleRate); + const Float64 sr = newSampleRate; - for (AudioUnitElement i = 0; i < numOutputBusses; ++i) - { - AudioUnitGetProperty (audioUnit, kAudioUnitProperty_SampleRate, kAudioUnitScope_Output, i, &sampleRateOut, &sampleRateSize); + AudioUnitGetProperty (audioUnit, kAudioUnitProperty_SampleRate, scope, static_cast (i), &sampleRate, &sampleRateSize); + + if (sampleRate != sr) + AudioUnitSetProperty (audioUnit, kAudioUnitProperty_SampleRate, scope, static_cast (i), &sr, sizeof (sr)); + + if (isInput) + { + AURenderCallbackStruct info; + zerostruct (info); // (can't use "= { 0 }" on this object because it's typedef'ed as a C struct) - if (sampleRateOut != sr) - AudioUnitSetProperty (audioUnit, kAudioUnitProperty_SampleRate, kAudioUnitScope_Output, i, &sr, sizeof (sr)); + info.inputProcRefCon = this; + info.inputProc = renderGetInputCallback; + + AudioUnitSetProperty (audioUnit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, + static_cast (i), &info, sizeof (info)); + } + else + { + outputBufferList.add (new AUBuffer (static_cast (getChannelCountOfBus (false, i)))); + } + } } UInt32 frameSize = (UInt32) estimatedSamplesPerBlock; AudioUnitSetProperty (audioUnit, kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, 0, &frameSize, sizeof (frameSize)); - setPlayConfigDetails ((int) (numInputBusChannels * numInputBusses), - (int) (numOutputBusChannels * numOutputBusses), - (double) newSampleRate, estimatedSamplesPerBlock); + setRateAndBufferSizeDetails ((double) newSampleRate, estimatedSamplesPerBlock); updateLatency(); - { - AudioStreamBasicDescription stream; - zerostruct (stream); // (can't use "= { 0 }" on this object because it's typedef'ed as a C struct) - stream.mSampleRate = sr; - stream.mFormatID = kAudioFormatLinearPCM; - stream.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kAudioFormatFlagIsNonInterleaved | kAudioFormatFlagsNativeEndian; - stream.mFramesPerPacket = 1; - stream.mBytesPerPacket = 4; - stream.mBytesPerFrame = 4; - stream.mBitsPerChannel = 32; - stream.mChannelsPerFrame = numInputBusChannels; - - for (AudioUnitElement i = 0; i < numInputBusses; ++i) - AudioUnitSetProperty (audioUnit, kAudioUnitProperty_StreamFormat, - kAudioUnitScope_Input, i, &stream, sizeof (stream)); - - stream.mChannelsPerFrame = numOutputBusChannels; - - for (AudioUnitElement i = 0; i < numOutputBusses; ++i) - AudioUnitSetProperty (audioUnit, kAudioUnitProperty_StreamFormat, - kAudioUnitScope_Output, i, &stream, sizeof (stream)); - } - - if (numOutputBusses != 0 && numOutputBusChannels != 0) - outputBufferList.calloc (numOutputBusses, getAudioBufferSizeInBytes()); - zerostruct (timeStamp); timeStamp.mSampleTime = 0; - timeStamp.mHostTime = GetCurrentHostTime (0, sr, isAUv3); + timeStamp.mHostTime = GetCurrentHostTime (0, newSampleRate, isAUv3); timeStamp.mFlags = kAudioTimeStampSampleTimeValid | kAudioTimeStampHostTimeValid; currentBuffer = nullptr; wasPlaying = false; - resetBusses(); + resetBuses(); + + bool ignore; + + if (! syncBusLayouts (getBusesLayout(), false, ignore)) + return; - jassert (! prepared); prepared = (AudioUnitInitialize (audioUnit) == noErr); + + if (prepared) + { + if (! syncBusLayouts (getBusesLayout(), true, ignore)) + { + prepared = false; + AudioUnitUninitialize (audioUnit); + } + } } } @@ -530,10 +760,10 @@ public: if (prepared) { AudioUnitUninitialize (audioUnit); - resetBusses(); + resetBuses(); AudioUnitReset (audioUnit, kAudioUnitScope_Global, 0); - outputBufferList.free(); + outputBufferList.clear(); currentBuffer = nullptr; prepared = false; } @@ -541,10 +771,10 @@ public: incomingMidi.clear(); } - void resetBusses() + void resetBuses() { - for (AudioUnitElement i = 0; i < numInputBusses; ++i) AudioUnitReset (audioUnit, kAudioUnitScope_Input, i); - for (AudioUnitElement i = 0; i < numOutputBusses; ++i) AudioUnitReset (audioUnit, kAudioUnitScope_Output, i); + for (int i = 0; i < getBusCount (true); ++i) AudioUnitReset (audioUnit, kAudioUnitScope_Input, static_cast (i)); + for (int i = 0; i < getBusCount (false); ++i) AudioUnitReset (audioUnit, kAudioUnitScope_Output, static_cast (i)); } void processBlock (AudioSampleBuffer& buffer, MidiBuffer& midiMessages) override @@ -555,17 +785,19 @@ public: { timeStamp.mHostTime = GetCurrentHostTime (numSamples, getSampleRate(), isAUv3); - for (AudioUnitElement i = 0; i < numOutputBusses; ++i) + int chIdx = 0; + const int numOutputBuses = getBusCount (false); + for (int i = 0; i < numOutputBuses; ++i) { - if (AudioBufferList* const abl = getAudioBufferListForBus(i)) + if (AUBuffer* buf = outputBufferList[i]) { - abl->mNumberBuffers = numOutputBusChannels; + AudioBufferList& abl = *buf; - for (AudioUnitElement j = 0; j < numOutputBusChannels; ++j) + for (AudioUnitElement j = 0; j < abl.mNumberBuffers; ++j) { - abl->mBuffers[j].mNumberChannels = 1; - abl->mBuffers[j].mDataByteSize = (UInt32) (sizeof (float) * (size_t) numSamples); - abl->mBuffers[j].mData = buffer.getWritePointer ((int) (i * numOutputBusChannels + j)); + abl.mBuffers[j].mNumberChannels = 1; + abl.mBuffers[j].mDataByteSize = (UInt32) (sizeof (float) * (size_t) numSamples); + abl.mBuffers[j].mData = buffer.getWritePointer (chIdx++); } } } @@ -591,10 +823,12 @@ public: } - for (AudioUnitElement i = 0; i < numOutputBusses; ++i) + for (int i = 0; i < numOutputBuses; ++i) { AudioUnitRenderActionFlags flags = 0; - AudioUnitRender (audioUnit, &flags, &timeStamp, i, (UInt32) numSamples, getAudioBufferListForBus (i)); + + if (AUBuffer* buf = outputBufferList[i]) + AudioUnitRender (audioUnit, &flags, &timeStamp, static_cast (i), (UInt32) numSamples, buf->bufferList.getData()); } timeStamp.mSampleTime += numSamples; @@ -618,6 +852,30 @@ public: bool hasEditor() const override { return true; } AudioProcessorEditor* createEditor() override; + static AudioProcessor::BusesProperties getBusesProperties (AudioComponentInstance comp) + { + AudioProcessor::BusesProperties busProperties; + + for (int dir = 0; dir < 2; ++dir) + { + const bool isInput = (dir == 0); + const int n = getElementCount (comp, isInput ? kAudioUnitScope_Input : kAudioUnitScope_Output); + + for (int i = 0; i < n; ++i) + { + String busName; + AudioChannelSet currentLayout; + + getBusProperties (comp, isInput, i, busName, currentLayout); + jassert (! currentLayout.isDisabled()); + + busProperties.addBus (isInput, busName, currentLayout, true); + } + } + + return busProperties; + } + //============================================================================== const String getInputChannelName (int index) const override { @@ -948,10 +1206,31 @@ private: CriticalSection lock; bool wantsMidiMessages, producesMidiMessages, wasPlaying, prepared, isAUv3; - HeapBlock outputBufferList; + struct AUBuffer + { + AUBuffer (size_t numBuffers) + { + bufferList.calloc (1, (sizeof (AudioBufferList) - sizeof (::AudioBuffer)) + (sizeof (::AudioBuffer) * numBuffers)); + AudioBufferList& buffer = *bufferList.getData(); + + buffer.mNumberBuffers = static_cast (numBuffers); + } + + operator AudioBufferList&() + { + return *bufferList.getData(); + } + + HeapBlock bufferList; + }; + + OwnedArray outputBufferList; AudioTimeStamp timeStamp; AudioSampleBuffer* currentBuffer; - AudioUnitElement numInputBusChannels, numOutputBusChannels, numInputBusses, numOutputBusses; + Array > supportedInLayouts, supportedOutLayouts; + + int numChannelInfos; + HeapBlock channelInfos; AudioUnit audioUnit; #if JUCE_MAC @@ -972,22 +1251,10 @@ private: CriticalSection midiInLock; MidiBuffer incomingMidi; - void setPluginCallbacks() + void createPluginCallbacks() { if (audioUnit != nullptr) { - { - AURenderCallbackStruct info; - zerostruct (info); // (can't use "= { 0 }" on this object because it's typedef'ed as a C struct) - - info.inputProcRefCon = this; - info.inputProc = renderGetInputCallback; - - for (AudioUnitElement i = 0; i < numInputBusses; ++i) - AudioUnitSetProperty (audioUnit, kAudioUnitProperty_SetRenderCallback, - kAudioUnitScope_Input, i, &info, sizeof (info)); - } - #if JUCE_MAC if (producesMidiMessages) { @@ -1124,15 +1391,17 @@ private: { // if this ever happens, might need to add extra handling jassert (inNumberFrames == (UInt32) currentBuffer->getNumSamples()); + AudioSampleBuffer buffer = + (static_cast (inBusNumber) < getBusCount (true) + ? getBusBuffer (*currentBuffer, true, static_cast (inBusNumber)) + : AudioSampleBuffer()); - for (UInt32 i = 0; i < ioData->mNumberBuffers; ++i) + for (int i = 0; i < static_cast (ioData->mNumberBuffers); ++i) { - const int bufferChannel = (int) (inBusNumber * numInputBusChannels + i); - - if (bufferChannel < currentBuffer->getNumChannels()) + if (i < buffer.getNumChannels()) { memcpy (ioData->mBuffers[i].mData, - currentBuffer->getReadPointer (bufferChannel), + buffer.getReadPointer (i), sizeof (float) * inNumberFrames); } else @@ -1308,87 +1577,171 @@ private: return currentTime; } - size_t getAudioBufferSizeInBytes() const noexcept + bool isBusCountWritable (bool isInput) const noexcept { - return offsetof (AudioBufferList, mBuffers) + (sizeof (::AudioBuffer) * numOutputBusChannels); + UInt32 countSize; + Boolean writable; + OSStatus err; + AudioUnitScope scope = (isInput ? kAudioUnitScope_Input : kAudioUnitScope_Output); + + err = AudioUnitGetPropertyInfo (audioUnit, kAudioUnitProperty_ElementCount, scope, 0, &countSize, &writable); + + return (err == noErr && writable != 0 && countSize == sizeof (UInt32)); } - AudioBufferList* getAudioBufferListForBus (AudioUnitElement busIndex) const noexcept + //============================================================================== + int getElementCount (AudioUnitScope scope) const noexcept { - return addBytesToPointer (outputBufferList.getData(), getAudioBufferSizeInBytes() * busIndex); + return static_cast (getElementCount (audioUnit, scope)); } - AudioUnitElement getElementCount (AudioUnitScope scope) const noexcept + static int getElementCount (AudioUnit comp, AudioUnitScope scope) noexcept { UInt32 count; UInt32 countSize = sizeof (count); - if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_ElementCount, scope, 0, &count, &countSize) != noErr - || countSize == 0) - count = 1; + OSStatus err = AudioUnitGetProperty (comp, kAudioUnitProperty_ElementCount, scope, 0, &count, &countSize); + jassert (err == noErr); - return count; + return static_cast (count); } - void updateNumChannels() + //============================================================================== + void getBusProperties (bool isInput, int busIdx, String& busName, AudioChannelSet& currentLayout) const { - numInputBusses = getElementCount (kAudioUnitScope_Input); - numOutputBusses = getElementCount (kAudioUnitScope_Output); + getBusProperties (audioUnit, isInput, busIdx, busName, currentLayout); + } - AUChannelInfo supportedChannels [128]; - UInt32 supportedChannelsSize = 0; - Boolean writable; + static void getBusProperties (AudioUnit comp, bool isInput, int busIdx, String& busName, AudioChannelSet& currentLayout) + { + const AudioUnitScope scope = isInput ? kAudioUnitScope_Input : kAudioUnitScope_Output; + busName = (isInput ? "Input #" : "Output #") + String (busIdx + 1); - if (AudioUnitGetPropertyInfo (audioUnit, kAudioUnitProperty_SupportedNumChannels, kAudioUnitScope_Global, - 0, &supportedChannelsSize, &writable) == noErr - && supportedChannelsSize > 0 - && AudioUnitGetProperty (audioUnit, kAudioUnitProperty_SupportedNumChannels, kAudioUnitScope_Global, - 0, supportedChannels, &supportedChannelsSize) == noErr) { - int explicitNumIns = 0; - int explicitNumOuts = 0; - int maximumNumIns = 0; - int maximumNumOuts = 0; + CFStringRef busNameCF = nullptr; + UInt32 propertySize = sizeof (busNameCF); - for (int i = 0; i < (int) (supportedChannelsSize / sizeof (AUChannelInfo)); ++i) + if (AudioUnitGetProperty (comp, kAudioUnitProperty_ElementName, scope, static_cast (busIdx), &busNameCF, &propertySize) == noErr + && busNameCF != nullptr) { - const int inChannels = (int) supportedChannels[i].inChannels; - const int outChannels = (int) supportedChannels[i].outChannels; + busName = nsStringToJuce ((NSString*) busNameCF); + CFRelease (busNameCF); + } - if (inChannels < 0) - maximumNumIns = jmin (maximumNumIns, inChannels); - else - explicitNumIns = jmax (explicitNumIns, inChannels); + { + AudioChannelLayout auLayout; + propertySize = sizeof (auLayout); - if (outChannels < 0) - maximumNumOuts = jmin (maximumNumOuts, outChannels); - else - explicitNumOuts = jmax (explicitNumOuts, outChannels); + if (AudioUnitGetProperty (comp, kAudioUnitProperty_AudioChannelLayout, scope, static_cast (busIdx), &auLayout, &propertySize) == noErr) + currentLayout = AudioUnitHelpers::CoreAudioChannelLayoutToJuceType (auLayout); } - if ((maximumNumIns == -1 && maximumNumOuts == -1) // (special meaning: any number of ins/outs, as long as they match) - || (maximumNumIns == -2 && maximumNumOuts == -1) // (special meaning: any number of ins/outs, even if they don't match) - || (maximumNumIns == -1 && maximumNumOuts == -2)) + if (currentLayout.isDisabled()) { - numInputBusChannels = numOutputBusChannels = 2; + AudioStreamBasicDescription descr; + propertySize = sizeof (descr); + + if (AudioUnitGetProperty (comp, kAudioUnitProperty_StreamFormat, scope, static_cast (busIdx), &descr, &propertySize) == noErr) + currentLayout = AudioChannelSet::canonicalChannelSet (static_cast (descr.mChannelsPerFrame)); } - else + } + } + + //============================================================================== + void numBusesChanged() override + { + updateSupportedLayouts(); + } + + void updateSupportedLayouts() + { + supportedInLayouts.clear(); + supportedOutLayouts.clear(); + numChannelInfos = 0; + channelInfos.free(); + + for (int dir = 0; dir < 2; ++dir) + { + const bool isInput = (dir == 0); + const AudioUnitScope scope = isInput ? kAudioUnitScope_Input : kAudioUnitScope_Output; + const int n = getElementCount (scope); + + for (int busIdx = 0; busIdx < n; ++busIdx) { - numInputBusChannels = (AudioUnitElement) explicitNumIns; - numOutputBusChannels = (AudioUnitElement) explicitNumOuts; + Array supported; + AudioChannelSet currentLayout; + + { + AudioChannelLayout auLayout; + UInt32 propertySize = sizeof (auLayout); - if (maximumNumIns == -1 || (maximumNumIns < 0 && explicitNumIns <= -maximumNumIns)) - numInputBusChannels = 2; + if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_AudioChannelLayout, scope, static_cast (busIdx), &auLayout, &propertySize) == noErr) + currentLayout = AudioUnitHelpers::CoreAudioChannelLayoutToJuceType (auLayout); + } + + if (currentLayout.isDisabled()) + { + AudioStreamBasicDescription descr; + UInt32 propertySize = sizeof (descr); + + if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_StreamFormat, scope, static_cast (busIdx), &descr, &propertySize) == noErr) + currentLayout = AudioChannelSet::canonicalChannelSet (static_cast (descr.mChannelsPerFrame)); + } + + supported.clear(); + { + UInt32 propertySize = 0; + Boolean writable; - if (maximumNumOuts == -1 || (maximumNumOuts < 0 && explicitNumOuts <= -maximumNumOuts)) - numOutputBusChannels = 2; + if (AudioUnitGetPropertyInfo (audioUnit, kAudioUnitProperty_SupportedChannelLayoutTags, scope, static_cast (busIdx), &propertySize, &writable) == noErr + && propertySize > 0) + { + const size_t numElements = propertySize / sizeof (AudioChannelLayoutTag); + HeapBlock layoutTags (numElements); + propertySize = static_cast (sizeof (AudioChannelLayoutTag) * numElements); + + if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_SupportedChannelLayoutTags, scope, + static_cast (busIdx), layoutTags.getData(), &propertySize) == noErr) + { + for (int j = 0; j < static_cast (numElements); ++j) + { + const AudioChannelLayoutTag tag = layoutTags[j]; + + if (tag != kAudioChannelLayoutTag_UseChannelDescriptions) + supported.addIfNotAlreadyThere (AudioUnitHelpers::CALayoutTagToChannelSet (tag)); + } + + if (supported.size() > 0) + supported.addIfNotAlreadyThere (currentLayout); + } + } + } + + (isInput ? supportedInLayouts : supportedOutLayouts).add (supported); } } - else + { - // (this really means the plugin will take any number of ins/outs as long - // as they are the same) - numInputBusChannels = numOutputBusChannels = 2; + UInt32 propertySize = 0; + Boolean writable; + + if (AudioUnitGetPropertyInfo (audioUnit, kAudioUnitProperty_SupportedNumChannels, kAudioUnitScope_Global, 0, &propertySize, &writable) == noErr + && propertySize > 0) + { + numChannelInfos = propertySize / sizeof (AUChannelInfo); + channelInfos.malloc (static_cast (numChannelInfos)); + propertySize = static_cast (sizeof (AUChannelInfo) * static_cast (numChannelInfos)); + + if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_SupportedNumChannels, kAudioUnitScope_Global, 0, channelInfos.getData(), &propertySize) != noErr) + numChannelInfos = 0; + } + else + { + numChannelInfos = 1; + channelInfos.malloc (static_cast (numChannelInfos)); + channelInfos.getData()->inChannels = -1; + channelInfos.getData()->outChannels = -1; + } } } @@ -2003,7 +2356,8 @@ StringArray AudioUnitPluginFormat::searchPathsForPlugins (const FileSearchPath&, || desc.componentType == kAudioUnitType_MusicEffect || desc.componentType == kAudioUnitType_Effect || desc.componentType == kAudioUnitType_Generator - || desc.componentType == kAudioUnitType_Panner) + || desc.componentType == kAudioUnitType_Panner + || desc.componentType == kAudioUnitType_Mixer) { ignoreUnused (allowPluginsWhichRequireAsynchronousInstantiation); diff --git a/modules/juce_audio_processors/format_types/juce_VST3Common.h b/modules/juce_audio_processors/format_types/juce_VST3Common.h index 3c5351953c..efc4e337c3 100644 --- a/modules/juce_audio_processors/format_types/juce_VST3Common.h +++ b/modules/juce_audio_processors/format_types/juce_VST3Common.h @@ -146,14 +146,14 @@ static inline Steinberg::Vst::Speaker getSpeakerType (AudioChannelSet::ChannelTy case AudioChannelSet::left: return kSpeakerL; case AudioChannelSet::right: return kSpeakerR; case AudioChannelSet::centre: return kSpeakerC; - case AudioChannelSet::subbass: return kSpeakerLfe; + case AudioChannelSet::LFE: return kSpeakerLfe; case AudioChannelSet::leftSurround: return kSpeakerLs; case AudioChannelSet::rightSurround: return kSpeakerRs; case AudioChannelSet::leftCentre: return kSpeakerLc; case AudioChannelSet::rightCentre: return kSpeakerRc; - case AudioChannelSet::surround: return kSpeakerS; - case AudioChannelSet::leftRearSurround: return kSpeakerSl; - case AudioChannelSet::rightRearSurround: return kSpeakerSr; + case AudioChannelSet::centreSurround: return kSpeakerCs; + case AudioChannelSet::leftSurroundRear: return kSpeakerSl; + case AudioChannelSet::rightSurroundRear: return kSpeakerSr; case AudioChannelSet::topMiddle: return (1 << 11); /* kSpeakerTm */ case AudioChannelSet::topFrontLeft: return kSpeakerTfl; case AudioChannelSet::topFrontCentre: return kSpeakerTfc; @@ -161,7 +161,7 @@ static inline Steinberg::Vst::Speaker getSpeakerType (AudioChannelSet::ChannelTy case AudioChannelSet::topRearLeft: return kSpeakerTrl; case AudioChannelSet::topRearCentre: return kSpeakerTrc; case AudioChannelSet::topRearRight: return kSpeakerTrr; - case AudioChannelSet::subbass2: return kSpeakerLfe2; + case AudioChannelSet::LFE2: return kSpeakerLfe2; default: break; } @@ -177,14 +177,14 @@ static inline AudioChannelSet::ChannelType getChannelType (Steinberg::Vst::Speak case kSpeakerL: return AudioChannelSet::left; case kSpeakerR: return AudioChannelSet::right; case kSpeakerC: return AudioChannelSet::centre; - case kSpeakerLfe: return AudioChannelSet::subbass; + case kSpeakerLfe: return AudioChannelSet::LFE; case kSpeakerLs: return AudioChannelSet::leftSurround; case kSpeakerRs: return AudioChannelSet::rightSurround; case kSpeakerLc: return AudioChannelSet::leftCentre; case kSpeakerRc: return AudioChannelSet::rightCentre; - case kSpeakerS: return AudioChannelSet::surround; - case kSpeakerSl: return AudioChannelSet::leftRearSurround; - case kSpeakerSr: return AudioChannelSet::rightRearSurround; + case kSpeakerCs: return AudioChannelSet::centreSurround; + case kSpeakerSl: return AudioChannelSet::leftSurroundRear; + case kSpeakerSr: return AudioChannelSet::rightSurroundRear; case (1 << 11): return AudioChannelSet::topMiddle; /* kSpeakerTm */ case kSpeakerTfl: return AudioChannelSet::topFrontLeft; case kSpeakerTfc: return AudioChannelSet::topFrontCentre; @@ -192,18 +192,33 @@ static inline AudioChannelSet::ChannelType getChannelType (Steinberg::Vst::Speak case kSpeakerTrl: return AudioChannelSet::topRearLeft; case kSpeakerTrc: return AudioChannelSet::topRearCentre; case kSpeakerTrr: return AudioChannelSet::topRearRight; - case kSpeakerLfe2: return AudioChannelSet::subbass2; + case kSpeakerLfe2: return AudioChannelSet::LFE2; default: break; } return AudioChannelSet::unknown; } -static inline Steinberg::Vst::SpeakerArrangement getSpeakerArrangement (const AudioChannelSet& channels) noexcept +static inline Steinberg::Vst::SpeakerArrangement getVst3SpeakerArrangement (const AudioChannelSet& channels) noexcept { - // treat mono as special case as we do not have a designated mono speaker - if (channels == AudioChannelSet::mono()) - return Steinberg::Vst::kSpeakerM; + if (channels == AudioChannelSet::disabled()) return Steinberg::Vst::SpeakerArr::kEmpty; + else if (channels == AudioChannelSet::mono()) return Steinberg::Vst::SpeakerArr::kMono; + else if (channels == AudioChannelSet::stereo()) return Steinberg::Vst::SpeakerArr::kStereo; + else if (channels == AudioChannelSet::createLCR()) return Steinberg::Vst::SpeakerArr::k30Cine; + else if (channels == AudioChannelSet::createLRS()) return Steinberg::Vst::SpeakerArr::k30Music; + else if (channels == AudioChannelSet::createLCRS()) return Steinberg::Vst::SpeakerArr::k40Cine; + else if (channels == AudioChannelSet::create5point0()) return Steinberg::Vst::SpeakerArr::k50; + else if (channels == AudioChannelSet::create5point1()) return Steinberg::Vst::SpeakerArr::k51; + else if (channels == AudioChannelSet::create6point0()) return Steinberg::Vst::SpeakerArr::k60Cine; + else if (channels == AudioChannelSet::create6point1()) return Steinberg::Vst::SpeakerArr::k61Cine; + else if (channels == AudioChannelSet::create6point0Music()) return Steinberg::Vst::SpeakerArr::k60Music; + else if (channels == AudioChannelSet::create6point1Music()) return Steinberg::Vst::SpeakerArr::k61Music; + else if (channels == AudioChannelSet::create7point0()) return Steinberg::Vst::SpeakerArr::k70Music; + else if (channels == AudioChannelSet::create7point0SDDS()) return Steinberg::Vst::SpeakerArr::k70Cine; + else if (channels == AudioChannelSet::create7point1()) return Steinberg::Vst::SpeakerArr::k71CineSideFill; + else if (channels == AudioChannelSet::create7point1SDDS()) return Steinberg::Vst::SpeakerArr::k71Cine; + else if (channels == AudioChannelSet::ambisonic()) return Steinberg::Vst::SpeakerArr::kBFormat; + else if (channels == AudioChannelSet::quadraphonic()) return Steinberg::Vst::SpeakerArr::k40Music; Steinberg::Vst::SpeakerArrangement result = 0; @@ -217,9 +232,24 @@ static inline Steinberg::Vst::SpeakerArrangement getSpeakerArrangement (const Au static inline AudioChannelSet getChannelSetForSpeakerArrangement (Steinberg::Vst::SpeakerArrangement arr) noexcept { - // treat mono as special case as we do not have a designated mono speaker - if (arr == Steinberg::Vst::kSpeakerM) - return AudioChannelSet::mono(); + if (arr == Steinberg::Vst::SpeakerArr::kEmpty) return AudioChannelSet::disabled(); + else if (arr == Steinberg::Vst::SpeakerArr::kMono) return AudioChannelSet::mono(); + else if (arr == Steinberg::Vst::SpeakerArr::kStereo) return AudioChannelSet::stereo(); + else if (arr == Steinberg::Vst::SpeakerArr::k30Cine) return AudioChannelSet::createLCR(); + else if (arr == Steinberg::Vst::SpeakerArr::k30Music) return AudioChannelSet::createLRS(); + else if (arr == Steinberg::Vst::SpeakerArr::k40Cine) return AudioChannelSet::createLCRS(); + else if (arr == Steinberg::Vst::SpeakerArr::k50) return AudioChannelSet::create5point0(); + else if (arr == Steinberg::Vst::SpeakerArr::k51) return AudioChannelSet::create5point1(); + else if (arr == Steinberg::Vst::SpeakerArr::k60Cine) return AudioChannelSet::create6point0(); + else if (arr == Steinberg::Vst::SpeakerArr::k61Cine) return AudioChannelSet::create6point1(); + else if (arr == Steinberg::Vst::SpeakerArr::k60Music) return AudioChannelSet::create6point0Music(); + else if (arr == Steinberg::Vst::SpeakerArr::k61Music) return AudioChannelSet::create6point1Music(); + else if (arr == Steinberg::Vst::SpeakerArr::k70Music) return AudioChannelSet::create7point0(); + else if (arr == Steinberg::Vst::SpeakerArr::k70Cine) return AudioChannelSet::create7point0SDDS(); + else if (arr == Steinberg::Vst::SpeakerArr::k71CineSideFill) return AudioChannelSet::create7point1(); + else if (arr == Steinberg::Vst::SpeakerArr::k71Cine) return AudioChannelSet::create7point1SDDS(); + else if (arr == Steinberg::Vst::SpeakerArr::kBFormat) return AudioChannelSet::ambisonic(); + else if (arr == Steinberg::Vst::SpeakerArr::k40Music) return AudioChannelSet::quadraphonic(); AudioChannelSet result; @@ -470,12 +500,12 @@ struct VST3BufferExchange vstBuffers.silenceFlags = 0; } - static void mapArrangementToBusses (int& channelIndexOffset, int index, + static void mapArrangementToBuses (int& channelIndexOffset, int index, Array& result, - BusMap& busMapToUse, Steinberg::Vst::SpeakerArrangement arrangement, + BusMap& busMapToUse, const AudioChannelSet& arrangement, AudioBuffer& source) { - const int numChansForBus = BigInteger ((juce::int64) arrangement).countNumberOfSetBits(); + const int numChansForBus = arrangement.size(); if (index >= result.size()) result.add (Steinberg::Vst::AudioBusBuffers()); @@ -491,26 +521,26 @@ struct VST3BufferExchange channelIndexOffset += numChansForBus; } - static inline void mapBufferToBusses (Array& result, BusMap& busMapToUse, - const Array& arrangements, + static inline void mapBufferToBuses (Array& result, BusMap& busMapToUse, + const Array& arrangements, AudioBuffer& source) { int channelIndexOffset = 0; for (int i = 0; i < arrangements.size(); ++i) - mapArrangementToBusses (channelIndexOffset, i, result, busMapToUse, + mapArrangementToBuses (channelIndexOffset, i, result, busMapToUse, arrangements.getUnchecked (i), source); } - static inline void mapBufferToBusses (Array& result, + static inline void mapBufferToBuses (Array& result, Steinberg::Vst::IAudioProcessor& processor, - BusMap& busMapToUse, bool isInput, int numBusses, + BusMap& busMapToUse, bool isInput, int numBuses, AudioBuffer& source) { int channelIndexOffset = 0; - for (int i = 0; i < numBusses; ++i) - mapArrangementToBusses (channelIndexOffset, i, + for (int i = 0; i < numBuses; ++i) + mapArrangementToBuses (channelIndexOffset, i, result, busMapToUse, getArrangementForBus (&processor, isInput, i), source); diff --git a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp index 2ba2b14fcf..fbd73243fa 100644 --- a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp @@ -121,7 +121,7 @@ static void createPluginDescription (PluginDescription& description, description.isInstrument = description.category.containsIgnoreCase ("Instrument"); // This seems to be the only way to find that out! ARGH! } -static int getNumSingleDirectionBussesFor (Vst::IComponent* component, +static int getNumSingleDirectionBusesFor (Vst::IComponent* component, bool checkInputs, bool checkAudioChannels) { @@ -148,13 +148,13 @@ static int getNumSingleDirectionChannelsFor (Vst::IComponent* component, { Vst::BusInfo busInfo; warnOnFailure (component->getBusInfo (mediaType, direction, i, busInfo)); - numChannels += (int) busInfo.channelCount; + numChannels += ((busInfo.flags & Vst::BusInfo::kDefaultActive) != 0 ? (int) busInfo.channelCount : 0); } return numChannels; } -static void setStateForAllBussesOfType (Vst::IComponent* component, +static void setStateForAllBusesOfType (Vst::IComponent* component, bool state, bool activateInputs, bool activateAudioChannels) @@ -361,7 +361,7 @@ class VST3HostContext : public Vst::IComponentHandler, // From VST V3.0.0 public Vst::IUnitHandler { public: - VST3HostContext (VST3PluginInstance* pluginInstance) : owner (pluginInstance) + VST3HostContext () : plugin (nullptr) { appName = File::getSpecialLocation (File::currentApplicationFile).getFileNameWithoutExtension(); attributeList = new AttributeList (this); @@ -381,68 +381,78 @@ public: //============================================================================== tresult PLUGIN_API beginEdit (Vst::ParamID paramID) override { - const int index = getIndexOfParamID (paramID); + if (plugin != nullptr) + { + const int index = getIndexOfParamID (paramID); - if (index < 0) - return kResultFalse; + if (index < 0) + return kResultFalse; + + plugin->beginParameterChangeGesture (index); + } - owner->beginParameterChangeGesture (index); return kResultTrue; } tresult PLUGIN_API performEdit (Vst::ParamID paramID, Vst::ParamValue valueNormalized) override { - const int index = getIndexOfParamID (paramID); + if (plugin != nullptr) + { + const int index = getIndexOfParamID (paramID); - if (index < 0) - return kResultFalse; + if (index < 0) + return kResultFalse; - owner->sendParamChangeMessageToListeners (index, (float) valueNormalized); + plugin->sendParamChangeMessageToListeners (index, (float) valueNormalized); - { - Steinberg::int32 eventIndex; - owner->inputParameterChanges->addParameterData (paramID, eventIndex)->addPoint (0, valueNormalized, eventIndex); - } + { + Steinberg::int32 eventIndex; + plugin->inputParameterChanges->addParameterData (paramID, eventIndex)->addPoint (0, valueNormalized, eventIndex); + } - // did the plug-in already update the parameter internally - if (owner->editController->getParamNormalized (paramID) != (float) valueNormalized) - return owner->editController->setParamNormalized (paramID, valueNormalized); + // did the plug-in already update the parameter internally + if (plugin->editController->getParamNormalized (paramID) != (float) valueNormalized) + return plugin->editController->setParamNormalized (paramID, valueNormalized); + } return kResultTrue; } tresult PLUGIN_API endEdit (Vst::ParamID paramID) override { - const int index = getIndexOfParamID (paramID); + if (plugin != nullptr) + { + const int index = getIndexOfParamID (paramID); - if (index < 0) - return kResultFalse; + if (index < 0) + return kResultFalse; - owner->endParameterChangeGesture (index); + plugin->endParameterChangeGesture (index); + } return kResultTrue; } tresult PLUGIN_API restartComponent (Steinberg::int32 flags) override { - if (owner != nullptr) + if (plugin != nullptr) { if (hasFlag (flags, Vst::kReloadComponent)) - owner->reset(); + plugin->reset(); if (hasFlag (flags, Vst::kIoChanged)) { - const double sampleRate = owner->getSampleRate(); - const int blockSize = owner->getBlockSize(); + const double sampleRate = plugin->getSampleRate(); + const int blockSize = plugin->getBlockSize(); - owner->prepareToPlay (sampleRate >= 8000 ? sampleRate : 44100.0, + plugin->prepareToPlay (sampleRate >= 8000 ? sampleRate : 44100.0, blockSize > 0 ? blockSize : 1024); } if (hasFlag (flags, Vst::kLatencyChanged)) - if (owner->processor != nullptr) - owner->setLatencySamples (jmax (0, (int) owner->processor->getLatencySamples())); + if (plugin->processor != nullptr) + plugin->setLatencySamples (jmax (0, (int) plugin->processor->getLatencySamples())); - owner->updateHostDisplay(); + plugin->updateHostDisplay(); return kResultTrue; } @@ -475,6 +485,12 @@ public: return kResultFalse; } + void setPlugin (VST3PluginInstance* instance) + { + jassert (plugin == nullptr); + plugin = instance; + } + //============================================================================== class ContextMenu : public Vst::IContextMenu { @@ -637,8 +653,8 @@ public: Vst::IContextMenu* PLUGIN_API createContextMenu (IPlugView*, const Vst::ParamID*) override { - if (owner != nullptr) - return new ContextMenu (*owner); + if (plugin != nullptr) + return new ContextMenu (*plugin); return nullptr; } @@ -696,7 +712,9 @@ public: tresult PLUGIN_API notifyProgramListChange (Vst::ProgramListID, Steinberg::int32) override { - owner->syncProgramNames(); + if (plugin != nullptr) + plugin->syncProgramNames(); + return kResultTrue; } @@ -723,7 +741,7 @@ public: private: //============================================================================== - VST3PluginInstance* const owner; + VST3PluginInstance* plugin; Atomic refCount; String appName; @@ -732,19 +750,19 @@ private: int getIndexOfParamID (Vst::ParamID paramID) { - if (owner == nullptr || owner->editController == nullptr) + if (plugin == nullptr || plugin->editController == nullptr) return -1; int result = getMappedParamID (paramID); if (result < 0) { - const int numParams = owner->editController->getParameterCount(); + const int numParams = plugin->editController->getParameterCount(); for (int i = 0; i < numParams; ++i) { Vst::ParameterInfo paramInfo; - owner->editController->getParameterInfo (i, paramInfo); + plugin->editController->getParameterInfo (i, paramInfo); paramToIndexMap[paramInfo.id] = i; } @@ -1296,7 +1314,7 @@ public: if (pluginFactory != nullptr) { - ComSmartPtr host (new VST3HostContext (nullptr)); + ComSmartPtr host (new VST3HostContext()); DescriptionLister lister (host, pluginFactory); const Result result (lister.findDescriptionsAndPerform (File (fileOrIdentifier))); @@ -1358,7 +1376,7 @@ private: if (pluginFactory != nullptr) { - ComSmartPtr host (new VST3HostContext (nullptr)); + ComSmartPtr host (new VST3HostContext()); MatchingDescriptionFinder finder (host, pluginFactory, description); const Result result (finder.findDescriptionsAndPerform (f)); @@ -1588,24 +1606,205 @@ private: #pragma warning (disable: 4996) // warning about overriding deprecated methods #endif +//============================================================================== +struct VST3ComponentHolder +{ + VST3ComponentHolder (const VST3ModuleHandle::Ptr& handle) + : module (handle), + isComponentInitialised (false) + { + host = new VST3HostContext(); + } + + ~VST3ComponentHolder() + { + terminate(); + + component = nullptr; + host = nullptr; + factory = nullptr; + module = nullptr; + } + + // transfers ownership to the plugin instance! + AudioPluginInstance* createPluginInstance (); + + bool fetchController (ComSmartPtr& editController) + { + if (! isComponentInitialised && ! initialise()) + return false; + + // Get the IEditController: + TUID controllerCID = { 0 }; + + if (component->getControllerClassId (controllerCID) == kResultTrue && FUID (controllerCID).isValid()) + editController.loadFrom (factory, controllerCID); + + if (editController == nullptr) + { + // Try finding the IEditController the long way around: + const Steinberg::int32 numClasses = factory->countClasses(); + for (Steinberg::int32 i = 0; i < numClasses; ++i) + { + PClassInfo classInfo; + factory->getClassInfo (i, &classInfo); + + if (std::strcmp (classInfo.category, kVstComponentControllerClass) == 0) + editController.loadFrom (factory, classInfo.cid); + } + } + + if (editController == nullptr) + editController.loadFrom (component); + + return (editController != nullptr); + } + + //============================================================================== + void fillInPluginDescription (PluginDescription& description) const + { + jassert (module != nullptr && isComponentInitialised); + + PFactoryInfo factoryInfo; + factory->getFactoryInfo (&factoryInfo); + + int classIdx; + if ((classIdx = getClassIndex (module->name)) >= 0) + { + PClassInfo info; + bool success = (factory->getClassInfo (classIdx, &info) == kResultOk); + ignoreUnused (success); + jassert (success); + + ComSmartPtr pf2; + ComSmartPtr pf3; + + ScopedPointer info2; + ScopedPointer infoW; + + if (pf2.loadFrom (factory)) + { + info2 = new PClassInfo2(); + pf2->getClassInfo2 (classIdx, info2); + } + else + { + info2 = nullptr; + } + + if (pf3.loadFrom (factory)) + { + pf3->setHostContext (host->getFUnknown()); + infoW = new PClassInfoW(); + pf3->getClassInfoUnicode (classIdx, infoW); + } + else + { + infoW = nullptr; + } + + Vst::BusInfo bus; + int totalNumInputChannels = 0, totalNumOutputChannels = 0; + + int n = component->getBusCount(Vst::kAudio, Vst::kInput); + for (int i = 0; i < n; ++i) + if (component->getBusInfo (Vst::kAudio, Vst::kInput, i, bus) == kResultOk) + totalNumInputChannels += ((bus.flags & Vst::BusInfo::kDefaultActive) != 0 ? bus.channelCount : 0); + + n = component->getBusCount(Vst::kAudio, Vst::kOutput); + for (int i = 0; i < n; ++i) + if (component->getBusInfo (Vst::kAudio, Vst::kOutput, i, bus) == kResultOk) + totalNumOutputChannels += ((bus.flags & Vst::BusInfo::kDefaultActive) != 0 ? bus.channelCount : 0); + + createPluginDescription (description, module->file, + factoryInfo.vendor, module->name, + info, info2, infoW, + totalNumInputChannels, + totalNumOutputChannels); + } + + jassertfalse; + } + + //============================================================================== + bool initialise() + { + if (isComponentInitialised) return true; + + #if JUCE_WINDOWS + // On Windows it's highly advisable to create your plugins using the message thread, + // because many plugins need a chance to create HWNDs that will get their messages + // delivered by the main message thread, and that's not possible from a background thread. + jassert (MessageManager::getInstance()->isThisTheMessageThread()); + #endif + + factory = ComSmartPtr (module->getPluginFactory()); + + int classIdx; + if ((classIdx = getClassIndex (module->name)) < 0) + return false; + + PClassInfo info; + if (factory->getClassInfo (classIdx, &info) != kResultOk) + return false; + + if (! component.loadFrom (factory, info.cid) || component == nullptr) + return false; + + if (warnOnFailure (component->initialize (host->getFUnknown())) != kResultOk) + return false; + + isComponentInitialised = true; + + return true; + } + + void terminate() + { + if (isComponentInitialised) component->terminate(); + isComponentInitialised = false; + } + + //============================================================================== + int getClassIndex (const String& className) const + { + PClassInfo info; + const Steinberg::int32 numClasses = factory->countClasses(); + + for (Steinberg::int32 j = 0; j < numClasses; ++j) + if (factory->getClassInfo (j, &info) == kResultOk + && std::strcmp (info.category, kVstAudioEffectClass) == 0 + && toString (info.name).trim() == className) + return j; + + return -1; + } + + //============================================================================== + VST3ModuleHandle::Ptr module; + ComSmartPtr factory; + ComSmartPtr host; + ComSmartPtr component; + + bool isComponentInitialised; +}; + //============================================================================== class VST3PluginInstance : public AudioPluginInstance { public: - VST3PluginInstance (const VST3ModuleHandle::Ptr& handle) - : module (handle), - numInputAudioBusses (0), - numOutputAudioBusses (0), + VST3PluginInstance (VST3ComponentHolder* componentHolder) + : AudioPluginInstance (getBusProperties (componentHolder->component)), + holder (componentHolder), programParameterID ((Vst::ParamID) -1), inputParameterChanges (new ParamValueQueueList()), outputParameterChanges (new ParamValueQueueList()), midiInputs (new MidiEventList()), midiOutputs (new MidiEventList()), - isComponentInitialised (false), isControllerInitialised (false), isActive (false) { - host = new VST3HostContext (this); + holder->host->setPlugin (this); } ~VST3PluginInstance() @@ -1623,7 +1822,7 @@ public: editController->setComponentHandler (nullptr); if (isControllerInitialised) editController->terminate(); - if (isComponentInitialised) component->terminate(); + holder->terminate(); componentConnection = nullptr; editControllerConnection = nullptr; @@ -1635,9 +1834,6 @@ public: processor = nullptr; editController2 = nullptr; editController = nullptr; - component = nullptr; - host = nullptr; - module = nullptr; } bool initialise() @@ -1649,20 +1845,20 @@ public: jassert (MessageManager::getInstance()->isThisTheMessageThread()); #endif - ComSmartPtr factory (module->getPluginFactory()); - - PFactoryInfo factoryInfo; - factory->getFactoryInfo (&factoryInfo); - company = toString (factoryInfo.vendor).trim(); - - if (! fetchComponentAndController (factory, factory->countClasses())) + if (! holder->initialise()) return false; + if (! isControllerInitialised) + { + if (! holder->fetchController (editController)) + return false; + } + // (May return an error if the plugin combines the IComponent and IEditController implementations) - editController->initialize (host->getFUnknown()); + editController->initialize (holder->host->getFUnknown()); isControllerInitialised = true; - editController->setComponentHandler (host); + editController->setComponentHandler (holder->host); grabInformationObjects(); interconnectComponentAndController(); synchroniseStates(); @@ -1671,40 +1867,46 @@ public: return true; } - //============================================================================== - void fillInPluginDescription (PluginDescription& description) const override - { - jassert (module != nullptr); - - createPluginDescription (description, module->file, - company, module->name, - *info, info2, infoW, - getTotalNumInputChannels(), - getTotalNumOutputChannels()); - } - - void* getPlatformSpecificData() override { return component; } + void* getPlatformSpecificData() override { return holder->component; } void refreshParameterList() override {} //============================================================================== const String getName() const override { + VST3ModuleHandle::Ptr& module = holder->module; return module != nullptr ? module->name : String(); } - void repopulateArrangements() + void repopulateArrangements (Array& inputArrangements, Array& outputArrangements) const { inputArrangements.clearQuick(); outputArrangements.clearQuick(); - // NB: Some plugins need a valid arrangement despite specifying 0 for their I/O busses - for (int i = 0; i < jmax (1, numInputAudioBusses); ++i) + const int numInputAudioBuses = getBusCount (true); + const int numOutputAudioBuses = getBusCount (false); + + for (int i = 0; i < numInputAudioBuses; ++i) inputArrangements.add (getArrangementForBus (processor, true, i)); - for (int i = 0; i < jmax (1, numOutputAudioBusses); ++i) + for (int i = 0; i < numOutputAudioBuses; ++i) outputArrangements.add (getArrangementForBus (processor, false, i)); } + void processorLayoutsToArrangements (Array& inputArrangements, Array& outputArrangements) + { + inputArrangements.clearQuick(); + outputArrangements.clearQuick(); + + const int numInputBuses = getBusCount (true); + const int numOutputBuses = getBusCount (false); + + for (int i = 0; i < numInputBuses; ++i) + inputArrangements.add (getVst3SpeakerArrangement (getBus (true, i)->getLastEnabledLayout())); + + for (int i = 0; i < numOutputBuses; ++i) + outputArrangements.add (getVst3SpeakerArrangement (getBus (false, i)->getLastEnabledLayout())); + } + void prepareToPlay (double newSampleRate, int estimatedSamplesPerBlock) override { // Avoid redundantly calling things like setActive, which can be a heavy-duty call for some plugins: @@ -1723,41 +1925,37 @@ public: warnOnFailure (processor->setupProcessing (setup)); - if (! isComponentInitialised) - isComponentInitialised = component->initialize (host->getFUnknown()) == kResultTrue; + holder->initialise(); + editController->setComponentHandler (holder->host); - editController->setComponentHandler (host); - if (inputArrangements.size() <= 0 || outputArrangements.size() <= 0) - repopulateArrangements(); + Array inputArrangements, outputArrangements; + processorLayoutsToArrangements (inputArrangements, outputArrangements); - warnOnFailure (processor->setBusArrangements (inputArrangements.getRawDataPointer(), numInputAudioBusses, - outputArrangements.getRawDataPointer(), numOutputAudioBusses)); + warnOnFailure (processor->setBusArrangements (inputArrangements.getRawDataPointer(), inputArrangements.size(), + outputArrangements.getRawDataPointer(), outputArrangements.size())); - // Update the num. busses in case the configuration has been modified by the plugin. (May affect number of channels!): - const int newNumInputAudioBusses = getNumSingleDirectionBussesFor (component, true, true); - const int newNumOutputAudioBusses = getNumSingleDirectionBussesFor (component, false, true); - - // Repopulate arrangements if the number of busses have changed: - if (numInputAudioBusses != newNumInputAudioBusses - || numOutputAudioBusses != newNumOutputAudioBusses) - { - numInputAudioBusses = newNumInputAudioBusses; - numOutputAudioBusses = newNumOutputAudioBusses; + Array actualInArr, actualOutArr; + repopulateArrangements (actualInArr, actualOutArr); - repopulateArrangements(); - } + jassert (actualInArr == inputArrangements && actualOutArr == outputArrangements); // Needed for having the same sample rate in processBlock(); some plugins need this! - setPlayConfigDetails (getNumSingleDirectionChannelsFor (component, true, true), - getNumSingleDirectionChannelsFor (component, false, true), - newSampleRate, estimatedSamplesPerBlock); + setRateAndBufferSizeDetails (newSampleRate, estimatedSamplesPerBlock); + + const int numInputBuses = getBusCount (true); + const int numOutputBuses = getBusCount (false); + + for (int i = 0; i < numInputBuses; ++i) + warnOnFailure (holder->component->activateBus (Vst::kAudio, Vst::kInput, i, getBus (true, i)->isEnabled() ? 1 : 0)); - setStateForAllBusses (true); + for (int i = 0; i < numOutputBuses; ++i) + warnOnFailure (holder->component->activateBus (Vst::kAudio, Vst::kOutput, i, getBus (false, i)->isEnabled() ? 1 : 0)); setLatencySamples (jmax (0, (int) processor->getLatencySamples())); + cachedBusLayouts = getBusesLayout(); - warnOnFailure (component->setActive (true)); + warnOnFailure (holder->component->setActive (true)); warnOnFailure (processor->setProcessing (true)); isActive = true; @@ -1770,13 +1968,13 @@ public: isActive = false; - setStateForAllBusses (false); + setStateForAllMidiBuses (false); if (processor != nullptr) warnOnFailure (processor->setProcessing (false)); - if (component != nullptr) - warnOnFailure (component->setActive (false)); + if (holder->component != nullptr) + warnOnFailure (holder->component->setActive (false)); } bool supportsDoublePrecisionProcessing() const override @@ -1807,11 +2005,14 @@ public: using namespace Vst; const int numSamples = buffer.getNumSamples(); + const int numInputAudioBuses = getBusCount (true); + const int numOutputAudioBuses = getBusCount (false); + ProcessData data; data.processMode = isNonRealtime() ? kOffline : kRealtime; data.symbolicSampleSize = sampleSize; - data.numInputs = numInputAudioBusses; - data.numOutputs = numOutputAudioBusses; + data.numInputs = numInputAudioBuses; + data.numOutputs = numOutputAudioBuses; data.inputParameterChanges = inputParameterChanges; data.outputParameterChanges = outputParameterChanges; data.numSamples = (Steinberg::int32) numSamples; @@ -1831,13 +2032,94 @@ public: inputParameterChanges->clearAllQueues(); } + //============================================================================== + bool canAddBus (bool) const override { return false; } + bool canRemoveBus (bool) const override { return false; } + + bool isBusesLayoutSupported (const BusesLayout& layouts) const override + { + // if the processor is not active, we ask the underlying plug-in if the + // layout is actually supported + if (! isActive) + return canApplyBusesLayout (layouts); + + // not much we can do to check the layout while the audio processor is running + // Let's at least check if it is a VST3 compatible layout + for (int dir = 0; dir < 2; ++dir) + { + const bool isInput = (dir == 0); + const int n = getBusCount (isInput); + for (int i = 0; i < n; ++i) + if (getChannelLayoutOfBus(isInput, i).isDiscreteLayout()) + return false; + } + + return true; + } + + bool syncBusLayouts (const BusesLayout& layouts) const + { + for (int dir = 0; dir < 2; ++dir) + { + const bool isInput = (dir == 0); + const int n = getBusCount (isInput); + const Vst::BusDirection vstDir = (isInput ? Vst::kInput : Vst::kOutput); + + for (int busIdx = 0; busIdx < n; ++busIdx) + { + const bool isEnabled = (! layouts.getChannelSet (isInput, busIdx).isDisabled()); + if (holder->component->activateBus (Vst::kAudio, vstDir, busIdx, (isEnabled ? 1 : 0)) != kResultOk) + return false; + } + } + + Array inputArrangements, outputArrangements; + + for (int i = 0; i < layouts.inputBuses.size(); ++i) + { + const AudioChannelSet& requested = layouts.getChannelSet (true, i); + inputArrangements.add (getVst3SpeakerArrangement (requested.isDisabled() ? getBus (true, i)->getLastEnabledLayout() : requested)); + } + + for (int i = 0; i < layouts.outputBuses.size(); ++i) + { + const AudioChannelSet& requested = layouts.getChannelSet (false, i); + outputArrangements.add (getVst3SpeakerArrangement (requested.isDisabled() ? getBus (false, i)->getLastEnabledLayout() : requested)); + } + + if (processor->setBusArrangements (inputArrangements.getRawDataPointer(), inputArrangements.size(), + outputArrangements.getRawDataPointer(), outputArrangements.size()) != kResultTrue) + return false; + + // check if the layout matches the request + Array actualIn, actualOut; + repopulateArrangements (actualIn, actualOut); + + return (actualIn == inputArrangements && actualOut == outputArrangements); + } + + bool canApplyBusesLayout (const BusesLayout& layouts) const override + { + // someone tried to change the layout while the AudioProcessor is running + // call releaseResources first! + jassert (! isActive); + + bool result = syncBusLayouts (layouts); + + // didn't succeed? Make sure it's back in it's original state + if (! result) + syncBusLayouts (getBusesLayout()); + + return result; + } + //============================================================================== String getChannelName (int channelIndex, bool forInput, bool forAudioChannel) const { - const int numBusses = getNumSingleDirectionBussesFor (component, forInput, forAudioChannel); + const int numBuses = getNumSingleDirectionBusesFor (holder->component, forInput, forAudioChannel); int numCountedChannels = 0; - for (int i = 0; i < numBusses; ++i) + for (int i = 0; i < numBuses; ++i) { Vst::BusInfo busInfo (getBusInfo (forInput, forAudioChannel, i)); @@ -1976,12 +2258,12 @@ public: //============================================================================== void reset() override { - if (component != nullptr && processor != nullptr) + if (holder->component != nullptr && processor != nullptr) { processor->setProcessing (false); - component->setActive (false); + holder->component->setActive (false); - component->setActive (true); + holder->component->setActive (true); processor->setProcessing (true); } } @@ -1991,7 +2273,7 @@ public: { XmlElement state ("VST3PluginState"); - appendStateFrom (state, component, "IComponent"); + appendStateFrom (state, holder->component, "IComponent"); appendStateFrom (state, editController, "IEditController"); AudioProcessor::copyXmlToBinary (state, destData); @@ -2005,8 +2287,8 @@ public: { ComSmartPtr s (createMemoryStreamForState (*head, "IComponent")); - if (s != nullptr && component != nullptr) - component->setState (s); + if (s != nullptr && holder->component != nullptr) + holder->component->setState (s); if (editController != nullptr) { @@ -2021,6 +2303,12 @@ public: } } + //============================================================================== + void fillInPluginDescription (PluginDescription& description) const override + { + holder->fillInPluginDescription (description); + } + /** @note Not applicable to VST3 */ void getCurrentProgramStateInformation (MemoryBlock& destData) override { @@ -2152,10 +2440,9 @@ public: private: //============================================================================== - VST3ModuleHandle::Ptr module; + ScopedPointer holder; friend VST3HostContext; - ComSmartPtr host; // Information objects: String company; @@ -2164,7 +2451,6 @@ private: ScopedPointer infoW; // Rudimentary interfaces: - ComSmartPtr component; ComSmartPtr editController; ComSmartPtr editController2; ComSmartPtr processor; @@ -2176,14 +2462,13 @@ private: ComSmartPtr componentConnection; ComSmartPtr editControllerConnection; - /** The number of IO busses MUST match that of the plugin, + /** The number of IO buses MUST match that of the plugin, even if there aren't enough channels to process, as very poorly specified by the Steinberg SDK */ - int numInputAudioBusses, numOutputAudioBusses; - Array inputArrangements, outputArrangements; // Caching to improve performance and to avoid possible non-thread-safe calls to getBusArrangements(). VST3FloatAndDoubleBusMapComposite inputBusMap, outputBusMap; - Array inputBusses, outputBusses; + Array inputBuses, outputBuses; + AudioProcessor::BusesLayout cachedBusLayouts; StringArray programNames; Vst::ParamID programParameterID; @@ -2226,117 +2511,13 @@ private: ComSmartPtr inputParameterChanges, outputParameterChanges; ComSmartPtr midiInputs, midiOutputs; Vst::ProcessContext timingInfo; //< Only use this in processBlock()! - bool isComponentInitialised, isControllerInitialised, isActive; + bool isControllerInitialised, isActive; //============================================================================== - bool fetchComponentAndController (IPluginFactory* factory, const Steinberg::int32 numClasses) - { - jassert (numClasses >= 0); // The plugin must provide at least an IComponent and IEditController! - - for (Steinberg::int32 j = 0; j < numClasses; ++j) - { - info = new PClassInfo(); - factory->getClassInfo (j, info); - - if (std::strcmp (info->category, kVstAudioEffectClass) != 0) - continue; - - const String name (toString (info->name).trim()); - - if (module->name != name) - continue; - - { - ComSmartPtr pf2; - ComSmartPtr pf3; - - if (pf2.loadFrom (factory)) - { - info2 = new PClassInfo2(); - pf2->getClassInfo2 (j, info2); - } - else - { - info2 = nullptr; - } - - if (pf3.loadFrom (factory)) - { - pf3->setHostContext (host->getFUnknown()); - infoW = new PClassInfoW(); - pf3->getClassInfoUnicode (j, infoW); - } - else - { - infoW = nullptr; - } - } - - bool failed = true; - - if (component.loadFrom (factory, info->cid) && component != nullptr) - { - warnOnFailure (component->setIoMode (isNonRealtime() ? Vst::kOffline : Vst::kRealtime)); - - if (warnOnFailure (component->initialize (host->getFUnknown())) != kResultOk) - return false; - - isComponentInitialised = true; - - // Get the IEditController: - TUID controllerCID = { 0 }; - - if (component->getControllerClassId (controllerCID) == kResultTrue && FUID (controllerCID).isValid()) - editController.loadFrom (factory, controllerCID); - - if (editController == nullptr) - { - // Try finding the IEditController the long way around: - for (Steinberg::int32 i = 0; i < numClasses; ++i) - { - PClassInfo classInfo; - factory->getClassInfo (i, &classInfo); - - if (std::strcmp (classInfo.category, kVstComponentControllerClass) == 0) - editController.loadFrom (factory, classInfo.cid); - } - } - - if (editController == nullptr) - editController.loadFrom (component); - - failed = editController == nullptr; - } - - if (failed) - { - jassertfalse; // The plugin won't function without a valid IComponent and IEditController implementation! - - if (component != nullptr) - { - component->terminate(); - component = nullptr; - } - - if (editController != nullptr) - { - editController->terminate(); - editController = nullptr; - } - - break; - } - - return true; - } - - return false; - } - /** Some plugins need to be "connected" to intercommunicate between their implemented classes */ void interconnectComponentAndController() { - componentConnection.loadFrom (component); + componentConnection.loadFrom (holder->component); editControllerConnection.loadFrom (editController); if (componentConnection != nullptr && editControllerConnection != nullptr) @@ -2350,20 +2531,20 @@ private: { Steinberg::MemoryStream stream; - if (component->getState (&stream) == kResultTrue) + if (holder->component->getState (&stream) == kResultTrue) if (stream.seek (0, Steinberg::IBStream::kIBSeekSet, nullptr) == kResultTrue) warnOnFailure (editController->setComponentState (&stream)); } void grabInformationObjects() { - processor.loadFrom (component); - unitInfo.loadFrom (component); - programListData.loadFrom (component); - unitData.loadFrom (component); - editController2.loadFrom (component); - componentHandler.loadFrom (component); - componentHandler2.loadFrom (component); + processor.loadFrom (holder->component); + unitInfo.loadFrom (holder->component); + programListData.loadFrom (holder->component); + unitData.loadFrom (holder->component); + editController2.loadFrom (holder->component); + componentHandler.loadFrom (holder->component); + componentHandler2.loadFrom (holder->component); if (processor == nullptr) processor.loadFrom (editController); if (unitInfo == nullptr) unitInfo.loadFrom (editController); @@ -2374,17 +2555,15 @@ private: if (componentHandler2 == nullptr) componentHandler2.loadFrom (editController); } - void setStateForAllBusses (bool newState) + void setStateForAllMidiBuses (bool newState) { - setStateForAllBussesOfType (component, newState, true, true); // Activate/deactivate audio inputs - setStateForAllBussesOfType (component, newState, false, true); // Activate/deactivate audio outputs - setStateForAllBussesOfType (component, newState, true, false); // Activate/deactivate MIDI inputs - setStateForAllBussesOfType (component, newState, false, false); // Activate/deactivate MIDI outputs + setStateForAllBusesOfType (holder->component, newState, true, false); // Activate/deactivate MIDI inputs + setStateForAllBusesOfType (holder->component, newState, false, false); // Activate/deactivate MIDI outputs } void setupIO() { - setStateForAllBusses (true); + setStateForAllMidiBuses (true); Vst::ProcessSetup setup; setup.symbolicSampleSize = Vst::kSample32; @@ -2394,12 +2573,44 @@ private: warnOnFailure (processor->setupProcessing (setup)); - numInputAudioBusses = getNumSingleDirectionBussesFor (component, true, true); - numOutputAudioBusses = getNumSingleDirectionBussesFor (component, false, true); + cachedBusLayouts = getBusesLayout(); + setRateAndBufferSizeDetails (setup.sampleRate, (int) setup.maxSamplesPerBlock); + } + + static AudioProcessor::BusesProperties getBusProperties (ComSmartPtr& component) + { + AudioProcessor::BusesProperties busProperties; + ComSmartPtr processor; + processor.loadFrom (component.get()); + + for (int dirIdx = 0; dirIdx < 2; ++dirIdx) + { + const bool isInput = (dirIdx == 0); + const Vst::BusDirection dir = (isInput ? Vst::kInput : Vst::kOutput); + const int numBuses = component->getBusCount (Vst::kAudio, dir); + + for (int i = 0; i < numBuses; ++i) + { + Vst::BusInfo info; + + if (component->getBusInfo (Vst::kAudio, dir, (Steinberg::int32) i, info) != kResultOk) + continue; + + if (info.channelCount == 0) + continue; + + AudioChannelSet layout = AudioChannelSet::discreteChannels (info.channelCount); + + Vst::SpeakerArrangement arr; + if (processor != nullptr && processor->getBusArrangement (dir, i, arr) == kResultOk) + layout = getChannelSetForSpeakerArrangement (arr); - setPlayConfigDetails (getNumSingleDirectionChannelsFor (component, true, true), - getNumSingleDirectionChannelsFor (component, false, true), - setup.sampleRate, (int) setup.maxSamplesPerBlock); + busProperties.addBus (isInput, toString (info.name), layout, + (info.flags & Vst::BusInfo::kDefaultActive) != 0); + } + } + + return busProperties; } //============================================================================== @@ -2410,8 +2621,8 @@ private: busInfo.direction = forInput ? Vst::kInput : Vst::kOutput; busInfo.channelCount = 0; - component->getBusInfo (busInfo.mediaType, busInfo.direction, - (Steinberg::int32) index, busInfo); + holder->component->getBusInfo (busInfo.mediaType, busInfo.direction, + (Steinberg::int32) index, busInfo); return busInfo; } @@ -2431,11 +2642,11 @@ private: template void associateTo (Vst::ProcessData& destination, AudioBuffer& buffer) { - VST3BufferExchange::mapBufferToBusses (inputBusses, inputBusMap.get(), inputArrangements, buffer); - VST3BufferExchange::mapBufferToBusses (outputBusses, outputBusMap.get(), outputArrangements, buffer); + VST3BufferExchange::mapBufferToBuses (inputBuses, inputBusMap.get(), cachedBusLayouts.inputBuses, buffer); + VST3BufferExchange::mapBufferToBuses (outputBuses, outputBusMap.get(), cachedBusLayouts.outputBuses, buffer); - destination.inputs = inputBusses.getRawDataPointer(); - destination.outputs = outputBusses.getRawDataPointer(); + destination.inputs = inputBuses.getRawDataPointer(); + destination.outputs = outputBuses.getRawDataPointer(); } void associateTo (Vst::ProcessData& destination, MidiBuffer& midiBuffer) @@ -2555,6 +2766,17 @@ private: }; +//============================================================================== +AudioPluginInstance* VST3Classes::VST3ComponentHolder::createPluginInstance () +{ + if (! initialise()) return nullptr; + VST3PluginInstance* plugin = new VST3PluginInstance (this); + host->setPlugin (plugin); + + return plugin; +} + + //============================================================================== VST3PluginFormat::VST3PluginFormat() {} VST3PluginFormat::~VST3PluginFormat() {} @@ -2575,7 +2797,6 @@ void VST3PluginFormat::createPluginInstance (const PluginDescription& descriptio { ScopedPointer result; - if (fileMightContainThisPluginType (description.fileOrIdentifier)) { File file (description.fileOrIdentifier); @@ -2585,10 +2806,13 @@ void VST3PluginFormat::createPluginInstance (const PluginDescription& descriptio if (const VST3Classes::VST3ModuleHandle::Ptr module = VST3Classes::VST3ModuleHandle::findOrCreateModule (file, description)) { - result = new VST3Classes::VST3PluginInstance (module); - - if (! result->initialise()) - result = nullptr; + ScopedPointer holder = new VST3Classes::VST3ComponentHolder (module); + if (holder->initialise()) + { + result = new VST3Classes::VST3PluginInstance (holder.release()); + if (! result->initialise()) + result = nullptr; + } } previousWorkingDirectory.setAsCurrentWorkingDirectory(); diff --git a/modules/juce_audio_processors/format_types/juce_VSTCommon.h b/modules/juce_audio_processors/format_types/juce_VSTCommon.h new file mode 100644 index 0000000000..1869941d34 --- /dev/null +++ b/modules/juce_audio_processors/format_types/juce_VSTCommon.h @@ -0,0 +1,238 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2015 - ROLI Ltd. + + Permission is granted to use this software under the terms of either: + a) the GPL v2 (or any later version) + b) the Affero GPL v3 + + Details of these licenses can be found at: www.gnu.org/licenses + + JUCE is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + ------------------------------------------------------------------------------ + + To release a closed-source product which uses JUCE, commercial licenses are + available: visit www.juce.com for more information. + + ============================================================================== +*/ + +#ifndef JUCE_VSTCOMMON_H_INCLUDED +#define JUCE_VSTCOMMON_H_INCLUDED + +//============================================================================== +struct SpeakerMappings : private AudioChannelSet // (inheritance only to give easier access to items in the namespace) +{ + struct Mapping + { + int32 vst2; + ChannelType channels[13]; + + bool matches (const Array& chans) const noexcept + { + const int n = sizeof (channels) / sizeof (ChannelType); + + for (int i = 0; i < n; ++i) + { + if (channels[i] == unknown) return (i == chans.size()); + if (i == chans.size()) return (channels[i] == unknown); + + if (channels[i] != chans.getUnchecked(i)) + return false; + } + + return true; + } + }; + + static AudioChannelSet vstArrangementTypeToChannelSet (int32 arr, int fallbackNumChannels) + { + if (arr == vstSpeakerConfigTypeEmpty) return AudioChannelSet::disabled(); + else if (arr == vstSpeakerConfigTypeMono) return AudioChannelSet::mono(); + else if (arr == vstSpeakerConfigTypeLR) return AudioChannelSet::stereo(); + else if (arr == vstSpeakerConfigTypeLRC) return AudioChannelSet::createLCR(); + else if (arr == vstSpeakerConfigTypeLRS) return AudioChannelSet::createLRS(); + else if (arr == vstSpeakerConfigTypeLRCS) return AudioChannelSet::createLCRS(); + else if (arr == vstSpeakerConfigTypeLRCLsRs) return AudioChannelSet::create5point0(); + else if (arr == vstSpeakerConfigTypeLRCLfeLsRs) return AudioChannelSet::create5point1(); + else if (arr == vstSpeakerConfigTypeLRCLsRsCs) return AudioChannelSet::create6point0(); + else if (arr == vstSpeakerConfigTypeLRCLfeLsRsCs) return AudioChannelSet::create6point1(); + else if (arr == vstSpeakerConfigTypeLRLsRsSlSr) return AudioChannelSet::create6point0Music(); + else if (arr == vstSpeakerConfigTypeLRLfeLsRsSlSr) return AudioChannelSet::create6point1Music(); + else if (arr == vstSpeakerConfigTypeLRCLsRsSlSr) return AudioChannelSet::create7point0(); + else if (arr == vstSpeakerConfigTypeLRCLsRsLcRc) return AudioChannelSet::create7point0SDDS(); + else if (arr == vstSpeakerConfigTypeLRCLfeLsRsSlSr) return AudioChannelSet::create7point1(); + else if (arr == vstSpeakerConfigTypeLRCLfeLsRsLcRc) return AudioChannelSet::create7point1SDDS(); + else if (arr == vstSpeakerConfigTypeLRLsRs) return AudioChannelSet::quadraphonic(); + + for (const Mapping* m = getMappings(); m->vst2 != vstSpeakerConfigTypeEmpty; ++m) + { + if (m->vst2 == arr) + { + AudioChannelSet s; + + for (int i = 0; m->channels[i] != 0; ++i) + s.addChannel (m->channels[i]); + + return s; + } + } + + return AudioChannelSet::discreteChannels (fallbackNumChannels); + } + + static AudioChannelSet vstArrangementTypeToChannelSet (const VstSpeakerConfiguration& arr) + { + return vstArrangementTypeToChannelSet (arr.type, arr.numberOfChannels); + } + + static int32 channelSetToVstArrangementType (AudioChannelSet channels) + { + if (channels == AudioChannelSet::disabled()) return vstSpeakerConfigTypeEmpty; + else if (channels == AudioChannelSet::mono()) return vstSpeakerConfigTypeMono; + else if (channels == AudioChannelSet::stereo()) return vstSpeakerConfigTypeLR; + else if (channels == AudioChannelSet::createLCR()) return vstSpeakerConfigTypeLRC; + else if (channels == AudioChannelSet::createLRS()) return vstSpeakerConfigTypeLRS; + else if (channels == AudioChannelSet::createLCRS()) return vstSpeakerConfigTypeLRCS; + else if (channels == AudioChannelSet::create5point0()) return vstSpeakerConfigTypeLRCLsRs; + else if (channels == AudioChannelSet::create5point1()) return vstSpeakerConfigTypeLRCLfeLsRs; + else if (channels == AudioChannelSet::create6point0()) return vstSpeakerConfigTypeLRCLsRsCs; + else if (channels == AudioChannelSet::create6point1()) return vstSpeakerConfigTypeLRCLfeLsRsCs; + else if (channels == AudioChannelSet::create6point0Music()) return vstSpeakerConfigTypeLRLsRsSlSr; + else if (channels == AudioChannelSet::create6point1Music()) return vstSpeakerConfigTypeLRLfeLsRsSlSr; + else if (channels == AudioChannelSet::create7point0()) return vstSpeakerConfigTypeLRCLsRsSlSr; + else if (channels == AudioChannelSet::create7point0SDDS()) return vstSpeakerConfigTypeLRCLsRsLcRc; + else if (channels == AudioChannelSet::create7point1()) return vstSpeakerConfigTypeLRCLfeLsRsSlSr; + else if (channels == AudioChannelSet::create7point1SDDS()) return vstSpeakerConfigTypeLRCLfeLsRsLcRc; + else if (channels == AudioChannelSet::quadraphonic()) return vstSpeakerConfigTypeLRLsRs; + + Array chans (channels.getChannelTypes()); + + if (channels == AudioChannelSet::disabled()) + return vstSpeakerConfigTypeEmpty; + + for (const Mapping* m = getMappings(); m->vst2 != vstSpeakerConfigTypeEmpty; ++m) + if (m->matches (chans)) + return m->vst2; + + return vstSpeakerConfigTypeUser; + } + + static void channelSetToVstArrangement (const AudioChannelSet& channels, VstSpeakerConfiguration& result) + { + result.type = channelSetToVstArrangementType (channels); + result.numberOfChannels = channels.size(); + + for (int i = 0; i < result.numberOfChannels; ++i) + { + VstIndividualSpeakerInfo& speaker = result.speakers[i]; + + zeromem (&speaker, sizeof (VstIndividualSpeakerInfo)); + speaker.type = getSpeakerType (channels.getTypeOfChannel (i)); + } + } + + static const Mapping* getMappings() noexcept + { + static const Mapping mappings[] = + { + { vstSpeakerConfigTypeMono, { centre, unknown } }, + { vstSpeakerConfigTypeLR, { left, right, unknown } }, + { vstSpeakerConfigTypeLsRs, { leftSurround, rightSurround, unknown } }, + { vstSpeakerConfigTypeLcRc, { leftCentre, rightCentre, unknown } }, + { vstSpeakerConfigTypeSlSr, { leftSurroundRear, rightSurroundRear, unknown } }, + { vstSpeakerConfigTypeCLfe, { centre, LFE, unknown } }, + { vstSpeakerConfigTypeLRC, { left, right, centre, unknown } }, + { vstSpeakerConfigTypeLRS, { left, right, surround, unknown } }, + { vstSpeakerConfigTypeLRCLfe, { left, right, centre, LFE, unknown } }, + { vstSpeakerConfigTypeLRLfeS, { left, right, LFE, surround, unknown } }, + { vstSpeakerConfigTypeLRCS, { left, right, centre, surround, unknown } }, + { vstSpeakerConfigTypeLRLsRs, { left, right, leftSurround, rightSurround, unknown } }, + { vstSpeakerConfigTypeLRCLfeS, { left, right, centre, LFE, surround, unknown } }, + { vstSpeakerConfigTypeLRLfeLsRs, { left, right, LFE, leftSurround, rightSurround, unknown } }, + { vstSpeakerConfigTypeLRCLsRs, { left, right, centre, leftSurround, rightSurround, unknown } }, + { vstSpeakerConfigTypeLRCLfeLsRs, { left, right, centre, LFE, leftSurround, rightSurround, unknown } }, + { vstSpeakerConfigTypeLRCLsRsCs, { left, right, centre, leftSurround, rightSurround, surround, unknown } }, + { vstSpeakerConfigTypeLRLsRsSlSr, { left, right, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, + { vstSpeakerConfigTypeLRCLfeLsRsCs, { left, right, centre, LFE, leftSurround, rightSurround, surround, unknown } }, + { vstSpeakerConfigTypeLRLfeLsRsSlSr, { left, right, LFE, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, + { vstSpeakerConfigTypeLRCLsRsLcRc, { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, + { vstSpeakerConfigTypeLRCLsRsSlSr, { left, right, centre, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, + { vstSpeakerConfigTypeLRCLfeLsRsLcRc, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, + { vstSpeakerConfigTypeLRCLfeLsRsSlSr, { left, right, centre, LFE, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, + { vstSpeakerConfigTypeLRCLsRsLcRcCs, { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, + { vstSpeakerConfigTypeLRCLsRsCsSlSr, { left, right, centre, leftSurround, rightSurround, surround, leftSurroundRear, rightSurroundRear, unknown } }, + { vstSpeakerConfigTypeLRCLfeLsRsLcRcCs, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, + { vstSpeakerConfigTypeLRCLfeLsRsCsSlSr, { left, right, centre, LFE, leftSurround, rightSurround, surround, leftSurroundRear, rightSurroundRear, unknown } }, + { vstSpeakerConfigTypeLRCLfeLsRsTflTfcTfrTrlTrrLfe2, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontCentre, topFrontRight, topRearLeft, topRearRight, LFE2, unknown } }, + { vstSpeakerConfigTypeEmpty, { unknown } } + }; + + return mappings; + } + + static inline int32 getSpeakerType (AudioChannelSet::ChannelType type) noexcept + { + switch (type) + { + case AudioChannelSet::left: return vstIndividualSpeakerTypeLeft; + case AudioChannelSet::right: return vstIndividualSpeakerTypeRight; + case AudioChannelSet::centre: return vstIndividualSpeakerTypeCentre; + case AudioChannelSet::LFE: return vstIndividualSpeakerTypeLFE; + case AudioChannelSet::leftSurround: return vstIndividualSpeakerTypeLeftSurround; + case AudioChannelSet::rightSurround: return vstIndividualSpeakerTypeRightSurround; + case AudioChannelSet::leftCentre: return vstIndividualSpeakerTypeLeftCentre; + case AudioChannelSet::rightCentre: return vstIndividualSpeakerTypeRightCentre; + case AudioChannelSet::surround: return vstIndividualSpeakerTypeSurround; + case AudioChannelSet::leftSurroundRear: return vstIndividualSpeakerTypeLeftRearSurround; + case AudioChannelSet::rightSurroundRear: return vstIndividualSpeakerTypeRightRearSurround; + case AudioChannelSet::topMiddle: return vstIndividualSpeakerTypeTopMiddle; + case AudioChannelSet::topFrontLeft: return vstIndividualSpeakerTypeTopFrontLeft; + case AudioChannelSet::topFrontCentre: return vstIndividualSpeakerTypeTopFrontCentre; + case AudioChannelSet::topFrontRight: return vstIndividualSpeakerTypeTopFrontRight; + case AudioChannelSet::topRearLeft: return vstIndividualSpeakerTypeTopRearLeft; + case AudioChannelSet::topRearCentre: return vstIndividualSpeakerTypeTopRearCentre; + case AudioChannelSet::topRearRight: return vstIndividualSpeakerTypeTopRearRight; + case AudioChannelSet::LFE2: return vstIndividualSpeakerTypeLFE2; + default: break; + } + + return 0; + } + + static inline AudioChannelSet::ChannelType getChannelType (int32 type) noexcept + { + switch (type) + { + case vstIndividualSpeakerTypeLeft: return AudioChannelSet::left; + case vstIndividualSpeakerTypeRight: return AudioChannelSet::right; + case vstIndividualSpeakerTypeCentre: return AudioChannelSet::centre; + case vstIndividualSpeakerTypeLFE: return AudioChannelSet::LFE; + case vstIndividualSpeakerTypeLeftSurround: return AudioChannelSet::leftSurround; + case vstIndividualSpeakerTypeRightSurround: return AudioChannelSet::rightSurround; + case vstIndividualSpeakerTypeLeftCentre: return AudioChannelSet::leftCentre; + case vstIndividualSpeakerTypeRightCentre: return AudioChannelSet::rightCentre; + case vstIndividualSpeakerTypeSurround: return AudioChannelSet::surround; + case vstIndividualSpeakerTypeLeftRearSurround: return AudioChannelSet::leftSurroundRear; + case vstIndividualSpeakerTypeRightRearSurround: return AudioChannelSet::rightSurroundRear; + case vstIndividualSpeakerTypeTopMiddle: return AudioChannelSet::topMiddle; + case vstIndividualSpeakerTypeTopFrontLeft: return AudioChannelSet::topFrontLeft; + case vstIndividualSpeakerTypeTopFrontCentre: return AudioChannelSet::topFrontCentre; + case vstIndividualSpeakerTypeTopFrontRight: return AudioChannelSet::topFrontRight; + case vstIndividualSpeakerTypeTopRearLeft: return AudioChannelSet::topRearLeft; + case vstIndividualSpeakerTypeTopRearCentre: return AudioChannelSet::topRearCentre; + case vstIndividualSpeakerTypeTopRearRight: return AudioChannelSet::topRearRight; + case vstIndividualSpeakerTypeLFE2: return AudioChannelSet::LFE2; + default: break; + } + + return AudioChannelSet::unknown; + } +}; + +#endif // JUCE_VSTCOMMON_H_INCLUDED diff --git a/modules/juce_audio_processors/format_types/juce_VSTInterface.h b/modules/juce_audio_processors/format_types/juce_VSTInterface.h index b0d1bd052e..502f3672b6 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTInterface.h +++ b/modules/juce_audio_processors/format_types/juce_VSTInterface.h @@ -386,7 +386,7 @@ enum VstIndividualSpeakerType vstIndividualSpeakerTypeLeft, vstIndividualSpeakerTypeRight, vstIndividualSpeakerTypeCentre, - vstIndividualSpeakerTypeSubbass, + vstIndividualSpeakerTypeLFE, vstIndividualSpeakerTypeLeftSurround, vstIndividualSpeakerTypeRightSurround, vstIndividualSpeakerTypeLeftCentre, @@ -402,7 +402,7 @@ enum VstIndividualSpeakerType vstIndividualSpeakerTypeTopRearLeft, vstIndividualSpeakerTypeTopRearCentre, vstIndividualSpeakerTypeTopRearRight, - vstIndividualSpeakerTypeSubbass2 + vstIndividualSpeakerTypeLFE2 }; struct VstSpeakerConfiguration diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp index 0fe2304232..d57af6fb44 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp @@ -44,6 +44,8 @@ namespace #include "juce_VSTInterface.h" } +#include "juce_VSTCommon.h" + #if JUCE_MSVC #pragma warning (pop) #pragma warning (disable: 4355) // ("this" used in initialiser list warning) @@ -585,58 +587,59 @@ class VSTPluginInstance : public AudioPluginInstance, private Timer, private AsyncUpdater { -public: - VSTPluginInstance (const ModuleHandle::Ptr& mh) - : effect (nullptr), - module (mh), +private: + VSTPluginInstance (const ModuleHandle::Ptr& mh, const BusesProperties& ioConfig, VstEffectInterface* effect) + : AudioPluginInstance (ioConfig), + vstEffect (effect), + vstModule (mh), usesCocoaNSView (false), name (mh->pluginName), wantsMidiMessages (false), initialised (false), isPowerOn (false) + {} + +public: + ~VSTPluginInstance() { - try + if (vstEffect != nullptr && vstEffect->interfaceIdentifier == juceVstInterfaceIdentifier) { - const IdleCallRecursionPreventer icrp; - _fpreset(); - - JUCE_VST_LOG ("Creating VST instance: " + name); + struct VSTDeleter : public CallbackMessage + { + VSTDeleter (VSTPluginInstance& inInstance, WaitableEvent& inEvent) + : vstInstance (inInstance), completionSignal (inEvent) + {} - #if JUCE_MAC - if (module->resFileId != 0) - UseResFile (module->resFileId); - #endif + void messageCallback() override + { + vstInstance.cleanup(); + completionSignal.signal(); + } - { - JUCE_VST_WRAPPER_INVOKE_MAIN - } + VSTPluginInstance& vstInstance; + WaitableEvent& completionSignal; + }; - if (effect != nullptr && effect->interfaceIdentifier == juceVstInterfaceIdentifier) + if (MessageManager::getInstance()->isThisTheMessageThread()) { - jassert (effect->hostSpace2 == 0); - jassert (effect->effectPointer != 0); - - _fpreset(); // some dodgy plugs mess around with this + cleanup(); } else { - effect = nullptr; + WaitableEvent completionEvent; + (new VSTDeleter (*this, completionEvent))->post(); + completionEvent.wait(); } } - catch (...) - {} } - ~VSTPluginInstance() + void cleanup() { - const ScopedLock sl (lock); - stopTimer(); - - if (effect != nullptr && effect->interfaceIdentifier == juceVstInterfaceIdentifier) + if (vstEffect != nullptr && vstEffect->interfaceIdentifier == juceVstInterfaceIdentifier) { #if JUCE_MAC - if (module->resFileId != 0) - UseResFile (module->resFileId); + if (vstModule->resFileId != 0) + UseResFile (vstModule->resFileId); #endif // Must delete any editors before deleting the plugin instance! @@ -644,13 +647,40 @@ public: _fpreset(); // some dodgy plugs fuck around with this - module->closeEffect (effect); + vstModule->closeEffect (vstEffect); + } + + vstModule = nullptr; + vstEffect = nullptr; + } + + static VSTPluginInstance* create (const ModuleHandle::Ptr& newModule, + double initialSampleRate, + int initialBlockSize) + { + if (VstEffectInterface* newEffect = constructEffect (newModule)) + { + newEffect->hostSpace2 = 0; + + newEffect->dispatchFunction (newEffect, plugInOpcodeIdentify, 0, 0, 0, 0); + + newEffect->dispatchFunction (newEffect, plugInOpcodeSetSampleRate, 0, 0, 0, static_cast (initialSampleRate)); + newEffect->dispatchFunction (newEffect, plugInOpcodeSetBlockSize, 0, jmax (32, initialBlockSize), 0, 0); + + newEffect->dispatchFunction (newEffect, plugInOpcodeOpen, 0, 0, 0, 0); + BusesProperties ioConfig = queryBusIO (newEffect); + newEffect->dispatchFunction (newEffect, plugInOpcodeClose, 0, 0, 0, 0); + + newEffect = constructEffect (newModule); + + if (newEffect != nullptr) + return new VSTPluginInstance (newModule, ioConfig, newEffect); } - module = nullptr; - effect = nullptr; + return nullptr; } + //============================================================================== void fillInPluginDescription (PluginDescription& desc) const override { desc.name = name; @@ -665,9 +695,9 @@ public: desc.descriptiveName = name; } - desc.fileOrIdentifier = module->file.getFullPathName(); + desc.fileOrIdentifier = vstModule->file.getFullPathName(); desc.uid = getUID(); - desc.lastFileModTime = module->file.getLastModificationTime(); + desc.lastFileModTime = vstModule->file.getLastModificationTime(); desc.lastInfoUpdateTime = Time::getCurrentTime(); desc.pluginFormatName = "VST"; desc.category = getCategory(); @@ -681,14 +711,14 @@ public: desc.version = getVersion(); desc.numInputChannels = getTotalNumInputChannels(); desc.numOutputChannels = getTotalNumOutputChannels(); - desc.isInstrument = (effect != nullptr && (effect->flags & vstEffectFlagIsSynth) != 0); + desc.isInstrument = (vstEffect != nullptr && (vstEffect->flags & vstEffectFlagIsSynth) != 0); } bool initialiseEffect (double initialSampleRate, int initialBlockSize) { - if (effect != nullptr) + if (vstEffect != nullptr) { - effect->hostSpace2 = (pointer_sized_int) (pointer_sized_int) this; + vstEffect->hostSpace2 = (pointer_sized_int) (pointer_sized_int) this; initialise (initialSampleRate, initialBlockSize); return true; } @@ -698,7 +728,7 @@ public: void initialise (double initialSampleRate, int initialBlockSize) { - if (initialised || effect == nullptr) + if (initialised || vstEffect == nullptr) return; #if JUCE_WINDOWS @@ -709,11 +739,10 @@ public: jassert (MessageManager::getInstance()->isThisTheMessageThread()); #endif - JUCE_VST_LOG ("Initialising VST: " + module->pluginName + " (" + getVersion() + ")"); + JUCE_VST_LOG ("Initialising VST: " + vstModule->pluginName + " (" + getVersion() + ")"); initialised = true; - setPlayConfigDetails (effect->numInputChannels, effect->numOutputChannels, - initialSampleRate, initialBlockSize); + setRateAndBufferSizeDetails (initialSampleRate, initialBlockSize); dispatch (plugInOpcodeIdentify, 0, 0, 0, 0); @@ -725,16 +754,15 @@ public: dispatch (plugInOpcodeOpen, 0, 0, 0, 0); - setPlayConfigDetails (effect->numInputChannels, effect->numOutputChannels, - getSampleRate(), getBlockSize()); + setRateAndBufferSizeDetails (getSampleRate(), getBlockSize()); if (getNumPrograms() > 1) setCurrentProgram (0); else dispatch (plugInOpcodeSetCurrentProgram, 0, 0, 0, 0); - for (int i = effect->numInputChannels; --i >= 0;) dispatch (plugInOpcodeConnectInput, i, 1, 0, 0); - for (int i = effect->numOutputChannels; --i >= 0;) dispatch (plugInOpcodeConnectOutput, i, 1, 0, 0); + for (int i = vstEffect->numInputChannels; --i >= 0;) dispatch (plugInOpcodeConnectInput, i, 1, 0, 0); + for (int i = vstEffect->numOutputChannels; --i >= 0;) dispatch (plugInOpcodeConnectOutput, i, 1, 0, 0); if (getVstCategory() != kPlugCategShell) // (workaround for Waves 5 plugins which crash during this call) updateStoredProgramNames(); @@ -745,14 +773,14 @@ public: usesCocoaNSView = ((unsigned int) pluginCanDo ("hasCockosViewAsConfig") & 0xffff0000ul) == 0xbeef0000ul; #endif - setLatencySamples (effect->latency); + setLatencySamples (vstEffect->latency); } - void* getPlatformSpecificData() override { return effect; } + void* getPlatformSpecificData() override { return vstEffect; } const String getName() const override { - if (effect != nullptr) + if (vstEffect != nullptr) { char buffer[512] = { 0 }; @@ -770,17 +798,17 @@ public: int getUID() const { - int uid = effect != nullptr ? effect->plugInIdentifier : 0; + int uid = vstEffect != nullptr ? vstEffect->plugInIdentifier : 0; if (uid == 0) - uid = module->file.hashCode(); + uid = vstModule->file.hashCode(); return uid; } double getTailLengthSeconds() const override { - if (effect == nullptr) + if (vstEffect == nullptr) return 0.0; const double sampleRate = getSampleRate(); @@ -803,7 +831,14 @@ public: //============================================================================== void prepareToPlay (double rate, int samplesPerBlockExpected) override { - setPlayConfigDetails (effect->numInputChannels, effect->numOutputChannels, rate, samplesPerBlockExpected); + setRateAndBufferSizeDetails (rate, samplesPerBlockExpected); + + VstSpeakerConfiguration inArr, outArr; + + SpeakerMappings::channelSetToVstArrangement (getChannelLayoutOfBus (true, 0), inArr); + SpeakerMappings::channelSetToVstArrangement (getChannelLayoutOfBus (false, 0), outArr); + + dispatch (plugInOpcodeSetSpeakerConfiguration, 0, reinterpret_cast (&inArr), &outArr, 0.0f); vstHostTime.tempoBPM = 120.0; vstHostTime.timeSignatureNumerator = 4; @@ -842,7 +877,7 @@ public: ignoreUnused (err); } - tempBuffer.setSize (jmax (1, effect->numInputChannels), samplesPerBlockExpected); + tempBuffer.setSize (jmax (1, vstEffect->numInputChannels), samplesPerBlockExpected); if (! isPowerOn) setPower (true); @@ -857,7 +892,7 @@ public: dispatch (plugInOpcodeStartProcess, 0, 0, 0, 0); - setLatencySamples (effect->latency); + setLatencySamples (vstEffect->latency); } } @@ -898,15 +933,32 @@ public: bool supportsDoublePrecisionProcessing() const override { - return ((effect->flags & vstEffectFlagInplaceAudio) != 0 - && (effect->flags & vstEffectFlagInplaceDoubleAudio) != 0); + return ((vstEffect->flags & vstEffectFlagInplaceAudio) != 0 + && (vstEffect->flags & vstEffectFlagInplaceDoubleAudio) != 0); + } + + //============================================================================== + bool canAddBus (bool) const override { return false; } + bool canRemoveBus (bool) const override { return false; } + + bool isBusesLayoutSupported (const BusesLayout& layouts) const override + { + const int numInputBuses = getBusCount (true); + const int numOutputBuses = getBusCount (false); + + // it's not possible to change layout if there are sidechains/aux buses + if (numInputBuses > 1 || numOutputBuses > 1) + return (layouts == getBusesLayout()); + + return (layouts.getNumChannels (true, 0) <= vstEffect->numInputChannels + && layouts.getNumChannels (false, 0) <= vstEffect->numOutputChannels); } //============================================================================== #if JUCE_IOS bool hasEditor() const override { return false; } #else - bool hasEditor() const override { return effect != nullptr && (effect->flags & vstEffectFlagHasEditor) != 0; } + bool hasEditor() const override { return vstEffect != nullptr && (vstEffect->flags & vstEffectFlagHasEditor) != 0; } #endif AudioProcessorEditor* createEditor() override; @@ -967,14 +1019,14 @@ public: } //============================================================================== - int getNumParameters() override { return effect != nullptr ? effect->numParameters : 0; } + int getNumParameters() override { return vstEffect != nullptr ? vstEffect->numParameters : 0; } float getParameter (int index) override { - if (effect != nullptr && isPositiveAndBelow (index, (int) effect->numParameters)) + if (vstEffect != nullptr && isPositiveAndBelow (index, (int) vstEffect->numParameters)) { const ScopedLock sl (lock); - return effect->getParameterValueFunction (effect, index); + return vstEffect->getParameterValueFunction (vstEffect, index); } return 0.0f; @@ -982,12 +1034,12 @@ public: void setParameter (int index, float newValue) override { - if (effect != nullptr && isPositiveAndBelow (index, (int) effect->numParameters)) + if (vstEffect != nullptr && isPositiveAndBelow (index, (int) vstEffect->numParameters)) { const ScopedLock sl (lock); - if (effect->getParameterValueFunction (effect, index) != newValue) - effect->setParameterValueFunction (effect, index, newValue); + if (vstEffect->getParameterValueFunction (vstEffect, index) != newValue) + vstEffect->setParameterValueFunction (vstEffect, index, newValue); } } @@ -997,9 +1049,9 @@ public: bool isParameterAutomatable (int index) const override { - if (effect != nullptr) + if (vstEffect != nullptr) { - jassert (index >= 0 && index < effect->numParameters); + jassert (index >= 0 && index < vstEffect->numParameters); return dispatch (plugInOpcodeIsParameterAutomatable, index, 0, 0, 0) != 0; } @@ -1007,7 +1059,7 @@ public: } //============================================================================== - int getNumPrograms() override { return effect != nullptr ? jmax (0, effect->numPrograms) : 0; } + int getNumPrograms() override { return vstEffect != nullptr ? jmax (0, vstEffect->numPrograms) : 0; } // NB: some plugs return negative numbers from this function. int getCurrentProgram() override { return (int) dispatch (plugInOpcodeGetCurrentProgram, 0, 0, 0, 0); } @@ -1025,7 +1077,7 @@ public: if (index == getCurrentProgram()) return getCurrentProgramName(); - if (effect != nullptr) + if (vstEffect != nullptr) { char nm[264] = { 0 }; @@ -1118,7 +1170,7 @@ public: return 1; case hostOpcodeUpdateView: triggerAsyncUpdate(); break; - case hostOpcodeIOModified: setLatencySamples (effect->latency); break; + case hostOpcodeIOModified: setLatencySamples (vstEffect->latency); break; case hostOpcodeNeedsIdle: startTimer (50); break; case hostOpcodeGetSampleRate: return (pointer_sized_int) (getSampleRate() > 0 ? getSampleRate() : defaultVSTSampleRateValue); @@ -1233,7 +1285,7 @@ public: { pointer_sized_int result = 0; - if (effect != nullptr) + if (vstEffect != nullptr) { const ScopedLock sl (lock); const IdleCallRecursionPreventer icrp; @@ -1243,17 +1295,17 @@ public: #if JUCE_MAC const ResFileRefNum oldResFile = CurResFile(); - if (module->resFileId != 0) - UseResFile (module->resFileId); + if (vstModule->resFileId != 0) + UseResFile (vstModule->resFileId); #endif - result = effect->dispatchFunction (effect, opcode, index, value, ptr, opt); + result = vstEffect->dispatchFunction (vstEffect, opcode, index, value, ptr, opt); #if JUCE_MAC const ResFileRefNum newResFile = CurResFile(); if (newResFile != oldResFile) // avoid confusing the parent app's resource file with the plug-in's { - module->resFileId = newResFile; + vstModule->resFileId = newResFile; UseResFile (oldResFile); } #endif @@ -1449,7 +1501,7 @@ public: return true; } - bool usesChunks() const noexcept { return effect != nullptr && (effect->flags & vstEffectFlagDataInChunks) != 0; } + bool usesChunks() const noexcept { return vstEffect != nullptr && (vstEffect->flags & vstEffectFlagDataInChunks) != 0; } bool getChunkData (MemoryBlock& mb, bool isPreset, int maxSizeMB) const { @@ -1485,8 +1537,8 @@ public: return false; } - VstEffectInterface* effect; - ModuleHandle::Ptr module; + VstEffectInterface* vstEffect; + ModuleHandle::Ptr vstModule; ScopedPointer extraFunctions; bool usesCocoaNSView; @@ -1502,6 +1554,101 @@ private: VSTMidiEventList midiEventsToSend; VstTimingInformation vstHostTime; + //============================================================================== + static VstEffectInterface* constructEffect(const ModuleHandle::Ptr& module) + { + VstEffectInterface* effect = nullptr; + try + { + const IdleCallRecursionPreventer icrp; + _fpreset(); + + JUCE_VST_LOG ("Creating VST instance: " + module->pluginName); + + #if JUCE_MAC + if (module->resFileId != 0) + UseResFile (module->resFileId); + #endif + + { + JUCE_VST_WRAPPER_INVOKE_MAIN + } + + if (effect != nullptr && effect->interfaceIdentifier == juceVstInterfaceIdentifier) + { + jassert (effect->hostSpace2 == 0); + jassert (effect->effectPointer != 0); + + _fpreset(); // some dodgy plugs mess around with this + } + else + { + effect = nullptr; + } + } + catch (...) + {} + + return effect; + } + + static BusesProperties queryBusIO (VstEffectInterface* effect) + { + BusesProperties returnValue; + + VstSpeakerConfiguration* inArr = nullptr, *outArr = nullptr; + if (effect->dispatchFunction (effect, plugInOpcodeGetSpeakerArrangement, 0, reinterpret_cast (&inArr), &outArr, 0.0f) == 0) + inArr = outArr = nullptr; + + for (int dir = 0; dir < 2; ++dir) + { + const bool isInput = (dir == 0); + const int opcode = (isInput ? plugInOpcodeGetInputPinProperties : plugInOpcodeGetOutputPinProperties); + const int maxChannels = (isInput ? effect->numInputChannels : effect->numOutputChannels); + const VstSpeakerConfiguration* arr = (isInput ? inArr : outArr); + bool busAdded = false; + + VstPinInfo pinProps; + AudioChannelSet layout; + for (int ch = 0; ch < maxChannels; ch += layout.size()) + { + if (effect->dispatchFunction (effect, opcode, ch, 0, &pinProps, 0.0f) == 0) + break; + + if ((pinProps.flags & vstPinInfoFlagValid) != 0) + { + layout = SpeakerMappings::vstArrangementTypeToChannelSet (pinProps.configurationType, 0); + if (layout.isDisabled()) + break; + } + else + { + layout = ((pinProps.flags & vstPinInfoFlagIsStereo) != 0 ? AudioChannelSet::stereo() : AudioChannelSet::mono()); + } + + busAdded = true; + returnValue.addBus (isInput, pinProps.text, layout, true); + } + + // no buses? + if (! busAdded && maxChannels > 0) + { + String busName = (isInput ? "Input" : "Output"); + if (effect->dispatchFunction (effect, opcode, 0, 0, &pinProps, 0.0f) != 0) + busName = pinProps.text; + + if (arr != nullptr) + layout = SpeakerMappings::vstArrangementTypeToChannelSet (*arr); + else + layout = AudioChannelSet::canonicalChannelSet (maxChannels); + + returnValue.addBus (isInput, busName, layout, true); + } + } + + return returnValue; + } + //============================================================================== template void processAudio (AudioBuffer& buffer, MidiBuffer& midiMessages) @@ -1579,7 +1726,7 @@ private: jlimit (0, numSamples - 1, samplePosition)); } - effect->dispatchFunction (effect, plugInOpcodePreAudioProcessingEvents, 0, 0, midiEventsToSend.events, 0); + vstEffect->dispatchFunction (vstEffect, plugInOpcodePreAudioProcessingEvents, 0, 0, midiEventsToSend.events, 0); } _clearfp(); @@ -1605,25 +1752,25 @@ private: //============================================================================== inline void invokeProcessFunction (AudioBuffer& buffer, int32 sampleFrames) { - if ((effect->flags & vstEffectFlagInplaceAudio) != 0) + if ((vstEffect->flags & vstEffectFlagInplaceAudio) != 0) { - effect->processAudioInplaceFunction (effect, buffer.getArrayOfWritePointers(), buffer.getArrayOfWritePointers(), sampleFrames); + vstEffect->processAudioInplaceFunction (vstEffect, buffer.getArrayOfWritePointers(), buffer.getArrayOfWritePointers(), sampleFrames); } else { - tempBuffer.setSize (effect->numOutputChannels, sampleFrames); + tempBuffer.setSize (vstEffect->numOutputChannels, sampleFrames); tempBuffer.clear(); - effect->processAudioFunction (effect, buffer.getArrayOfWritePointers(), tempBuffer.getArrayOfWritePointers(), sampleFrames); + vstEffect->processAudioFunction (vstEffect, buffer.getArrayOfWritePointers(), tempBuffer.getArrayOfWritePointers(), sampleFrames); - for (int i = effect->numOutputChannels; --i >= 0;) + for (int i = vstEffect->numOutputChannels; --i >= 0;) buffer.copyFrom (i, 0, tempBuffer.getReadPointer (i), sampleFrames); } } inline void invokeProcessFunction (AudioBuffer& buffer, int32 sampleFrames) { - effect->processDoubleAudioInplaceFunction (effect, buffer.getArrayOfWritePointers(), buffer.getArrayOfWritePointers(), sampleFrames); + vstEffect->processDoubleAudioInplaceFunction (vstEffect, buffer.getArrayOfWritePointers(), buffer.getArrayOfWritePointers(), sampleFrames); } //============================================================================== @@ -1652,10 +1799,10 @@ private: String getTextForOpcode (const int index, const VstHostToPlugInOpcodes opcode) const { - if (effect == nullptr) + if (vstEffect == nullptr) return String(); - jassert (index >= 0 && index < effect->numParameters); + jassert (index >= 0 && index < vstEffect->numParameters); char nm[256] = { 0 }; dispatch (opcode, index, 0, nm, 0); return String::createStringFromData (nm, (int) sizeof (nm)).trim(); @@ -1665,7 +1812,7 @@ private: { String progName; - if (effect != nullptr) + if (vstEffect != nullptr) { { char nm[256] = { 0 }; @@ -1707,7 +1854,7 @@ private: void updateStoredProgramNames() { - if (effect != nullptr && getNumPrograms() > 0) + if (vstEffect != nullptr && getNumPrograms() > 0) { char nm[256] = { 0 }; @@ -1764,14 +1911,14 @@ private: pointer_sized_int getVstDirectory() const { #if JUCE_MAC - return (pointer_sized_int) (void*) &module->parentDirFSSpec; + return (pointer_sized_int) (void*) &vstModule->parentDirFSSpec; #else - return (pointer_sized_int) (pointer_sized_uint) module->fullParentDirectoryPathName.toRawUTF8(); + return (pointer_sized_int) (pointer_sized_uint) vstModule->fullParentDirectoryPathName.toRawUTF8(); #endif } //============================================================================== - int getVersionNumber() const noexcept { return effect != nullptr ? effect->plugInVersion : 0; } + int getVersionNumber() const noexcept { return vstEffect != nullptr ? vstEffect->plugInVersion : 0; } String getVersion() const { @@ -2623,8 +2770,8 @@ static VSTPluginInstance* createAndUpdateDesc (VSTPluginFormat& format, PluginDe if (VSTPluginInstance* instance = dynamic_cast (p)) { #if JUCE_MAC - if (instance->module->resFileId != 0) - UseResFile (instance->module->resFileId); + if (instance->vstModule->resFileId != 0) + UseResFile (instance->vstModule->resFileId); #endif instance->fillInPluginDescription (desc); @@ -2709,9 +2856,9 @@ void VSTPluginFormat::createPluginInstance (const PluginDescription& desc, { shellUIDToCreate = desc.uid; - result = new VSTPluginInstance (module); + result = VSTPluginInstance::create (module, sampleRate, blockSize); - if (! result->initialiseEffect (sampleRate, blockSize)) + if (result != nullptr && ! result->initialiseEffect (sampleRate, blockSize)) result = nullptr; } @@ -2829,8 +2976,8 @@ FileSearchPath VSTPluginFormat::getDefaultLocationsToSearch() const XmlElement* VSTPluginFormat::getVSTXML (AudioPluginInstance* plugin) { if (VSTPluginInstance* const vst = dynamic_cast (plugin)) - if (vst->module != nullptr) - return vst->module->vstXml.get(); + if (vst->vstModule != nullptr) + return vst->vstModule->vstXml.get(); return nullptr; } @@ -2874,9 +3021,9 @@ AudioPluginInstance* VSTPluginFormat::createCustomVSTFromMainCall (void* entryPo if (module->open()) { - ScopedPointer result (new VSTPluginInstance (module)); + ScopedPointer result (VSTPluginInstance::create (module, initialSampleRate, initialBufferSize)); - if (result->initialiseEffect (initialSampleRate, initialBufferSize)) + if (result != nullptr && result->initialiseEffect (initialSampleRate, initialBufferSize)) return result.release(); } diff --git a/modules/juce_audio_processors/juce_audio_processors.cpp b/modules/juce_audio_processors/juce_audio_processors.cpp index 326a304bfb..a7e6dbffdd 100644 --- a/modules/juce_audio_processors/juce_audio_processors.cpp +++ b/modules/juce_audio_processors/juce_audio_processors.cpp @@ -145,7 +145,6 @@ struct AutoResizingNSViewComponentWithParent : public AutoResizingNSViewCompone #include "format/juce_AudioPluginFormat.cpp" #include "format/juce_AudioPluginFormatManager.cpp" #include "processors/juce_AudioProcessor.cpp" -#include "processors/juce_AudioChannelSet.cpp" #include "processors/juce_AudioProcessorEditor.cpp" #include "processors/juce_AudioProcessorGraph.cpp" #include "processors/juce_GenericAudioProcessorEditor.cpp" diff --git a/modules/juce_audio_processors/juce_audio_processors.h b/modules/juce_audio_processors/juce_audio_processors.h index ff73be0c8d..76feb18cfc 100644 --- a/modules/juce_audio_processors/juce_audio_processors.h +++ b/modules/juce_audio_processors/juce_audio_processors.h @@ -92,6 +92,10 @@ #define JUCE_SUPPORT_CARBON 1 #endif +#ifndef JUCE_SUPPORT_LEGACY_AUDIOPROCESSOR + #define JUCE_SUPPORT_LEGACY_AUDIOPROCESSOR 1 +#endif + //============================================================================== //============================================================================== namespace juce @@ -102,7 +106,6 @@ class AudioProcessor; #include "processors/juce_AudioProcessorEditor.h" #include "processors/juce_AudioProcessorListener.h" #include "processors/juce_AudioProcessorParameter.h" -#include "processors/juce_AudioChannelSet.h" #include "processors/juce_AudioProcessor.h" #include "processors/juce_PluginDescription.h" #include "processors/juce_AudioPluginInstance.h" diff --git a/modules/juce_audio_processors/processors/juce_AudioChannelSet.h b/modules/juce_audio_processors/processors/juce_AudioChannelSet.h deleted file mode 100644 index 8af8f87791..0000000000 --- a/modules/juce_audio_processors/processors/juce_AudioChannelSet.h +++ /dev/null @@ -1,216 +0,0 @@ -/* - ============================================================================== - - This file is part of the JUCE library. - Copyright (c) 2015 - ROLI Ltd. - - Permission is granted to use this software under the terms of either: - a) the GPL v2 (or any later version) - b) the Affero GPL v3 - - Details of these licenses can be found at: www.gnu.org/licenses - - JUCE is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - ------------------------------------------------------------------------------ - - To release a closed-source product which uses JUCE, commercial licenses are - available: visit www.juce.com for more information. - - ============================================================================== -*/ - -#ifndef JUCE_AUDIOCHANNELSET_H_INCLUDED -#define JUCE_AUDIOCHANNELSET_H_INCLUDED - - -//============================================================================== -/** - Represents a set of audio channel types. - - For example, you might have a set of left + right channels, which is a stereo - channel set. It is a collection of values from the AudioChannelSet::ChannelType - enum, where each type may only occur once within the set. - - @see AudioProcessorBus -*/ -class JUCE_API AudioChannelSet -{ -public: - /** Creates an empty channel set. - You can call addChannel to add channels to the set. - */ - AudioChannelSet() noexcept {} - - /** Creates a zero-channel set which can be used to indicate that a - bus is disabled. */ - static AudioChannelSet disabled(); - - /** Creates a one-channel mono set. */ - static AudioChannelSet mono(); - - /** Creates a set containing a left and right channel. */ - static AudioChannelSet stereo(); - - /** Creates a set containing a left, right and centre channels. */ - static AudioChannelSet createLCR(); - - /** Creates a set containing a left, right and centre channels. */ - static AudioChannelSet createLRS(); - - /** Creates a set containing a left, right, centre and surround channels. */ - static AudioChannelSet createLCRS(); - - /** Creates a set for quadraphonic surround setup. */ - static AudioChannelSet quadraphonic(); - - /** Creates a set for pentagonal surround setup. */ - static AudioChannelSet pentagonal(); - - /** Creates a set for hexagonal surround setup. */ - static AudioChannelSet hexagonal(); - - /** Creates a set for octagonal surround setup. */ - static AudioChannelSet octagonal(); - - /** Creates a set for ambisonic surround setups. */ - static AudioChannelSet ambisonic(); - - /** Creates a set for a 5.0 surround setup. */ - static AudioChannelSet create5point0(); - - /** Creates a set for a 5.1 surround setup. */ - static AudioChannelSet create5point1(); - - /** Creates a set for a 6.0 Cine surround setup. */ - static AudioChannelSet create6point0(); - - /** Creates a set for a 6.0 Music surround setup. */ - static AudioChannelSet create6point0Music(); - - /** Creates a set for a 6.1 surround setup. */ - static AudioChannelSet create6point1(); - - /** Creates a set for a 7.0 surround setup. */ - static AudioChannelSet create7point0(); - - /** Creates a set for a 7.1 surround setup. */ - static AudioChannelSet create7point1(); - - /** Creates a set for a 7.1 AC3 C surround setup. */ - static AudioChannelSet create7point1AC3(); - - /** Creates a set for a 7.0 surround setup (with side instead of rear speakers). */ - static AudioChannelSet createFront7point0(); - - /** Creates a set for a 7.1 surround setup (with side instead of rear speakers). */ - static AudioChannelSet createFront7point1(); - - /** Creates a set of untyped discrete channels. */ - static AudioChannelSet discreteChannels (int numChannels); - - /** Create a canonical channel set for a given number of channels. - For example, numChannels = 1 will return mono, numChannels = 2 will return stereo, etc. */ - static AudioChannelSet canonicalChannelSet (int numChannels); - - //============================================================================== - /** Represents different audio channel types. */ - enum ChannelType - { - unknown = 0, - - left = 1, - right = 2, - centre = 3, - - subbass = 4, - leftSurround = 5, - rightSurround = 6, - leftCentre = 7, - rightCentre = 8, - surround = 9, - leftSurroundDirect = 10, // also known as "side left" - rightSurroundDirect = 11, // also known as "side right" - topMiddle = 12, - topFrontLeft = 13, - topFrontCentre = 14, - topFrontRight = 15, - topRearLeft = 16, - topRearCentre = 17, - topRearRight = 18, - subbass2 = 19, - leftRearSurround = 20, - rightRearSurround = 21, - wideLeft = 22, - wideRight = 23, - - - ambisonicW = 24, - ambisonicX = 25, - ambisonicY = 26, - ambisonicZ = 27, - - - discreteChannel0 = 64 /**< 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". */ - static String getChannelTypeName (ChannelType); - - /** Returns the abbreviated name of a channel type. For example, this method may return "Ls". */ - static String getAbbreviatedChannelTypeName (ChannelType); - - //============================================================================== - /** Adds a channel to the set. */ - void addChannel (ChannelType newChannelType); - - /** Removes a channel from the set. */ - void removeChannel (ChannelType newChannelType); - - /** Returns the number of channels in the set. */ - int size() const noexcept; - - /** Returns true if there are no channels in the set. */ - bool isDisabled() const noexcept { return size() == 0; } - - /** Returns an array of all the types in this channel set. */ - Array getChannelTypes() const; - - /** Returns the type of one of the channels in the set, by index. */ - ChannelType getTypeOfChannel (int channelIndex) const noexcept; - - /** Returns the index for a particular channel-type. - Will return -1 if the this set does not contain a channel of this type. */ - int getChannelIndexForType (ChannelType type) const noexcept; - - /** Returns a string containing a whitespace-separated list of speaker types - corresponding to each channel. For example in a 5.1 arrangement, - the string may be "L R C Lfe Ls Rs". If the speaker arrangement is unknown, - the returned string will be empty.*/ - String getSpeakerArrangementAsString() const; - - /** Returns the description of the current layout. For example, this method may return - "Quadraphonic". Note that the returned string may not be unique. */ - String getDescription() const; - - /** Returns if this is a channel layout made-up of discrete channels. */ - bool isDiscreteLayout() const noexcept; - - /** Intersect two channel layouts. */ - void intersect (const AudioChannelSet& other) { channels &= other.channels; } - - //============================================================================== - bool operator== (const AudioChannelSet&) const noexcept; - bool operator!= (const AudioChannelSet&) const noexcept; - bool operator< (const AudioChannelSet&) const noexcept; -private: - BigInteger channels; - - explicit AudioChannelSet (uint32); -}; - - - -#endif // JUCE_AUDIOCHANNELSET_H_INCLUDED diff --git a/modules/juce_audio_processors/processors/juce_AudioPluginInstance.h b/modules/juce_audio_processors/processors/juce_AudioPluginInstance.h index 675cab4524..04308a961d 100644 --- a/modules/juce_audio_processors/processors/juce_AudioPluginInstance.h +++ b/modules/juce_audio_processors/processors/juce_AudioPluginInstance.h @@ -78,6 +78,9 @@ public: protected: //============================================================================== AudioPluginInstance() {} + AudioPluginInstance (const BusesProperties& ioLayouts) : AudioProcessor (ioLayouts) {} + template + AudioPluginInstance (const short channelLayoutList[numLayouts][2]) : AudioProcessor (channelLayoutList) {} JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioPluginInstance) }; diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp index cfba06221b..45da0a455c 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp +++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp @@ -30,59 +30,45 @@ void JUCE_CALLTYPE AudioProcessor::setTypeOfNextNewPlugin (AudioProcessor::Wrapp } AudioProcessor::AudioProcessor() - : wrapperType (wrapperTypeBeingCreated.get()), - playHead (nullptr), - currentSampleRate (0), - blockSize (0), - latencySamples (0), - #if JUCE_DEBUG - textRecursionCheck (false), - #endif - suspended (false), - nonRealtime (false), - processingPrecision (singlePrecision) -{ - #ifdef JucePlugin_PreferredChannelConfigurations - const short channelConfigs[][2] = { JucePlugin_PreferredChannelConfigurations }; - #else - const short channelConfigs[][2] = { {2, 2} }; - #endif +{ + initialise (BusesProperties().withInput ("Input", AudioChannelSet::stereo(), false) + .withOutput ("Output", AudioChannelSet::stereo(), false)); +} - #ifdef JucePlugin_MaxNumInputChannels - const int maxInChannels = JucePlugin_MaxNumInputChannels; - #else - const int maxInChannels = std::numeric_limits::max(); - #endif - ignoreUnused (maxInChannels); +AudioProcessor::AudioProcessor(const BusesProperties& ioConfig) +{ + initialise (ioConfig); +} - #ifdef JucePlugin_MaxNumOutputChannels - const int maxOutChannels = JucePlugin_MaxNumOutputChannels; - #else - const int maxOutChannels = std::numeric_limits::max(); - #endif - ignoreUnused (maxOutChannels); +void AudioProcessor::initialise (const BusesProperties& ioConfig) +{ + cachedTotalIns = 0; + cachedTotalOuts = 0; - #if JucePlugin_IsMidiEffect - ignoreUnused (channelConfigs); - #else - #if ! JucePlugin_IsSynth - const int numInChannels = jmin (maxInChannels, (int) channelConfigs[0][0]); + wrapperType = wrapperTypeBeingCreated.get(); + playHead = nullptr; + currentSampleRate = 0; + blockSize = 0; + latencySamples = 0; - if (numInChannels > 0) - busArrangement.inputBuses.add (AudioProcessorBus ("Input", AudioChannelSet::canonicalChannelSet (numInChannels))); + #if JUCE_DEBUG + textRecursionCheck = false; #endif - const int numOutChannels = jmin (maxOutChannels, (int) channelConfigs[0][1]); - if (numOutChannels > 0) - busArrangement.outputBuses.add (AudioProcessorBus ("Output", AudioChannelSet::canonicalChannelSet (numOutChannels))); + suspended = false; + nonRealtime = false; + + processingPrecision = singlePrecision; + + const int numInputBuses = ioConfig.inputLayouts.size(); + const int numOutputBuses = ioConfig.outputLayouts.size(); + + for (int i = 0; i < numInputBuses; ++i) + createBus (true, ioConfig.inputLayouts. getReference (i)); + + for (int i = 0; i < numOutputBuses; ++i) + createBus (false, ioConfig.outputLayouts.getReference (i)); - #ifdef JucePlugin_PreferredChannelConfigurations - #if ! JucePlugin_IsSynth - AudioProcessor::setPreferredBusArrangement (true, 0, AudioChannelSet::stereo()); - #endif - AudioProcessor::setPreferredBusArrangement (false, 0, AudioChannelSet::stereo()); - #endif - #endif updateSpeakerFormatStrings(); } @@ -99,6 +85,272 @@ AudioProcessor::~AudioProcessor() #endif } +//============================================================================== +bool AudioProcessor::addBus (bool isInput) +{ + if (! canAddBus (isInput)) + return false; + + BusProperties BusesProperties; + if (! canApplyBusCountChange (isInput, true, BusesProperties)) + return false; + + createBus (isInput, BusesProperties); + return true; +} + +bool AudioProcessor::removeBus (bool inputBus) +{ + const int numBuses = getBusCount (inputBus); + if (numBuses == 0) + return false; + + if (! canRemoveBus (inputBus)) + return false; + + BusProperties BusesProperties; + if (! canApplyBusCountChange (inputBus, false, BusesProperties)) + return false; + + const int busIdx = numBuses - 1; + const int numChannels = getChannelCountOfBus (inputBus, busIdx); + (inputBus ? inputBuses : outputBuses).remove (busIdx); + + audioIOChanged (true, numChannels > 0); + + return true; +} + + +//============================================================================== +bool AudioProcessor::setBusesLayout (const BusesLayout& arr) +{ + jassert (arr.inputBuses. size() == getBusCount (true) + && arr.outputBuses.size() == getBusCount (false)); + + if (arr == getBusesLayout()) + return true; + + BusesLayout copy = arr; + if (! canApplyBusesLayout (copy)) + return false; + + return applyBusLayouts (copy); +} + +bool AudioProcessor::setBusesLayoutWithoutEnabling (const BusesLayout& arr) +{ + const int numIns = getBusCount (true); + const int numOuts = getBusCount (false); + + jassert (arr.inputBuses. size() == numIns + && arr.outputBuses.size() == numOuts); + + BusesLayout request = arr; + const BusesLayout current = getBusesLayout(); + + for (int i = 0; i < numIns; ++i) + if (request.getNumChannels (true, i) == 0) + request.getChannelSet (true, i) = current.getChannelSet (true, i); + + for (int i = 0; i < numOuts; ++i) + if (request.getNumChannels (false, i) == 0) + request.getChannelSet (false, i) = current.getChannelSet (false, i); + + if (! checkBusesLayoutSupported(request)) + return false; + + for (int dir = 0; dir < 2; ++dir) + { + const bool isInput = (dir != 0); + + for (int i = 0; i < (isInput ? numIns : numOuts); ++i) + { + Bus& bus = *getBus (isInput, i); + AudioChannelSet& set = request.getChannelSet (isInput, i); + + if (! bus.isEnabled()) + { + if (! set.isDisabled()) + bus.lastLayout = set; + + set = AudioChannelSet::disabled(); + } + } + } + + return setBusesLayout (request); +} + +AudioProcessor::BusesLayout AudioProcessor::getBusesLayout() const +{ + BusesLayout layouts; + const int numInputs = getBusCount (true); + const int numOutputs = getBusCount (false); + + for (int i = 0; i < numInputs; ++i) + layouts.inputBuses. add (getBus (true, i)->getCurrentLayout()); + + for (int i = 0; i < numOutputs; ++i) + layouts.outputBuses.add (getBus (false, i)->getCurrentLayout()); + + return layouts; +} + +AudioChannelSet AudioProcessor::getChannelLayoutOfBus (bool isInput, int busIdx) const noexcept +{ + const OwnedArray& buses = (isInput ? inputBuses : outputBuses); + if (Bus* bus = buses[busIdx]) + return bus->getCurrentLayout(); + + return AudioChannelSet(); +} + +bool AudioProcessor::setChannelLayoutOfBus (bool isInputBus, int busIdx, const AudioChannelSet& layout) +{ + if (Bus* bus = getBus (isInputBus, busIdx)) + { + BusesLayout layouts = bus->getBusesLayoutForLayoutChangeOfBus (layout); + + if (layouts.getChannelSet (isInputBus, busIdx) == layout) + return applyBusLayouts (layouts); + + return false; + } + + // busIdx parameter is invalid + jassertfalse; + + return false; +} + +bool AudioProcessor::enableAllBuses () +{ + BusesLayout layouts; + const int numInputs = getBusCount (true); + const int numOutputs = getBusCount (false); + + for (int i = 0; i < numInputs; ++i) + layouts.inputBuses. add (getBus (true, i)->lastLayout); + + for (int i = 0; i < numOutputs; ++i) + layouts.outputBuses.add (getBus (false, i)->lastLayout); + + return setBusesLayout (layouts); +} + +bool AudioProcessor::checkBusesLayoutSupported (const BusesLayout& layouts) const +{ + const int numInputBuses = getBusCount (true); + const int numOutputBuses = getBusCount (false); + + if (layouts.inputBuses. size() == numInputBuses + && layouts.outputBuses.size() == numOutputBuses) + return isBusesLayoutSupported (layouts); + + return false; +} + +AudioProcessor::BusesLayout AudioProcessor::getNextBestLayout (const BusesLayout& layouts) const +{ + // if you are hitting this assertion then you are requesting a next + // best layout which does not have the same number of buses as the + // audio processor. + jassert (layouts.inputBuses. size() == getBusCount (true) + && layouts.outputBuses.size() == getBusCount (false)); + + if (checkBusesLayoutSupported (layouts)) return layouts; + + BusesLayout originalState = getBusesLayout(); + BusesLayout currentState = originalState; + BusesLayout bestSupported = currentState; + + for (int dir = 0; dir < 2; ++dir) + { + const bool isInput = (dir > 0); + + Array& currentLayouts = (isInput ? currentState.inputBuses : currentState.outputBuses); + const Array& bestLayouts = (isInput ? bestSupported.inputBuses : bestSupported.outputBuses); + const Array& requestedLayouts = (isInput ? layouts.inputBuses : layouts.outputBuses); + const Array& originalLayouts = (isInput ? originalState.inputBuses : originalState.outputBuses); + + for (int busIdx = 0; busIdx < requestedLayouts.size(); ++busIdx) + { + AudioChannelSet& best = bestLayouts .getReference (busIdx); + const AudioChannelSet& requested = requestedLayouts.getReference (busIdx); + const AudioChannelSet& original = originalLayouts .getReference (busIdx); + + // do we need to do anything + if (original == requested) + continue; + + currentState = bestSupported; + AudioChannelSet& current = currentLayouts .getReference (busIdx); + + // already supported? + current = requested; + if (checkBusesLayoutSupported (currentState)) + { + bestSupported = currentState; + continue; + } + + // try setting the opposite bus to the identical layout + const bool oppositeDirection = ! isInput; + if (getBusCount (oppositeDirection) > busIdx) + { + AudioChannelSet& oppositeLayout = (oppositeDirection ? currentState.inputBuses : currentState.outputBuses).getReference (busIdx); + oppositeLayout = requested; + + if (checkBusesLayoutSupported (currentState)) + { + bestSupported = currentState; + continue; + } + + // try setting the default layout + oppositeLayout = getBus (oppositeDirection, busIdx)->getDefaultLayout(); + if (checkBusesLayoutSupported (currentState)) + { + bestSupported = currentState; + continue; + } + } + + // try setting all other buses to the identical layout + BusesLayout allTheSame; + for (int oDir = 0; oDir < 2; ++oDir) + { + const bool oIsInput = (oDir == 0); + const int oBusNum = getBusCount (oIsInput); + + for (int oBusIdx = 0; oBusIdx < oBusNum; ++oBusIdx) + (oIsInput ? allTheSame.inputBuses : allTheSame.outputBuses).add (requested); + } + + if (checkBusesLayoutSupported (allTheSame)) + { + bestSupported = allTheSame; + continue; + } + + // what is closer the default or the current layout? + int distance = abs (best.size() - requested.size()); + const AudioChannelSet& defaultLayout = getBus (isInput, busIdx)->getDefaultLayout(); + + if (abs (defaultLayout.size() - requested.size()) < distance) + { + current = defaultLayout; + if (checkBusesLayoutSupported (currentState)) + bestSupported = currentState; + } + } + } + + return bestSupported; +} + +//============================================================================== void AudioProcessor::setPlayHead (AudioPlayHead* const newPlayHead) { playHead = newPlayHead; @@ -121,26 +373,22 @@ void AudioProcessor::setPlayConfigDetails (const int newNumIns, const double newSampleRate, const int newBlockSize) { - const int oldNumInputs = getTotalNumInputChannels(); - const int oldNumOutputs = getTotalNumOutputChannels(); + bool success = true; - // if the user is using this method then they do not want any side-buses or aux outputs - disableNonMainBuses (true); - disableNonMainBuses (false); + if (getTotalNumInputChannels() != newNumIns) + success &= setChannelLayoutOfBus (true, 0, AudioChannelSet::canonicalChannelSet (newNumIns)); - if (getTotalNumInputChannels() != newNumIns) setPreferredBusArrangement (true, 0, AudioChannelSet::canonicalChannelSet (newNumIns)); - if (getTotalNumOutputChannels() != newNumOuts) setPreferredBusArrangement (false, 0, AudioChannelSet::canonicalChannelSet (newNumOuts)); + if (getTotalNumOutputChannels() != newNumOuts) + success &= setChannelLayoutOfBus (false, 0, AudioChannelSet::canonicalChannelSet (newNumOuts)); + + // if the user is using this method then they do not want any side-buses or aux outputs + success &= disableNonMainBuses (); + jassert (success); // the processor may not support this arrangement at all - jassert (newNumIns == getTotalNumInputChannels() && newNumOuts == getTotalNumOutputChannels()); + jassert (success && newNumIns == getTotalNumInputChannels() && newNumOuts == getTotalNumOutputChannels()); setRateAndBufferSizeDetails (newSampleRate, newBlockSize); - - if (oldNumInputs != newNumIns || oldNumOutputs != newNumOuts) - { - updateSpeakerFormatStrings(); - numChannelsChanged(); - } } void AudioProcessor::setRateAndBufferSizeDetails (double newSampleRate, int newBlockSize) noexcept @@ -149,20 +397,44 @@ void AudioProcessor::setRateAndBufferSizeDetails (double newSampleRate, int newB blockSize = newBlockSize; } -int AudioProcessor::getMainBusNumInputChannels() const noexcept +//============================================================================== +static int countTotalChannels (const OwnedArray& buses) noexcept { - const Array& buses = busArrangement.inputBuses; - return buses.size() > 0 ? buses.getReference (0).channels.size() : 0; + int n = 0; + + for (int i = 0; i < buses.size(); ++i) + n += buses[i]->getNumberOfChannels(); + + return n; } -int AudioProcessor::getMainBusNumOutputChannels() const noexcept +void AudioProcessor::numChannelsChanged() {} +void AudioProcessor::numBusesChanged() {} +void AudioProcessor::processorLayoutsChanged() {} + +int AudioProcessor::getChannelIndexInProcessBlockBuffer (bool isInput, int busIndex, int channelIndex) const noexcept { - const Array& buses = busArrangement.outputBuses; - return buses.size() > 0 ? buses.getReference (0).channels.size() : 0; + const OwnedArray& ioBus = isInput ? inputBuses : outputBuses; + jassert (isPositiveAndBelow(busIndex, ioBus.size())); + + for (int i = 0; i < ioBus.size() && i < busIndex; ++i) + channelIndex += getChannelCountOfBus (isInput, i); + + return channelIndex; } -void AudioProcessor::numChannelsChanged() {} +int AudioProcessor::getOffsetInBusBufferForAbsoluteChannelIndex (bool isInput, int absoluteChannelIndex, /*out*/ int& busIdx) const noexcept +{ + const int n = getBusCount (isInput); + int numChannels = 0; + for (busIdx = 0; busIdx < n && absoluteChannelIndex >= (numChannels = getChannelLayoutOfBus (isInput, busIdx).size()); ++busIdx) + absoluteChannelIndex -= numChannels; + + return busIdx >= n ? -1 : absoluteChannelIndex; +} + +//============================================================================== void AudioProcessor::setNonRealtime (const bool newNonRealtime) noexcept { nonRealtime = newNonRealtime; @@ -427,6 +699,11 @@ void AudioProcessor::processBlock (AudioBuffer& buffer, MidiBuffer& midi jassertfalse; } +bool AudioProcessor::supportsDoublePrecisionProcessing() const +{ + return false; +} + void AudioProcessor::setProcessingPrecision (ProcessingPrecision precision) noexcept { // If you hit this assertion then you're trying to use double precision @@ -436,143 +713,155 @@ void AudioProcessor::setProcessingPrecision (ProcessingPrecision precision) noex processingPrecision = precision; } -bool AudioProcessor::supportsDoublePrecisionProcessing() const -{ - return false; -} - //============================================================================== -static String getChannelName (const Array& buses, int index) +static String getChannelName (const OwnedArray& buses, int index) { - return buses.size() > 0 ? AudioChannelSet::getChannelTypeName (buses.getReference(0).channels.getTypeOfChannel (index)) - : String(); + return buses.size() > 0 ? AudioChannelSet::getChannelTypeName (buses[0]->getCurrentLayout().getTypeOfChannel (index)) : String(); } -const String AudioProcessor::getInputChannelName (int index) const { return getChannelName (busArrangement.inputBuses, index); } -const String AudioProcessor::getOutputChannelName (int index) const { return getChannelName (busArrangement.outputBuses, index); } +const String AudioProcessor::getInputChannelName (int index) const { return getChannelName (inputBuses, index); } +const String AudioProcessor::getOutputChannelName (int index) const { return getChannelName (outputBuses, index); } -static bool isStereoPair (const Array& buses, int index) +static bool isStereoPair (const OwnedArray& buses, int index) { return index < 2 && buses.size() > 0 - && buses.getReference(0).channels == AudioChannelSet::stereo(); + && buses[0]->getCurrentLayout() == AudioChannelSet::stereo(); } -bool AudioProcessor::isInputChannelStereoPair (int index) const { return isStereoPair (busArrangement.inputBuses, index); } -bool AudioProcessor::isOutputChannelStereoPair (int index) const { return isStereoPair (busArrangement.outputBuses, index); } +bool AudioProcessor::isInputChannelStereoPair (int index) const { return isStereoPair (inputBuses, index); } +bool AudioProcessor::isOutputChannelStereoPair (int index) const { return isStereoPair (outputBuses, index); } //============================================================================== -bool AudioProcessor::setPreferredBusArrangement (bool isInput, int busIndex, const AudioChannelSet& preferredSet) +void AudioProcessor::createBus (bool inputBus, const BusProperties& ioConfig) { - const int oldNumInputs = getTotalNumInputChannels(); - const int oldNumOutputs = getTotalNumOutputChannels(); + (inputBus ? inputBuses : outputBuses).add (new Bus (*this, ioConfig.busName, ioConfig.defaultLayout, ioConfig.isActivatedByDefault)); + + audioIOChanged (true, ioConfig.isActivatedByDefault); +} - Array& buses = isInput ? busArrangement.inputBuses : busArrangement.outputBuses; +//============================================================================== +AudioProcessor::BusesProperties AudioProcessor::busesPropertiesFromLayoutArray (const Array& config) +{ + BusesProperties ioProps; - const int numBuses = buses.size(); + for (int i = 0; i < config.size(); ++i) + { + if (config[i].inChannels > 0) + ioProps.addBus (true, String ("Input #") + String (i + 1), AudioChannelSet::canonicalChannelSet (config[i].inChannels)); - if (! isPositiveAndBelow (busIndex, numBuses)) - return false; + if (config[i].outChannels > 0) + ioProps.addBus (false, String ("Output #") + String (i + 1), AudioChannelSet::canonicalChannelSet (config[i].inChannels)); + } - #ifdef JucePlugin_MaxNumInputChannels - if (isInput && preferredSet.size() > JucePlugin_MaxNumInputChannels) - return false; - #endif + return ioProps; +} - #ifdef JucePlugin_MaxNumOutputChannels - if (! isInput && preferredSet.size() > JucePlugin_MaxNumOutputChannels) - return false; - #endif +AudioProcessor::BusesLayout AudioProcessor::getNextBestLayoutInList (const BusesLayout& layouts, + const Array& legacyLayouts) const +{ + const int numChannelConfigs = legacyLayouts.size(); + jassert (numChannelConfigs > 0); - AudioProcessorBus& bus = buses.getReference (busIndex); + bool hasInputs = false, hasOutputs = false; - #ifdef JucePlugin_PreferredChannelConfigurations - // the user is using the deprecated way to specify channel configurations - if (numBuses > 0 && busIndex == 0) + for (int i = 0; i < numChannelConfigs; ++i) { - const short channelConfigs[][2] = { JucePlugin_PreferredChannelConfigurations }; - const int numChannelConfigs = sizeof (channelConfigs) / sizeof (*channelConfigs); + if (legacyLayouts[i].inChannels > 0) + { + hasInputs = true; + break; + } - // we need the main bus in the opposite direction - Array& oppositeBuses = isInput ? busArrangement.outputBuses : busArrangement.inputBuses; - AudioProcessorBus* oppositeBus = (busIndex < oppositeBuses.size()) ? &oppositeBuses.getReference (0) : nullptr; + if (legacyLayouts[i].outChannels > 0) + { + hasOutputs = true; + break; + } + } - // get the target number of channels - const int mainBusNumChannels = preferredSet.size(); - const int mainBusOppositeChannels = (oppositeBus != nullptr) ? oppositeBus->channels.size() : 0; - const int dir = isInput ? 0 : 1; + BusesLayout nearest = layouts; + nearest.inputBuses .resize (hasInputs ? 1 : 0); + nearest.outputBuses.resize (hasOutputs ? 1 : 0); - // find a compatible channel configuration on the opposite bus which is the closest match - // to the current number of channels on that bus - int distance = std::numeric_limits::max(); - int bestConfiguration = -1; + AudioChannelSet* inBus = (hasInputs ? &nearest.inputBuses. getReference (0) : nullptr); + AudioChannelSet* outBus = (hasOutputs ? &nearest.outputBuses.getReference (0) : nullptr); - for (int i = 0; i < numChannelConfigs; ++i) - { - // is the configuration compatible with the preferred set - if (channelConfigs[i][dir] == mainBusNumChannels) - { - const int configChannels = channelConfigs[i][dir^1]; - const int channelDifference = std::abs (configChannels - mainBusOppositeChannels); + const int16 inNumChannelsRequested = static_cast (inBus != nullptr ? inBus->size() : 0); + const int16 outNumChannelsRequested = static_cast (outBus != nullptr ? outBus->size() : 0); - if (channelDifference < distance) - { - distance = channelDifference; - bestConfiguration = configChannels; + int32 distance = std::numeric_limits::max(); + int bestConfiguration = 0; - // we can exit if we found a perfect match - if (distance == 0) - break; - } - } - } + for (int i = 0; i < numChannelConfigs; ++i) + { + const int16 inChannels = legacyLayouts.getReference (i).inChannels; + const int16 outChannels = legacyLayouts.getReference (i).outChannels; - // unable to find a good configuration - if (bestConfiguration == -1) - return false; + const int32 channelDifference = ((std::abs (inChannels - inNumChannelsRequested) & 0xffff) << 16) | + ((std::abs (outChannels - outNumChannelsRequested) & 0xffff) << 0); - // did the number of channels change on the opposite bus? - if (mainBusOppositeChannels != bestConfiguration && oppositeBus != nullptr) + if (channelDifference < distance) { - // if the channels on the opposite bus are the same as the preferred set - // then also copy over the layout information. If not, then assume - // a cononical channel layout - if (bestConfiguration == mainBusNumChannels) - oppositeBus->channels = preferredSet; - else - oppositeBus->channels = AudioChannelSet::canonicalChannelSet (bestConfiguration); + distance = channelDifference; + bestConfiguration = i; + + // we can exit if we found a perfect match + if (distance == 0) return nearest; } } - #endif - bus.channels = preferredSet; + const int16 inChannels = legacyLayouts.getReference (bestConfiguration).inChannels; + const int16 outChannels = legacyLayouts.getReference (bestConfiguration).outChannels; + + BusesLayout currentState = getBusesLayout(); + AudioChannelSet currentInLayout = (getBusCount (true) > 0 ? currentState.inputBuses .getReference(0) : AudioChannelSet()); + AudioChannelSet currentOutLayout = (getBusCount (false) > 0 ? currentState.outputBuses.getReference(0) : AudioChannelSet()); + - if (oldNumInputs != getTotalNumInputChannels() || oldNumOutputs != getTotalNumOutputChannels()) + if (inBus != nullptr) { - updateSpeakerFormatStrings(); - numChannelsChanged(); + if (inChannels == 0) *inBus = AudioChannelSet::disabled(); + else if (inChannels == currentInLayout. size()) *inBus = currentInLayout; + else if (inChannels == currentOutLayout.size()) *inBus = currentOutLayout; + else *inBus = AudioChannelSet::canonicalChannelSet (inChannels); } - return true; + if (outBus != nullptr) + { + if (outChannels == 0) *outBus = AudioChannelSet::disabled(); + else if (outChannels == currentOutLayout.size()) *outBus = currentOutLayout; + else if (outChannels == currentInLayout .size()) *outBus = currentInLayout; + else *outBus = AudioChannelSet::canonicalChannelSet (outChannels); + } + + return nearest; } -void AudioProcessor::disableNonMainBuses (bool isInput) +bool AudioProcessor::containsLayout (const BusesLayout& layouts, const Array& channelLayouts) { - const Array& buses = (isInput ? busArrangement.inputBuses : busArrangement.outputBuses); + if (layouts.inputBuses.size() > 1 || layouts.outputBuses.size() > 1) + return false; - for (int busIdx = 1; busIdx < buses.size(); ++busIdx) - { - if (buses.getReference (busIdx).channels != AudioChannelSet::disabled()) - { - bool success = setPreferredBusArrangement (isInput, busIdx, AudioChannelSet::disabled()); + const InOutChannelPair mainLayout + ( static_cast (layouts.getNumChannels (true, 0)), + static_cast (layouts.getNumChannels (false, 0)) ); - ignoreUnused (success); - // You are using the setPlayConfigDetails method which should only be used on processors - // with no aux outputs and sidechains. Please use setRateAndBufferSizeDetails and - // setPreferredBusArrangement instead. - jassert (success); - } - } + return channelLayouts.contains (mainLayout); +} + +//============================================================================== +bool AudioProcessor::disableNonMainBuses () +{ + BusesLayout layouts = getBusesLayout(); + + for (int busIdx = 1; busIdx < layouts.inputBuses.size(); ++busIdx) + layouts.inputBuses.getReference (busIdx) = AudioChannelSet::disabled(); + + for (int busIdx = 1; busIdx < layouts.outputBuses.size(); ++busIdx) + layouts.outputBuses.getReference (busIdx) = AudioChannelSet::disabled(); + + return setBusesLayout (layouts); } // Unfortunately the deprecated getInputSpeakerArrangement/getOutputSpeakerArrangement return @@ -583,11 +872,83 @@ void AudioProcessor::updateSpeakerFormatStrings() cachedInputSpeakerArrString.clear(); cachedOutputSpeakerArrString.clear(); - if (busArrangement.inputBuses.size() > 0) - cachedInputSpeakerArrString = busArrangement.inputBuses. getReference (0).channels.getSpeakerArrangementAsString(); + if (getBusCount (true) > 0) + cachedInputSpeakerArrString = getBus (true, 0)->getCurrentLayout().getSpeakerArrangementAsString(); + + if (getBusCount (false) > 0) + cachedOutputSpeakerArrString = getBus (false, 0)->getCurrentLayout().getSpeakerArrangementAsString(); +} + +bool AudioProcessor::applyBusLayouts (const BusesLayout& layouts) +{ + if (layouts == getBusesLayout()) + return true; + + const int numInputBuses = getBusCount (true); + const int numOutputBuses = getBusCount (false); + + const int oldNumberOfIns = getTotalNumInputChannels(); + const int oldNumberOfOuts = getTotalNumOutputChannels(); + + if (layouts.inputBuses. size() != numInputBuses + || layouts.outputBuses.size() != numOutputBuses) + return false; + + for (int busIdx = 0; busIdx < numInputBuses; ++busIdx) + { + Bus& bus = *getBus (true, busIdx); + const AudioChannelSet& set = layouts.getChannelSet (true, busIdx); + + bus.layout = set; + if (! set.isDisabled()) + bus.lastLayout = set; + } + + for (int busIdx = 0; busIdx < numOutputBuses; ++busIdx) + { + Bus& bus = *getBus (false, busIdx); + const AudioChannelSet& set = layouts.getChannelSet (false, busIdx); + + bus.layout = set; + if (! set.isDisabled()) + bus.lastLayout = set; + } + + const bool channelNumChanged = (oldNumberOfIns != getTotalNumInputChannels() || oldNumberOfOuts != getTotalNumOutputChannels()); + audioIOChanged (false, channelNumChanged); + + return true; +} + +void AudioProcessor::audioIOChanged (bool busNumberChanged, bool channelNumChanged) +{ + const int numInputBuses = getBusCount (true); + const int numOutputBuses = getBusCount (false); + + for (int dir = 0; dir < 2; ++dir) + { + const bool isInput = (dir == 0); + const int n = (isInput ? numInputBuses : numOutputBuses); - if (busArrangement.outputBuses.size() > 0) - cachedOutputSpeakerArrString = busArrangement.outputBuses.getReference (0).channels.getSpeakerArrangementAsString(); + for (int i = 0; i < n; ++i) + { + if (Bus* bus = getBus (isInput, i)) + bus->updateChannelCount(); + } + } + + cachedTotalIns = countTotalChannels (inputBuses); + cachedTotalOuts = countTotalChannels (outputBuses); + + updateSpeakerFormatStrings(); + + if (busNumberChanged) + numBusesChanged(); + + if (channelNumChanged) + numChannelsChanged(); + + processorLayoutsChanged(); } //============================================================================== @@ -666,36 +1027,232 @@ XmlElement* AudioProcessor::getXmlFromBinary (const void* data, const int sizeIn return nullptr; } +bool AudioProcessor::canApplyBusCountChange (bool isInput, bool isAdding, + AudioProcessor::BusProperties& outProperties) +{ + if ( isAdding && ! canAddBus (isInput)) return false; + if (! isAdding && ! canRemoveBus (isInput)) return false; + + const int num = getBusCount (isInput); + + // No way for me to find out the default layout if there are no other busses!! + if (num == 0) return false; + + if (isAdding) + { + outProperties.busName = String (isInput ? "Input #" : "Output #") + String (getBusCount (isInput)); + outProperties.defaultLayout = (num > 0 ? getBus (isInput, num - 1)->getDefaultLayout() : AudioChannelSet()); + outProperties.isActivatedByDefault = true; + } + + return true; +} + //============================================================================== -int AudioProcessor::AudioBusArrangement::getChannelIndexInProcessBlockBuffer (bool isInput, int busIndex, int channelIndex) const noexcept +AudioProcessor::Bus::Bus (AudioProcessor& processor, const String& busName, + const AudioChannelSet& defaultLayout, bool isDfltEnabled) + : owner (processor), name (busName), + layout (isDfltEnabled ? defaultLayout : AudioChannelSet()), + dfltLayout (defaultLayout), lastLayout (defaultLayout), + enabledByDefault (isDfltEnabled) { - const Array& ioBus = isInput ? inputBuses : outputBuses; - jassert (busIndex < ioBus.size()); + // Your default layout cannot be disabled + jassert (! dfltLayout.isDisabled()); +} - for (int i = 0; i < ioBus.size() && i < busIndex; ++i) - channelIndex += ioBus.getReference(i).channels.size(); +bool AudioProcessor::Bus::isInput() const +{ + return owner.inputBuses.contains (this); +} - return channelIndex; +int AudioProcessor::Bus::getBusIndex() const +{ + bool ignore; + int idx; + busDirAndIndex (ignore, idx); + + return idx; } -static int countTotalChannels (const Array& buses) noexcept +void AudioProcessor::Bus::busDirAndIndex (bool& input, int& idx) const noexcept { - int n = 0; + idx = owner.inputBuses.indexOf (this); + input = (idx >= 0); - for (int i = 0; i < buses.size(); ++i) - n += buses.getReference(i).channels.size(); + if (! input) + idx = owner.outputBuses.indexOf (this); +} - return n; +bool AudioProcessor::Bus::setCurrentLayout (const AudioChannelSet& busLayout) +{ + bool isInput; + int idx; + busDirAndIndex (isInput, idx); + + return owner.setChannelLayoutOfBus (isInput, idx, busLayout); } -int AudioProcessor::AudioBusArrangement::getTotalNumInputChannels() const noexcept { return countTotalChannels (inputBuses); } -int AudioProcessor::AudioBusArrangement::getTotalNumOutputChannels() const noexcept { return countTotalChannels (outputBuses); } +bool AudioProcessor::Bus::setCurrentLayoutWithoutEnabling (const AudioChannelSet& set) +{ + if (! set.isDisabled()) + { + if (isEnabled()) + return setCurrentLayout (set); -AudioProcessor::AudioProcessorBus::AudioProcessorBus (const String& nm, const AudioChannelSet& chans) - : name (nm), channels (chans) + if (isLayoutSupported (set)) + { + lastLayout = set; + return true; + } + + return false; + } + + return isLayoutSupported (set); +} + +bool AudioProcessor::Bus::setNumberOfChannels (int channels) { + bool isInputBus; + int busIdx; + busDirAndIndex (isInputBus, busIdx); + + if (owner.setChannelLayoutOfBus (isInputBus, busIdx, AudioChannelSet::canonicalChannelSet (channels))) + return true; + + if (channels == 0) + return false; + + AudioChannelSet namedSet = AudioChannelSet::namedChannelSet (channels); + if (! namedSet.isDisabled() && owner.setChannelLayoutOfBus (isInputBus, busIdx, namedSet)) + return true; + + return owner.setChannelLayoutOfBus (isInputBus, busIdx, AudioChannelSet::discreteChannels (channels)); +} + +bool AudioProcessor::Bus::enable (bool shouldEnable) +{ + if (isEnabled() == shouldEnable) + return true; + + return setCurrentLayout (shouldEnable ? lastLayout : AudioChannelSet::disabled()); +} + +int AudioProcessor::Bus::getMaxSupportedChannels (int limit) const +{ + for (int ch = limit; ch > 1; --ch) + if (isNumberOfChannelsSupported (ch)) + return ch; + + return (isMain() && isLayoutSupported (AudioChannelSet::disabled())) ? 0 : -1; +} + +bool AudioProcessor::Bus::isLayoutSupported (const AudioChannelSet& set) const +{ + bool isInputBus; + int busIdx; + busDirAndIndex (isInputBus, busIdx); + + BusesLayout layouts = getBusesLayoutForLayoutChangeOfBus (set); + return (layouts.getChannelSet (isInputBus, busIdx) == set); } +bool AudioProcessor::Bus::isNumberOfChannelsSupported (int channels) const +{ + if (channels == 0) return isLayoutSupported(AudioChannelSet::disabled()); + + return isLayoutSupported (supportedLayoutWithChannels (channels)); +} + +AudioChannelSet AudioProcessor::Bus::supportedLayoutWithChannels (int channels) const +{ + if (channels == 0) return AudioChannelSet::disabled(); + + AudioChannelSet set; + if (! (set = AudioChannelSet::namedChannelSet (channels)).isDisabled() && isLayoutSupported (set)) + return set; + + if (! (set = AudioChannelSet::discreteChannels (channels)).isDisabled() && isLayoutSupported (set)) + return set; + + return AudioChannelSet::disabled(); +} + +AudioProcessor::BusesLayout AudioProcessor::Bus::getBusesLayoutForLayoutChangeOfBus (const AudioChannelSet& set) const +{ + bool isInputBus; + int busIdx; + busDirAndIndex (isInputBus, busIdx); + + BusesLayout currentLayout = owner.getBusesLayout(); + Array& potentialBusLayout = + (isInputBus ? currentLayout.inputBuses : currentLayout.outputBuses); + + if (potentialBusLayout.getReference (busIdx) == set) + return currentLayout; + + potentialBusLayout.getReference (busIdx) = set; + + BusesLayout nearest = owner.getNextBestLayout (currentLayout); + + // Nearest layout has a different number of buses. JUCE plug-ins MUST + // have fixed number of buses. + jassert (currentLayout.inputBuses. size() == owner.getBusCount (true) + && currentLayout.outputBuses.size() == owner.getBusCount (false)); + + return nearest; +} + +int AudioProcessor::Bus::getChannelIndexInProcessBlockBuffer (int channelIndex) const noexcept +{ + bool isInputBus; + int busIdx; + busDirAndIndex (isInputBus, busIdx); + + return owner.getChannelIndexInProcessBlockBuffer (isInputBus, busIdx, channelIndex); +} + +void AudioProcessor::Bus::updateChannelCount() noexcept +{ + cachedChannelCount = layout.size(); +} + +//============================================================================== +void AudioProcessor::BusesProperties::addBus (bool isInput, const String& name, + const AudioChannelSet& dfltLayout, bool isActivatedByDefault) +{ + jassert (dfltLayout.size() != 0); + + BusProperties props; + + props.busName = name; + props.defaultLayout = dfltLayout; + props.isActivatedByDefault = isActivatedByDefault; + + (isInput ? inputLayouts : outputLayouts).add (props); +} + +AudioProcessor::BusesProperties AudioProcessor::BusesProperties::withInput (const String& name, + const AudioChannelSet& dfltLayout, + bool isActivatedByDefault) const +{ + BusesProperties retval (*this); + retval.addBus (true, name, dfltLayout, isActivatedByDefault); + + return retval; +} + +AudioProcessor::BusesProperties AudioProcessor::BusesProperties::withOutput (const String& name, + const AudioChannelSet& dfltLayout, + bool isActivatedByDefault) const +{ + BusesProperties retval (*this); + retval.addBus (false, name, dfltLayout, isActivatedByDefault); + + return retval; +} + + //============================================================================== void AudioProcessorListener::audioProcessorParameterChangeGestureBegin (AudioProcessor*, int) {} void AudioProcessorListener::audioProcessorParameterChangeGestureEnd (AudioProcessor*, int) {} diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.h b/modules/juce_audio_processors/processors/juce_AudioProcessor.h index c997050042..ad84fcc760 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessor.h +++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.h @@ -25,6 +25,7 @@ #ifndef JUCE_AUDIOPROCESSOR_H_INCLUDED #define JUCE_AUDIOPROCESSOR_H_INCLUDED +struct PluginBusUtilities; //============================================================================== /** @@ -43,10 +44,41 @@ class JUCE_API AudioProcessor { protected: + struct BusesProperties; + //============================================================================== - /** Constructor. */ + /** Constructor. + + This constructor will create a main input and output bus which are diabled + by default. If you need more fine grain control then use the other + constructors. + */ AudioProcessor(); + /** Constructor for multibus AudioProcessors + + If your AudioProcessor supports multiple buses than use this constructor + to initialise the bus layouts and bus names of your plug-in. + */ + AudioProcessor (const BusesProperties& ioLayouts); + + /** Constructor for AudioProcessors which use layout maps + + If your AudioProcessor uses layout maps then use this constructor. + */ + #if JUCE_COMPILER_SUPPORTS_INITIALIZER_LISTS + AudioProcessor (const std::initializer_list& channelLayoutList) + { + initialise (busesPropertiesFromLayoutArray (layoutListToArray (channelLayoutList))); + } + #else + template + AudioProcessor (const short channelLayoutList[numLayouts][2]) + { + initialise (busesPropertiesFromLayoutArray (layoutListToArray (channelLayoutList))); + } + #endif + public: //============================================================================== enum ProcessingPrecision @@ -70,7 +102,7 @@ public: playback stops. You can call getTotalNumInputChannels and getTotalNumOutputChannels - or query the busArrangement member variable to find out the number of + or query the busLayout member variable to find out the number of channels your processBlock callback must process. The maximumExpectedSamplesPerBlock value is a strong hint about the maximum @@ -80,7 +112,7 @@ public: uses may be different each time the callback happens: completely variable block sizes can be expected from some hosts. - @see busArrangement, getTotalNumInputChannels, getTotalNumOutputChannels + @see busLayout, getTotalNumInputChannels, getTotalNumOutputChannels */ virtual void prepareToPlay (double sampleRate, int maximumExpectedSamplesPerBlock) = 0; @@ -109,7 +141,7 @@ public: If your plug-in has more than one input or output buses then the buffer passed to the processBlock methods will contain a bundle of all channels of each bus. - Use AudioBusArrangement::getBusBuffer to obtain an audio buffer for a + Use AudiobusLayout::getBusBuffer to obtain an audio buffer for a particular bus. Note that if you have more outputs than inputs, then only those channels that @@ -146,7 +178,7 @@ public: processBlock() method to send out an asynchronous message. You could also use the AsyncUpdater class in a similar way. - @see AudioBusArrangement::getBusBuffer + @see AudiobusLayout::getBusBuffer */ virtual void processBlock (AudioBuffer& buffer, @@ -171,7 +203,7 @@ public: If your plug-in has more than one input or output buses then the buffer passed to the processBlock methods will contain a bundle of all channels of - each bus. Use AudioBusArrangement::getBusBuffer to obtain a audio buffer + each bus. Use AudiobusLayout::getBusBuffer to obtain a audio buffer for a particular bus. Note that if you have more outputs than inputs, then only those channels that @@ -184,8 +216,8 @@ public: but you should only read/write from the ones that your filter is supposed to be using. - If your plugin uses buses, then you should use AudioBusArrangement::getBusBuffer() - or AudioBusArrangement::getChannelIndexInProcessBlockBuffer() to find out which + If your plugin uses buses, then you should use AudiobusLayout::getBusBuffer() + or AudiobusLayout::getChannelIndexInProcessBlockBuffer() to find out which of the input and output channels correspond to which of the buses. The number of samples in these buffers is NOT guaranteed to be the same for every @@ -212,12 +244,13 @@ public: processBlock() method to send out an asynchronous message. You could also use the AsyncUpdater class in a similar way. - @see AudioBusArrangement::getBusBuffer + @see AudiobusLayout::getBusBuffer */ virtual void processBlock (AudioBuffer& buffer, MidiBuffer& midiMessages); /** Renders the next block when the processor is being bypassed. + The default implementation of this method will pass-through any incoming audio, but you may override this method e.g. to add latency compensation to the data to match the processor's latency characteristics. This will avoid situations where bypassing @@ -229,6 +262,7 @@ public: MidiBuffer& midiMessages); /** Renders the next block when the processor is being bypassed. + The default implementation of this method will pass-through any incoming audio, but you may override this method e.g. to add latency compensation to the data to match the processor's latency characteristics. This will avoid situations where bypassing @@ -239,103 +273,372 @@ public: virtual void processBlockBypassed (AudioBuffer& buffer, MidiBuffer& midiMessages); + //============================================================================== - /** Describes the layout and properties of an audio bus. - Effectively a bus description is a named set of channel types. - @see AudioChannelSet + /** + Represents the bus layout state of a plug-in */ - struct AudioProcessorBus + struct BusesLayout { - /** Creates a bus from a name and set of channel types. */ - AudioProcessorBus (const String& busName, const AudioChannelSet& channelTypes); + /** An array containing the list of input buses that this processor supports. */ + Array inputBuses; - /** The bus's name. */ - String name; + /** An array containing the list of output buses that this processor supports. */ + Array outputBuses; - /** The set of channel types that the bus contains. */ - AudioChannelSet channels; + /** Get the number of channels of a particular bus */ + int getNumChannels (bool isInput, int busIndex) const noexcept + { + const Array& bus = (isInput ? inputBuses : outputBuses); + return isPositiveAndBelow(busIndex, bus.size()) ? bus.getReference (busIndex).size() : 0; + } + + /** Get the channel set of a particular bus */ + AudioChannelSet& getChannelSet (bool isInput, int busIndex) + { + Array& sets = isInput ? inputBuses : outputBuses; + jassert (isPositiveAndBelow (busIndex, sets.size())); + + return sets.getReference (busIndex); + } + + /** Get the channel set of a particular bus */ + AudioChannelSet getChannelSet (bool isInput, int busIndex) const noexcept + { + const Array& sets = isInput ? inputBuses : outputBuses; + + if (isPositiveAndBelow (busIndex, sets.size())) + return sets.getReference (busIndex); + else + return AudioChannelSet(); + } + + /** Get the input channel layout on the main bus. */ + AudioChannelSet getMainInputChannelSet() const noexcept { return getChannelSet (true, 0); } + + /** Get the output channel layout on the main bus. */ + AudioChannelSet getMainOutputChannelSet() const noexcept { return getChannelSet (false, 0); } + + /** Get the number of input channels on the main bus. */ + int getMainInputChannels() const noexcept { return getNumChannels (true, 0); } + + /** Get the number of output channels on the main bus. */ + int getMainOutputChannels() const noexcept { return getNumChannels (false, 0); } + + bool operator== (const BusesLayout& other) const noexcept { return inputBuses == other.inputBuses && outputBuses == other.outputBuses; } + bool operator!= (const BusesLayout& other) const noexcept { return inputBuses != other.inputBuses || outputBuses != other.outputBuses; } }; //============================================================================== /** - Represents a set of input and output buses for an AudioProcessor. - */ - struct AudioBusArrangement + Describes the layout and properties of an audio bus. + Effectively a bus description is a named set of channel types. + + @see AudioChannelSet, AudioProcessor::addBus + */ + class Bus { - /** An array containing the list of input buses that this processor supports. */ - Array inputBuses; + public: + /** Returns true if this bus is an input bus. */ + bool isInput() const; - /** An array containing the list of output buses that this processor supports. */ - Array outputBuses; + /** Returns the index of this bus. */ + int getBusIndex() const; + + /** Returns true if the current bus is the main input or output bus. */ + bool isMain() const { return getBusIndex() == 0; } + + //============================================================================== + /** The bus's name. */ + const String &getName() const noexcept { return name; } + + /** Get the default layout of this bus. + + @see AudioChannelSet + */ + const AudioChannelSet& getDefaultLayout() const noexcept { return dfltLayout; } + + //============================================================================== + /** The bus's current layout. This will be AudioChannelSet::disabled() if the current + layout is dfisabled. + + @see AudioChannelSet + */ + const AudioChannelSet& getCurrentLayout() const noexcept { return layout; } + + /** Return the bus's last active channel layout. + + If the bus is currently enabled then the result will be identical to getCurrentLayout + otherwise it will return the last enabled layout. + + @see AudioChannelSet + */ + const AudioChannelSet& getLastEnabledLayout() const noexcept { return lastLayout; } + + /** Sets the bus's current layout. + + If the AudioProcessor does not support this layout then this will return false. + + @see AudioChannelSet + */ + bool setCurrentLayout (const AudioChannelSet& layout); + + /** Sets the bus's current layout without changing the enabled state. + + If the AudioProcessor does not support this layout then this will return false. + + @see AudioChannelSet + */ + bool setCurrentLayoutWithoutEnabling (const AudioChannelSet& layout); + + /** Return the number of channels of the current bus. */ + inline int getNumberOfChannels() const noexcept { return cachedChannelCount; } + + /** Set the number of channles of this bus. This will return false if the AudioProcessor + does not support this layout. */ + bool setNumberOfChannels (int channels); + + //============================================================================== + /** Checks if a particular layout is supported. + + @param set The AudioChannelSet which is to be probed. + @see AudioChannelSet + */ + bool isLayoutSupported (const AudioChannelSet& set) const; + + /** Checks if this bus can support a given number of channels. */ + bool isNumberOfChannelsSupported (int channels) const; + + /** Returns a ChannelSet that the bus supports with a given number of channels. */ + AudioChannelSet supportedLayoutWithChannels (int channels) const; + + /** Returns the maximum number of channels that this bus can support. + @param limit The maximum value to return. + */ + int getMaxSupportedChannels (int limit = AudioChannelSet::maxChannelsOfNamedLayout) const; + + /** Returns the resulting layouts of all buses after changing the layout of this bus. + + Changing an individual layout of a bus may also change the layout of all the other + buses. This method returns what the layouts of all the buses of the audio processor + would be, if you were to change the layout of this bus to the given layout. If there + is no way to support the given layout then this method will return the next best + layout. + */ + BusesLayout getBusesLayoutForLayoutChangeOfBus (const AudioChannelSet& set) const; + + //============================================================================== + /** Returns true if the current bus is enabled. */ + bool isEnabled() const noexcept { return ! layout.isDisabled(); } + + /** Enable or disable this bus. This will return false if the AudioProcessor + does not support disabling this bus. */ + bool enable (bool shouldEnable = true); + + /** Returns if this bus is enabled by default. */ + bool isEnabledByDefault() const noexcept { return enabledByDefault; } //============================================================================== /** Returns the position of a bus's channels within the processBlock buffer. This can be called in processBlock to figure out which channel of the master AudioSampleBuffer maps onto a specific bus's channel. - */ - int getChannelIndexInProcessBlockBuffer (bool isInput, int busIndex, int channelIndex) const noexcept; + */ + int getChannelIndexInProcessBlockBuffer (int channelIndex) const noexcept; + /** Returns an AudioBuffer containing a set of channel pointers for a specific bus. This can be called in processBlock to get a buffer containing a sub-group of the master AudioSampleBuffer which contains all the plugin channels. - */ + */ template - AudioBuffer getBusBuffer (AudioBuffer& processBlockBuffer, bool isInput, int busIndex) const + AudioBuffer getBusBuffer (AudioBuffer& processBlockBuffer) const { - const int busNumChannels = (isInput ? inputBuses : outputBuses).getReference (busIndex).channels.size(); - const int channelOffset = getChannelIndexInProcessBlockBuffer (isInput, busIndex, 0); - - return AudioBuffer (processBlockBuffer.getArrayOfWritePointers() + channelOffset, - busNumChannels, processBlockBuffer.getNumSamples()); + bool isIn; + int busIdx; + busDirAndIndex (isIn, busIdx); + return owner.getBusBuffer (processBlockBuffer, isIn, busIdx); } + private: + friend class AudioProcessor; + Bus (AudioProcessor&, const String&, const AudioChannelSet&, bool); + void busDirAndIndex (bool&, int&) const noexcept; + void updateChannelCount() noexcept; - /** Returns the total number of channels in all the input buses. */ - int getTotalNumInputChannels() const noexcept; + AudioProcessor& owner; + String name; + AudioChannelSet layout, dfltLayout, lastLayout; + bool enabledByDefault; + int cachedChannelCount; - /** Returns the total number of channels in all the output buses. */ - int getTotalNumOutputChannels() const noexcept; + JUCE_DECLARE_NON_COPYABLE (Bus); }; - /** The processor's bus arrangement. + //============================================================================== + /** Returns the number of buses on the input or output side */ + int getBusCount (bool isInput) const noexcept { return (isInput ? inputBuses : outputBuses).size(); } + + /** Returns the audio bus with a given index and direction. - Your plugin can modify this either - - in the plugin's constructor - - in the setPreferredBusArrangement() callback - Changing it at other times can result in undefined behaviour. + If busIdx is invalid then this method will return a nullptr. + */ + Bus* getBus (bool isInput, int busIdx) noexcept { return (isInput ? inputBuses : outputBuses)[busIdx]; } - The host will negotiate with the plugin over its bus configuration by making calls - to setPreferredBusArrangement(). + /** Returns the audio bus with a given index and direction. - @see setPreferredBusArrangement + If busIdx is invalid then this method will return a nullptr. */ - AudioBusArrangement busArrangement; + const Bus* getBus (bool isInput, int busIdx) const noexcept { return const_cast (this)->getBus (isInput, busIdx); } //============================================================================== - /** Called by the host, this attempts to change the plugin's channel layout on a particular bus. - The base class implementation will perform some basic sanity-checking and then apply the - changes to the processor's busArrangement value. - You may override it and return false if you want to make your plugin smarter about refusing - certain layouts that you don't want to support. Your plug-in may also respond to this call by - changing the channel layout of other buses, for example, if your plug-in requires the same - number of input and output channels. + /** Callback to query if a bus can currently be added. + + This callback probes if a bus can currently be added. You should override + this callback if you want to support dynamically adding/removing buses by + the host. This is useful for mixer audio processors. + + The default implementation will always return false. + + @see addBus + */ + virtual bool canAddBus (bool /*inputBus*/) const { return false; } + + /** Callback to query if the last bus can currently be removed. + + This callback probes if the last bus can currently be removed. You should + override this callback if you want to support dynamically adding/removing + buses by the host. This is useful for mixer audio processors. + + If you return true in this callback then the AudioProcessor will go ahead + and delete the bus. + + The default implementation will always return false. + */ + virtual bool canRemoveBus (bool /*inputBus*/) const { return false; } - For most basic plug-ins, which do not require side-chains, aux buses or detailed audio - channel layout information, it is easier to specify the acceptable channel configurations - via the "PlugIn Channel Configurations" field in the Projucer. In this case, you should - not override this method. + /** Dynamically request an additional bus. - If, on the other hand, you decide to override this method then you need to make sure that - "PlugIn Channel Configurations" field in the Projucer is empty. + Request an additional bus from the audio processor. If the audio processor + does not support adding additional buses then this method will return false. - Note, that you must not do any heavy allocations or calculations in this callback as it may - be called several hundred times during initialization. If you require any layout specific - allocations then defer these to prepareToPlay callback. + Most audio processors will not allow you to dynamically add/remove + audio buses and will return false. - @returns false if there is no way for the processor to support the given format on the specified bus. + This method will invoke the canApplyBusCountChange callback to probe + if a bus can be added and, if yes, will use the supplied bus properties + of the canApplyBusCountChange callback to create a new bus. - @see prepareToPlay, busArrangement, AudioBusArrangement::getBusBuffer, getTotalNumInputChannels, getTotalNumOutputChannels + @see canApplyBusCountChange, removeBus */ - virtual bool setPreferredBusArrangement (bool isInputBus, int busIndex, const AudioChannelSet& preferredSet); + bool addBus (bool isInput); + + /** Dynamically remove the latest added bus. + + Request the removal of the last bus from the audio processor. If the + audio processor does not support removing buses then this method will + return false. + + Most audio processors will not allow you to dynamically add/remove + audio buses and will return false. + + The default implementation will return false. + + This method will invoke the canApplyBusCountChange callback to probe if + a bus can currently be removed and, if yes, will go ahead and remove it. + + @see addBus, canRemoveBus + */ + bool removeBus (bool isInput); + + //============================================================================== + /** Set the channel layouts of this audio processor. + + If the layout is not supported by this audio processor then + this method will return false. You can use the checkBusesLayoutSupported + and getNextBestLayout methods to probe which layouts this audio + processor supports. + */ + bool setBusesLayout (const BusesLayout& arr); + + /** Set the channel layouts of this audio processor without changing the + enablement state of the buses. + + If the layout is not supported by this audio processor then + this method will return false. You can use the checkBusesLayoutSupported + and getNextBestLayout methods to probe which layouts this audio + processor supports. + */ + bool setBusesLayoutWithoutEnabling (const BusesLayout& arr); + + /** Provides the current channel layouts of this audio processor. */ + BusesLayout getBusesLayout() const; + + /** Provides the channel layout of the bus with a given index and direction. + + If the index, direction combination is invalid then this will return an + AudioChannelSet with no channels. + */ + AudioChannelSet getChannelLayoutOfBus (bool isInput, int busIdx) const noexcept; + + /** Set the channel layout of the bus with a given index and direction. + + If the index, direction combination is invalid or the layout is not + supported by the audio processor then this method will return false. + */ + bool setChannelLayoutOfBus (bool isInput, int busIdx, const AudioChannelSet& layout); + + /** Provides the number of channels of the bus with a given index and direction. + + If the index, direction combination is invalid then this will return zero. + */ + inline int getChannelCountOfBus (bool isInput, int busIdx) const noexcept + { + if (const Bus* bus = getBus (isInput, busIdx)) + return bus->getNumberOfChannels(); + + return 0; + } + + /** Enables all buses */ + bool enableAllBuses(); + + /** Disables all non-main buses (aux and sidechains). */ + bool disableNonMainBuses (); + + //============================================================================== + /** Returns the position of a bus's channels within the processBlock buffer. + This can be called in processBlock to figure out which channel of the master AudioSampleBuffer + maps onto a specific bus's channel. + */ + int getChannelIndexInProcessBlockBuffer (bool isInput, int busIndex, int channelIndex) const noexcept; + + /** Returns the offset in a bus's buffer from an absolute channel indes. + + This method returns the offset in a bus's buffer given an absolute channel index. + It also provides the bus index. For example, this method would return one + for a processor with two stereo buses when given the absolute channel index. + */ + int getOffsetInBusBufferForAbsoluteChannelIndex (bool isInput, int absoluteChannelIndex, /*out*/ int& busIdx) const noexcept; + + /** Returns an AudioBuffer containing a set of channel pointers for a specific bus. + This can be called in processBlock to get a buffer containing a sub-group of the master + AudioSampleBuffer which contains all the plugin channels. + */ + template + AudioBuffer getBusBuffer (AudioBuffer& processBlockBuffer, bool isInput, int busIndex) const + { + const int busNumChannels = getChannelCountOfBus (isInput, busIndex); + const int channelOffset = getChannelIndexInProcessBlockBuffer (isInput, busIndex, 0); + + return AudioBuffer (processBlockBuffer.getArrayOfWritePointers() + channelOffset, + busNumChannels, processBlockBuffer.getNumSamples()); + } + + //============================================================================== + /** Returns true if the Audio processor is likely to support a given layout. + + This can be called regardless if the processor is currently running. + */ + bool checkBusesLayoutSupported (const BusesLayout& layouts) const; //============================================================================== /** Returns true if the Audio processor supports double precision floating point processing. @@ -405,7 +708,7 @@ public: getMainBusNumInputChannels if your processor does not have any sidechains or aux buses. */ - int getTotalNumInputChannels() const noexcept { return busArrangement.getTotalNumInputChannels(); } + int getTotalNumInputChannels() const noexcept { return cachedTotalIns; } /** Returns the total number of output channels. @@ -419,13 +722,56 @@ public: getMainBusNumOutputChannels if your processor does not have any sidechains or aux buses. */ - int getTotalNumOutputChannels() const noexcept { return busArrangement.getTotalNumOutputChannels(); } + int getTotalNumOutputChannels() const noexcept { return cachedTotalOuts; } /** Returns the number of input channels on the main bus. */ - int getMainBusNumInputChannels() const noexcept; + inline int getMainBusNumInputChannels() const noexcept { return getChannelCountOfBus (true, 0); } /** Returns the number of output channels on the main bus. */ - int getMainBusNumOutputChannels() const noexcept; + inline int getMainBusNumOutputChannels() const noexcept { return getChannelCountOfBus (false, 0); } + + //============================================================================== + /** Returns true if the channel layout map contains a certain layout. + + You can use this method to help you implement the checkBusesLayoutSupported + method. For example + + @code + bool checkBusesLayoutSupported (const BusesLayout& layouts) override + { + return containsLayout (layouts, {{1,1},{2,2}}); + } + @endcode + */ + #if JUCE_COMPILER_SUPPORTS_INITIALIZER_LISTS + static bool containsLayout (const BusesLayout& layouts, const std::initializer_list& channelLayoutList) + { + return containsLayout (layouts, layoutListToArray (channelLayoutList)); + } + #endif + template + static bool containsLayout (const BusesLayout& layouts, const short (&channelLayoutList) [numLayouts][2]) + { + return containsLayout (layouts, layoutListToArray (channelLayoutList)); + } + + /** Returns the next best layout which is contained in a channel layout map. + + You can use this mehtod to help you implement getNextBestLayout. For example: + + @code + BusesLayout getNextBestLayout (const BusesLayout& layouts) override + { + return getNextBestLayoutInLayoutList (layouts, {{1,1},{2,2}}); + } + @endcode + */ + template + BusesLayout getNextBestLayoutInLayoutList (const BusesLayout& layouts, + const short channelLayoutList[numLayouts][2]) + { + return getNextBestLayoutInList (layouts, layoutListToArray (channelLayoutList)); + } //============================================================================== /** Returns the current sample rate. @@ -475,6 +821,9 @@ public: /** Returns true if the processor supports MPE. */ virtual bool supportsMPE() const { return false; } + /** Returns true if this is a midi effect plug-in and does no audio processing. */ + virtual bool isMidiEffect() const { return false; } + //============================================================================== /** This returns a critical section that will automatically be locked while the host is calling the processBlock() method. @@ -875,9 +1224,15 @@ public: */ virtual void setCurrentProgramStateInformation (const void* data, int sizeInBytes); - /** This method is called when the number of input or output channels is changed. */ + /** This method is called when the total number of input or output channels is changed. */ virtual void numChannelsChanged(); + /** This method is called when the number of buses is changed. */ + virtual void numBusesChanged(); + + /** This method is called when the layout of the audio processor changes. */ + virtual void processorLayoutsChanged(); + //============================================================================== /** Adds a listener that will be called when an aspect of this processor changes. */ virtual void addListener (AudioProcessorListener* newListener); @@ -900,9 +1255,9 @@ public: /** This is called by the processor to specify its details before being played. You should call this function after having informed the processor about the channel - and bus layouts via setPreferredBusArrangement. + and bus layouts via setBusesLayout. - @see setPreferredBusArrangement + @see setBusesLayout */ void setRateAndBufferSizeDetails (double sampleRate, int blockSize) noexcept; @@ -944,7 +1299,7 @@ public: /** Returns the name of one of the processor's input channels. These functions are deprecated: your audio processor can inform the host - on channel layouts and names via the methods in the AudioBusArrangement class. + on channel layouts and names via the methods in the AudiobusLayout class. */ JUCE_DEPRECATED (virtual const String getInputChannelName (int channelIndex) const); JUCE_DEPRECATED (virtual const String getOutputChannelName (int channelIndex) const); @@ -952,7 +1307,7 @@ public: /** Returns true if the specified channel is part of a stereo pair with its neighbour. These functions are deprecated: your audio processor should specify the audio - channel pairing information by modifying the busArrangement member variable in + channel pairing information by modifying the busLayout member variable in the constructor. */ JUCE_DEPRECATED (virtual bool isInputChannelStereoPair (int index) const); JUCE_DEPRECATED (virtual bool isOutputChannelStereoPair (int index) const); @@ -981,6 +1336,110 @@ public: static void JUCE_CALLTYPE setTypeOfNextNewPlugin (WrapperType); protected: + /** Callback to query if the AudioProcessor supports a specific layout. + + This callback is called when the host probes the supported bus layouts via + the checkBusesLayoutSupported method. You should override this callback if you + would like to limit the layouts that your AudioProcessor supports. The default + implementation will accept any layout. JUCE does basic sanity checks so that + the provided layouts parameter will have the same number of buses as your + AudioProcessor. + + @see checkBusesLayoutSupported + */ + virtual bool isBusesLayoutSupported (const BusesLayout& /*layouts*/) const { return true; } + + /** Callback to check if a certain bus layout can now be applied + + Most subclasses will not need to override this method and should instead + override the isBusesLayoutSupported callback to reject certain layout changes. + + This callback is called when the user requests a layout change. It will only be + called if processing of the AudioProcessor has been stopped by a previous call to + releaseResources or after the construction of the AudioProcessor. It will be called + just before the actual layout change. By returning false you will abort the layout + change and setBusesLayout will return false indicating that the layout change + was not successful. + + The default implementation will simply call isBusesLayoutSupported. + + You only need to override this method if there is a chance that your AudioProcessor + may not accept a layout although you have previously claimed to support it via the + isBusesLayoutSupported callback. This can occur if your AudioProcessor's supported + layouts depend on other plug-in parameters which may have changed since the last + call to isBusesLayoutSupported, such as the format of an audio file which can be + selected by the user in the AudioProcessor's editor. This callback gives the + AudioProcessor a last chance to reject a layout if conditions have changed as it + is always called just before the actual layout change. + + As it is never called while the AudioProcessor is processing audio, it can also + be used for AudioProcessors which wrap other plug-in formats to apply the current + layout to the underlying plug-in. This callback gives such AudioProcessors a + chance to reject the layout change should an error occur with the underlying plug-in + during the layout change. + + @see isBusesLayoutSupported, setBusesLayout + */ + virtual bool canApplyBusesLayout (const BusesLayout& layouts) const { return isBusesLayoutSupported (layouts); } + + //============================================================================== + /** Structure used for AudioProcessor Callbacks */ + struct BusProperties + { + /** The name of the bus */ + String busName; + + /** The default layout of the bus */ + AudioChannelSet defaultLayout; + + /** Is this bus activated by default? */ + bool isActivatedByDefault; + }; + + struct BusesProperties + { + /** The layouts of the input buses */ + Array inputLayouts; + + /** The layouts of the output buses */ + Array outputLayouts; + + void addBus (bool isInput, const String& name, const AudioChannelSet& dfltLayout, bool isActivatedByDefault = true); + + BusesProperties withInput (const String& name, const AudioChannelSet& dfltLayout, bool isActivatedByDefault = true) const; + BusesProperties withOutput (const String& name, const AudioChannelSet& dfltLayout, bool isActivatedByDefault = true) const; + }; + + /** Callback to query if adding/removing buses currently possible. + + This callback is called when the host calls addBus or removeBus. + Similar to canApplyBusesLayout, this callback is only called while + the AudioProcessor is stopped and gives the processor a last + chance to reject a requested bus change. It can also be used to apply + the bus count change to an underlying wrapped plug-in. + + When adding a bus, isAddingBuses will be true and the plug-in is + expected to fill out outNewBusProperties with the properties of the + bus which will be created just after the succesful return of this callback. + + Implementations of AudioProcessor will rarely need to override this + method. Only override this method if your processor supports adding + and removing buses and if it needs more fine grain control over the + naming of new buses or may reject bus number changes although canAddBus + or canRemoveBus returned true. + + The default implementation will return false if canAddBus/canRemoveBus + returns false (the default behavior). Otherwise, this method returns + "Input #busIdx" for input buses and "Output #busIdx" for output buses + where busIdx is the index for newly created buses. The default layout + in this case will be the layout of the previous bus of the same direction. + */ + virtual bool canApplyBusCountChange (bool isInput, bool isAddingBuses, + BusProperties& outNewBusProperties); + + //============================================================================== + friend struct PluginBusUtilities; + /** @internal */ AudioPlayHead* playHead; @@ -988,6 +1447,67 @@ protected: void sendParamChangeMessageToListeners (int parameterIndex, float newValue); private: + //============================================================================== + struct InOutChannelPair + { + int16 inChannels, outChannels; + + InOutChannelPair () noexcept : inChannels (0), outChannels (0) {} + InOutChannelPair (short inCh, short outCh) noexcept : inChannels (inCh), outChannels (outCh) {} + InOutChannelPair (const InOutChannelPair& o) noexcept : inChannels (o.inChannels), outChannels (o.outChannels) {} + InOutChannelPair (const short (&config)[2]) noexcept : inChannels (config[0]), outChannels (config[1]) {} + + InOutChannelPair& operator= (const InOutChannelPair& o) { inChannels = o.inChannels; outChannels = o.outChannels; return *this; } + + bool operator== (const InOutChannelPair& other) const noexcept + { + return (other.inChannels == inChannels && other.outChannels == outChannels); + } + }; + + template + static Array layoutListToArray (const short (&configuration) [numLayouts][2]) + { + Array layouts; + + for (int i = 0; i < numLayouts; ++i) + { + InOutChannelPair pair (configuration [i]); + layouts.add (pair); + } + + return layouts; + } + + #if JUCE_COMPILER_SUPPORTS_INITIALIZER_LISTS + static Array layoutListToArray (const std::initializer_list& configuration) + { + Array layouts; + + for (std::initializer_list::const_iterator it = configuration.begin(); + it != configuration.end(); ++it) + { + InOutChannelPair pair (*it); + layouts.add (pair); + } + + return layouts; + } + #endif + + //============================================================================== + static BusesProperties busesPropertiesFromLayoutArray (const Array&); + + //============================================================================== + BusesLayout getNextBestLayoutInList (const BusesLayout& layouts, + const Array& channelLayouts) const; + static bool containsLayout (const BusesLayout& layouts, const Array& channelLayouts); + + //============================================================================== + void initialise (const BusesProperties& ioLayouts); + void createBus (bool inputBus, const BusProperties&); + + //============================================================================== Array listeners; Component::SafePointer activeEditor; double currentSampleRate; @@ -999,9 +1519,15 @@ private: ProcessingPrecision processingPrecision; CriticalSection callbackLock, listenerLock; + friend class Bus; + mutable OwnedArray inputBuses; + mutable OwnedArray outputBuses; + String cachedInputSpeakerArrString; String cachedOutputSpeakerArrString; + int cachedTotalIns, cachedTotalOuts; + OwnedArray managedParameters; AudioProcessorParameter* getParamChecked (int) const noexcept; @@ -1010,8 +1536,10 @@ private: #endif AudioProcessorListener* getListenerLocked (int) const noexcept; - void disableNonMainBuses (bool isInput); void updateSpeakerFormatStrings(); + bool applyBusLayouts (const BusesLayout& arr); + void audioIOChanged (bool busNumberChanged, bool channelNumChanged); + BusesLayout getNextBestLayout (const BusesLayout& layouts) const; template void processBypassed (AudioBuffer&, MidiBuffer&); diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp index a493ce1d58..74f4db4a88 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp +++ b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp @@ -264,13 +264,15 @@ struct ProcessBufferOp : public AudioGraphRenderingOp AudioBuffer buffer (channels, totalChans, numSamples); + if (processor->isSuspended()) { - ScopedLock callbackLock (processor->getCallbackLock()); + buffer.clear(); + } + else + { + ScopedLock lock (processor->getCallbackLock()); - if (processor->isSuspended()) - buffer.clear(); - else - callProcess (buffer, *sharedMidiBuffers.getUnchecked (midiBufferToUse)); + callProcess (buffer, *sharedMidiBuffers.getUnchecked (midiBufferToUse)); } } @@ -967,14 +969,7 @@ void AudioProcessorGraph::Node::prepare (const double newSampleRate, const int n processor->setProcessingPrecision (processor->supportsDoublePrecisionProcessing() ? precision : singlePrecision); - processor->setPlayConfigDetails (processor->getMainBusNumInputChannels(), - processor->getMainBusNumOutputChannels(), - newSampleRate, newBlockSize); - - // AudioProcessorGraph currently does not support processors with multiple buses - jassert (processor->getMainBusNumInputChannels() == processor->getTotalNumInputChannels() - && processor->getMainBusNumOutputChannels() == processor->getTotalNumOutputChannels()); - + processor->setRateAndBufferSizeDetails (newSampleRate, newBlockSize); processor->prepareToPlay (newSampleRate, newBlockSize); } } @@ -1188,14 +1183,14 @@ bool AudioProcessorGraph::canConnect (const uint32 sourceNodeId, const Node* const source = getNodeForId (sourceNodeId); if (source == nullptr - || (sourceChannelIndex != midiChannelIndex && sourceChannelIndex >= source->processor->getMainBusNumOutputChannels()) + || (sourceChannelIndex != midiChannelIndex && sourceChannelIndex >= source->processor->getTotalNumOutputChannels()) || (sourceChannelIndex == midiChannelIndex && ! source->processor->producesMidi())) return false; const Node* const dest = getNodeForId (destNodeId); if (dest == nullptr - || (destChannelIndex != midiChannelIndex && destChannelIndex >= dest->processor->getMainBusNumInputChannels()) + || (destChannelIndex != midiChannelIndex && destChannelIndex >= dest->processor->getTotalNumInputChannels()) || (destChannelIndex == midiChannelIndex && ! dest->processor->acceptsMidi())) return false; @@ -1278,9 +1273,9 @@ bool AudioProcessorGraph::isConnectionLegal (const Connection* const c) const return source != nullptr && dest != nullptr - && (c->sourceChannelIndex != midiChannelIndex ? isPositiveAndBelow (c->sourceChannelIndex, source->processor->getMainBusNumOutputChannels()) + && (c->sourceChannelIndex != midiChannelIndex ? isPositiveAndBelow (c->sourceChannelIndex, source->processor->getTotalNumOutputChannels()) : source->processor->producesMidi()) - && (c->destChannelIndex != midiChannelIndex ? isPositiveAndBelow (c->destChannelIndex, dest->processor->getMainBusNumInputChannels()) + && (c->destChannelIndex != midiChannelIndex ? isPositiveAndBelow (c->destChannelIndex, dest->processor->getTotalNumInputChannels()) : dest->processor->acceptsMidi()); } @@ -1545,13 +1540,13 @@ void AudioProcessorGraph::AudioGraphIOProcessor::fillInPluginDescription (Plugin d.version = "1.0"; d.isInstrument = false; - d.numInputChannels = getMainBusNumInputChannels(); + d.numInputChannels = getTotalNumInputChannels(); if (type == audioOutputNode && graph != nullptr) - d.numInputChannels = graph->getMainBusNumInputChannels(); + d.numInputChannels = graph->getTotalNumInputChannels(); - d.numOutputChannels = getMainBusNumOutputChannels(); + d.numOutputChannels = getTotalNumOutputChannels(); if (type == audioInputNode && graph != nullptr) - d.numOutputChannels = graph->getMainBusNumOutputChannels(); + d.numOutputChannels = graph->getTotalNumOutputChannels(); } void AudioProcessorGraph::AudioGraphIOProcessor::prepareToPlay (double, int) @@ -1666,8 +1661,8 @@ void AudioProcessorGraph::AudioGraphIOProcessor::setParentGraph (AudioProcessorG if (graph != nullptr) { - setPlayConfigDetails (type == audioOutputNode ? graph->getMainBusNumOutputChannels() : 0, - type == audioInputNode ? graph->getMainBusNumInputChannels() : 0, + setPlayConfigDetails (type == audioOutputNode ? graph->getTotalNumOutputChannels() : 0, + type == audioInputNode ? graph->getTotalNumInputChannels() : 0, getSampleRate(), getBlockSize()); diff --git a/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp b/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp index 4227dfb6e5..3455df5ca7 100644 --- a/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp +++ b/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp @@ -45,40 +45,7 @@ void AudioProcessorPlayer::setProcessor (AudioProcessor* const processorToPlay) { if (processorToPlay != nullptr && sampleRate > 0 && blockSize > 0) { - const int numInBuses = processorToPlay->busArrangement.inputBuses. size(); - const int numOutBuses = processorToPlay->busArrangement.outputBuses.size(); - - for (int i = 1; i < numInBuses; ++i) - { - bool success = processorToPlay->setPreferredBusArrangement (true, i, AudioChannelSet::disabled()); - - // if using in audio processor player, it must be possible to disable sidechains - jassert (success); - - ignoreUnused (success); - } - - for (int i = 1; i < numOutBuses; ++i) - { - bool success = processorToPlay->setPreferredBusArrangement (false, i, AudioChannelSet::disabled()); - - // if using in audio processor player, it must be possible to disable aux outputs - jassert (success); - - ignoreUnused(success); - } - - if (numInBuses > 0 && processorToPlay->busArrangement.inputBuses.getReference(0).channels.size() != numInputChans) - processorToPlay->setPreferredBusArrangement (true, 0, AudioChannelSet::canonicalChannelSet(numInputChans)); - - if (numOutBuses > 0 && processorToPlay->busArrangement.outputBuses.getReference(0).channels.size() != numOutputChans) - processorToPlay->setPreferredBusArrangement (false, 0, AudioChannelSet::canonicalChannelSet(numOutputChans)); - - jassert (processorToPlay->getTotalNumInputChannels() == numInputChans); - jassert (processorToPlay->getTotalNumOutputChannels() == numOutputChans); - - processorToPlay->setRateAndBufferSizeDetails (sampleRate, blockSize); - + processorToPlay->setPlayConfigDetails(numInputChans, numOutputChans, sampleRate, blockSize); const bool supportsDouble = processorToPlay->supportsDoublePrecisionProcessing() && isDoublePrecision; AudioProcessor::ProcessingPrecision precision = supportsDouble ? AudioProcessor::doublePrecision : AudioProcessor::singlePrecision;