├── .gitignore ├── .gitmodules ├── Assets ├── appicon-ios.png ├── appicon.png ├── bar.svg ├── close.svg ├── collapsed.svg ├── expanded.svg ├── graph.svg ├── help.svg ├── hidden.svg ├── pause.svg ├── play.svg ├── reset.svg ├── settings.svg └── visible.svg ├── Builds ├── LinuxMakefile │ ├── Makefile │ └── make_helpers │ │ ├── arch_detection.cpp │ │ ├── juce_LinuxSubprocessHelper.cpp │ │ └── juce_SimpleBinaryBuilder.cpp ├── MacOSX │ ├── AU.entitlements │ ├── AUv3_AppExtension.entitlements │ ├── All.entitlements │ ├── Icon.icns │ ├── Info-AU.plist │ ├── Info-AUv3_AppExtension.plist │ ├── Info-LV2_Manifest_Helper.plist │ ├── Info-LV2_Plugin.plist │ ├── Info-Standalone_Plugin.plist │ ├── Info-VST.plist │ ├── Info-VST3.plist │ ├── Info-VST3_Manifest_Helper.plist │ ├── LV2_Manifest_Helper.entitlements │ ├── LV2_Plugin.entitlements │ ├── RecentFilesMenuTemplate.nib │ ├── Shared_Code.entitlements │ ├── Standalone_Plugin.entitlements │ ├── VST.entitlements │ ├── VST3.entitlements │ └── showmidi.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcshareddata │ │ └── xcschemes │ │ └── ShowMIDI - Standalone Plugin.xcscheme ├── VisualStudio2022 │ ├── ShowMIDI_LV2ManifestHelper.vcxproj │ ├── ShowMIDI_LV2ManifestHelper.vcxproj.filters │ ├── ShowMIDI_LV2Plugin.vcxproj │ ├── ShowMIDI_LV2Plugin.vcxproj.filters │ ├── ShowMIDI_SharedCode.vcxproj │ ├── ShowMIDI_SharedCode.vcxproj.filters │ ├── ShowMIDI_StandalonePlugin.vcxproj │ ├── ShowMIDI_StandalonePlugin.vcxproj.filters │ ├── ShowMIDI_VST.vcxproj │ ├── ShowMIDI_VST.vcxproj.filters │ ├── ShowMIDI_VST3.vcxproj │ ├── ShowMIDI_VST3.vcxproj.filters │ ├── ShowMIDI_VST3ManifestHelper.vcxproj │ ├── ShowMIDI_VST3ManifestHelper.vcxproj.filters │ ├── icon.ico │ ├── resources.rc │ └── showmidi.sln └── iOS │ ├── AUv3_AppExtension.entitlements │ ├── All.entitlements │ ├── Icon.icns │ ├── Info-AUv3_AppExtension.plist │ ├── Info-Standalone_Plugin.plist │ ├── Shared_Code.entitlements │ ├── ShowMIDI.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ ├── ShowMIDI - AUv3 AppExtension.xcscheme │ │ └── ShowMIDI - Standalone Plugin.xcscheme │ ├── ShowMIDI │ └── Images.xcassets │ │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-29.png │ │ ├── Icon-29@2x.png │ │ ├── Icon-29@3x.png │ │ ├── Icon-60@2x.png │ │ ├── Icon-76.png │ │ ├── Icon-76@2x.png │ │ ├── Icon-83.5@2x.png │ │ ├── Icon-@3x.png │ │ ├── Icon-AppStore-1024.png │ │ ├── Icon-Notification-20@2x.png │ │ ├── Icon-Notification-20@3x.png │ │ ├── Icon-Notifications-20.png │ │ ├── Icon-Notifications-20@2x.png │ │ ├── Icon-Small-1.png │ │ ├── Icon-Small@2x-1.png │ │ ├── Icon-Spotlight-40.png │ │ ├── Icon-Spotlight-40@2x-1.png │ │ ├── Icon-Spotlight-40@2x.png │ │ └── Icon-Spotlight-40@3x.png │ │ └── LaunchImage.launchimage │ │ ├── Contents.json │ │ ├── LaunchImage-ipad-landscape-1x.png │ │ ├── LaunchImage-ipad-landscape-2x.png │ │ ├── LaunchImage-ipad-portrait-1x.png │ │ ├── LaunchImage-ipad-portrait-2x.png │ │ ├── LaunchImage-iphone-2x.png │ │ └── LaunchImage-iphone-retina4.png │ └── Standalone_Plugin.entitlements ├── CMakeLists.txt ├── COPYING.md ├── Design ├── icon.afdesign ├── icon.png ├── logo.pdf ├── play-pause.afdesign ├── showmidi-0.5.0.png ├── showmidi-0.8.0.png ├── showmidi-0.9.0.png ├── showmidi-1.0.0-announcement.afdesign ├── showmidi-1.0.0-graph.png ├── showmidi-1.0.0-line.png ├── showmidi.afdesign ├── showmidi.png ├── showmidi.svg └── wizard_image1.afphoto ├── Fonts ├── JetBrainsMono-Italic.ttf ├── JetBrainsMono-Regular.ttf ├── JetBrainsMono-SemiBold.ttf └── JetBrainsMono-SemiBoldItalic.ttf ├── Installers ├── Assets │ ├── wizard_icon1.bmp │ ├── wizard_icon2.bmp │ ├── wizard_icon3.bmp │ ├── wizard_icon4.bmp │ ├── wizard_icon5.bmp │ ├── wizard_icon6.bmp │ ├── wizard_icon7.bmp │ ├── wizard_image1.bmp │ ├── wizard_image2.bmp │ ├── wizard_image3.bmp │ ├── wizard_image4.bmp │ ├── wizard_image5.bmp │ ├── wizard_image6.bmp │ └── wizard_image7.bmp ├── ShowMIDI.iss ├── ShowMIDI.pkgproj ├── gpl-3.0.txt └── uninstall.sh ├── Interface └── Base.lproj │ ├── LaunchScreen.storyboard │ └── launch-screen-logo@2x.png ├── JuceLibraryCode ├── AppConfig.h ├── BinaryData.cpp ├── BinaryData.h ├── JuceHeader.h ├── JuceLV2Defines.h ├── JucePluginDefines.h ├── ReadMe.txt ├── include_juce_audio_basics.cpp ├── include_juce_audio_basics.mm ├── include_juce_audio_devices.cpp ├── include_juce_audio_devices.mm ├── include_juce_audio_formats.cpp ├── include_juce_audio_formats.mm ├── include_juce_audio_plugin_client_AAX.cpp ├── include_juce_audio_plugin_client_AAX.mm ├── include_juce_audio_plugin_client_AAX_utils.cpp ├── include_juce_audio_plugin_client_ARA.cpp ├── include_juce_audio_plugin_client_AU_1.mm ├── include_juce_audio_plugin_client_AU_2.mm ├── include_juce_audio_plugin_client_AUv3.mm ├── include_juce_audio_plugin_client_LV2.cpp ├── include_juce_audio_plugin_client_LV2.mm ├── include_juce_audio_plugin_client_Standalone.cpp ├── include_juce_audio_plugin_client_Unity.cpp ├── include_juce_audio_plugin_client_VST2.cpp ├── include_juce_audio_plugin_client_VST2.mm ├── include_juce_audio_plugin_client_VST3.cpp ├── include_juce_audio_plugin_client_VST3.mm ├── include_juce_audio_processors.cpp ├── include_juce_audio_processors.mm ├── include_juce_audio_processors_ara.cpp ├── include_juce_audio_processors_lv2_libs.cpp ├── include_juce_audio_utils.cpp ├── include_juce_audio_utils.mm ├── include_juce_core.cpp ├── include_juce_core.mm ├── include_juce_data_structures.cpp ├── include_juce_data_structures.mm ├── include_juce_events.cpp ├── include_juce_events.mm ├── include_juce_graphics.cpp ├── include_juce_graphics.mm ├── include_juce_gui_basics.cpp ├── include_juce_gui_basics.mm ├── include_juce_gui_extra.cpp ├── include_juce_gui_extra.mm └── modules │ └── juce_audio_devices │ └── native │ └── oboe │ └── CMakeLists.txt ├── README.md ├── Scripts ├── auv3_aum_size.sh ├── build-linux.sh ├── build-macos.sh └── build-windows.ps1 ├── Source ├── AboutComponent.cpp ├── AboutComponent.h ├── ChannelState.h ├── DetectDevice.h ├── DetectDevice.mm ├── DeviceListener.cpp ├── DeviceListener.h ├── DeviceManager.h ├── Main.cpp ├── MainLayoutComponent.cpp ├── MainLayoutComponent.h ├── MidiDeviceComponent.cpp ├── MidiDeviceComponent.h ├── MidiDeviceInfoComparator.h ├── MidiDevicesListener.cpp ├── MidiDevicesListener.h ├── PaintedButton.cpp ├── PaintedButton.h ├── PluginEditor.cpp ├── PluginEditor.h ├── PluginProcessor.cpp ├── PluginProcessor.h ├── PluginSettings.cpp ├── PluginSettings.h ├── PopupColourSelector.cpp ├── PopupColourSelector.h ├── PortListComponent.cpp ├── PortListComponent.h ├── PropertiesSettings.cpp ├── PropertiesSettings.h ├── Settings.h ├── SettingsComponent.cpp ├── SettingsComponent.h ├── SettingsManager.h ├── ShowMidiApplication.cpp ├── ShowMidiApplication.h ├── SidebarComponent.cpp ├── SidebarComponent.h ├── StandaloneDevicesComponent.cpp ├── StandaloneDevicesComponent.h ├── StandaloneWindow.cpp ├── StandaloneWindow.h ├── Theme.cpp ├── Theme.h ├── UwynLookAndFeel.cpp └── UwynLookAndFeel.h ├── Themes ├── bstation.svg ├── classic light.svg ├── darcula.svg ├── dark.svg ├── disco.svg ├── light.svg └── mouha.svg ├── libs └── vst2_readme.txt └── showmidi.jucer /.gitignore: -------------------------------------------------------------------------------- 1 | Builds/*/build 2 | Builds/MacOSX/showmidi.xcodeproj/xcuserdata 3 | Builds/MacOSX/showmidi.xcodeproj/project.xcworkspace/xcuserdata 4 | Builds/VisualStudio2022/.vs/ 5 | Builds/VisualStudio2022/x64/ 6 | Builds/VisualStudio2022/ShowMIDI_App.vcxproj.user 7 | Builds/iOS/ShowMIDI.xcodeproj/project.xcworkspace/xcuserdata 8 | Builds/iOS/ShowMIDI.xcodeproj/xcuserdata 9 | Plugin/Builds/MacOSX/ShowMIDIPlugin.xcodeproj/project.xcworkspace/xcuserdata 10 | /Builds/VisualStudio2022/ShowMIDI_StandalonePlugin.vcxproj.user 11 | libs/vst2 12 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "libs/clap-juce-extensions"] 2 | path = libs/clap-juce-extensions 3 | url = https://github.com/free-audio/clap-juce-extensions.git 4 | [submodule "JUCE"] 5 | path = JUCE 6 | url = https://github.com/juce-framework/JUCE.git -------------------------------------------------------------------------------- /Assets/appicon-ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Assets/appicon-ios.png -------------------------------------------------------------------------------- /Assets/appicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Assets/appicon.png -------------------------------------------------------------------------------- /Assets/bar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Assets/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /Assets/collapsed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Assets/expanded.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Assets/graph.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Assets/help.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Assets/hidden.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Assets/pause.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Assets/play.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Assets/reset.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Assets/settings.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Assets/visible.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Builds/LinuxMakefile/make_helpers/arch_detection.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | ============================================================================== 3 | 4 | This file is part of the JUCE library. 5 | Copyright (c) 2022 - Raw Material Software Limited 6 | 7 | JUCE is an open source library subject to commercial or open-source 8 | licensing. 9 | 10 | By using JUCE, you agree to the terms of both the JUCE 7 End-User License 11 | Agreement and JUCE Privacy Policy. 12 | 13 | End User License Agreement: www.juce.com/juce-7-licence 14 | Privacy Policy: www.juce.com/juce-privacy-policy 15 | 16 | Or: You may also use this code under the terms of the GPL v3 (see 17 | www.gnu.org/licenses). 18 | 19 | JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER 20 | EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE 21 | DISCLAIMED. 22 | 23 | ============================================================================== 24 | */ 25 | 26 | #if defined(__arm__) || defined(__TARGET_ARCH_ARM) || defined(_M_ARM) || defined(_M_ARM64) || defined(__aarch64__) || defined(__ARM64__) 27 | 28 | #if defined(_M_ARM64) || defined(__aarch64__) || defined(__ARM64__) 29 | #error JUCE_ARCH aarch64 30 | #elif (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM == 8) || defined(__ARMv8__) || defined(__ARMv8_A__) 31 | #error JUCE_ARCH armv8l 32 | #elif (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM == 7) || defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) || defined(_ARM_ARCH_7) || defined(__CORE_CORTEXA__) 33 | #error JUCE_ARCH armv7l 34 | #elif (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM == 6) || defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6M__) 35 | #error JUCE_ARCH armv6l 36 | #elif (defined(__TARGET_ARCH_ARM) && __TARGET_ARCH_ARM == 5) || defined(__ARM_ARCH_5TEJ__) 37 | #error JUCE_ARCH armv5l 38 | #else 39 | #error JUCE_ARCH arm 40 | #endif 41 | 42 | #elif defined(__i386) || defined(__i386__) || defined(_M_IX86) 43 | 44 | #error JUCE_ARCH i386 45 | 46 | #elif defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || defined(_M_X64) 47 | 48 | #error JUCE_ARCH x86_64 49 | 50 | #elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64) 51 | 52 | #error JUCE_ARCH ia64 53 | 54 | #elif defined(__mips) || defined(__mips__) || defined(_M_MRX000) 55 | 56 | #if defined(_MIPS_ARCH_MIPS64) || defined(__mips64) 57 | #error JUCE_ARCH mips64 58 | #else 59 | #error JUCE_ARCH mips 60 | #endif 61 | 62 | #elif defined(__ppc__) || defined(__ppc) || defined(__powerpc__) || defined(_ARCH_COM) || defined(_ARCH_PWR) || defined(_ARCH_PPC) || defined(_M_MPPC) || defined(_M_PPC) 63 | 64 | #if defined(__ppc64__) || defined(__powerpc64__) || defined(__64BIT__) 65 | #error JUCE_ARCH ppc64 66 | #else 67 | #error JUCE_ARCH ppc 68 | #endif 69 | 70 | #elif defined(__riscv) 71 | 72 | #if __riscv_xlen == 64 73 | #error JUCE_ARCH riscv64 74 | #else 75 | #error JUCE_ARCH riscv 76 | #endif 77 | 78 | #else 79 | 80 | #error JUCE_ARCH unknown 81 | 82 | #endif 83 | -------------------------------------------------------------------------------- /Builds/LinuxMakefile/make_helpers/juce_LinuxSubprocessHelper.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | ============================================================================== 3 | 4 | This file is part of the JUCE library. 5 | Copyright (c) 2022 - Raw Material Software Limited 6 | 7 | JUCE is an open source library subject to commercial or open-source 8 | licensing. 9 | 10 | By using JUCE, you agree to the terms of both the JUCE 7 End-User License 11 | Agreement and JUCE Privacy Policy. 12 | 13 | End User License Agreement: www.juce.com/juce-7-licence 14 | Privacy Policy: www.juce.com/juce-privacy-policy 15 | 16 | Or: You may also use this code under the terms of the GPL v3 (see 17 | www.gnu.org/licenses). 18 | 19 | JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER 20 | EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE 21 | DISCLAIMED. 22 | 23 | ============================================================================== 24 | */ 25 | 26 | #include 27 | 28 | int main (int argc, const char* const* argv) 29 | { 30 | if (argc >= 3) 31 | if (auto* handle = dlopen (argv[1], RTLD_LAZY)) 32 | if (auto* function = reinterpret_cast (dlsym (handle, argv[2]))) 33 | return function (argc - 3, argv + 3); 34 | 35 | return 1; 36 | } 37 | -------------------------------------------------------------------------------- /Builds/MacOSX/AU.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | com.apple.security.files.user-selected.read-write 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Builds/MacOSX/AUv3_AppExtension.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | com.apple.security.files.user-selected.read-write 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Builds/MacOSX/All.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | com.apple.security.files.user-selected.read-write 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Builds/MacOSX/Icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/MacOSX/Icon.icns -------------------------------------------------------------------------------- /Builds/MacOSX/Info-AU.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ITSAppUsesNonExemptEncryption 7 | 8 | CFBundleExecutable 9 | ${EXECUTABLE_NAME} 10 | CFBundleIconFile 11 | Icon.icns 12 | CFBundleIdentifier 13 | com.uwyn.showmidi 14 | CFBundleName 15 | ShowMIDI 16 | CFBundleDisplayName 17 | ShowMIDI 18 | CFBundlePackageType 19 | BNDL 20 | CFBundleSignature 21 | ???? 22 | CFBundleShortVersionString 23 | 1.0.1 24 | CFBundleVersion 25 | 22 26 | NSHumanReadableCopyright 27 | ©2023 Uwyn LLC 28 | NSHighResolutionCapable 29 | 30 | LSApplicationCategoryType 31 | public.app-category.music 32 | AudioComponents 33 | 34 | 35 | name 36 | Uwyn: ShowMIDI 37 | description 38 | Visualize MIDI activity 39 | factoryFunction 40 | ShowMIDIAUFactory 41 | manufacturer 42 | Uwyn 43 | type 44 | aumi 45 | subtype 46 | shmi 47 | version 48 | 65537 49 | sandboxSafe 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /Builds/MacOSX/Info-AUv3_AppExtension.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ITSAppUsesNonExemptEncryption 7 | 8 | CFBundleExecutable 9 | ${EXECUTABLE_NAME} 10 | CFBundleIconFile 11 | Icon.icns 12 | CFBundleIdentifier 13 | com.uwyn.showmidi.showmidiAUv3 14 | CFBundleName 15 | ShowMIDI 16 | CFBundleDisplayName 17 | ShowMIDI 18 | CFBundlePackageType 19 | XPC! 20 | CFBundleSignature 21 | ???? 22 | CFBundleShortVersionString 23 | 1.0.1 24 | CFBundleVersion 25 | 22 26 | NSHumanReadableCopyright 27 | ©2023 Uwyn LLC 28 | NSHighResolutionCapable 29 | 30 | LSApplicationCategoryType 31 | public.app-category.music 32 | NSExtension 33 | 34 | NSExtensionPrincipalClass 35 | ShowMIDIAUFactoryAUv3 36 | NSExtensionPointIdentifier 37 | com.apple.AudioUnit-UI 38 | NSExtensionAttributes 39 | 40 | AudioComponents 41 | 42 | 43 | name 44 | Uwyn: ShowMIDI 45 | description 46 | Visualize MIDI activity 47 | factoryFunction 48 | ShowMIDIAUFactoryAUv3 49 | manufacturer 50 | Uwyn 51 | type 52 | aumi 53 | subtype 54 | shmi 55 | version 56 | 65537 57 | sandboxSafe 58 | 59 | tags 60 | 61 | Effects 62 | MIDI 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /Builds/MacOSX/Info-LV2_Manifest_Helper.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ITSAppUsesNonExemptEncryption 7 | 8 | CFBundleExecutable 9 | ${EXECUTABLE_NAME} 10 | CFBundleIconFile 11 | Icon.icns 12 | CFBundleIdentifier 13 | com.uwyn.showmidi 14 | CFBundleName 15 | ShowMIDI 16 | CFBundleDisplayName 17 | ShowMIDI 18 | CFBundlePackageType 19 | 20 | CFBundleSignature 21 | 22 | CFBundleShortVersionString 23 | 1.0.1 24 | CFBundleVersion 25 | 22 26 | NSHumanReadableCopyright 27 | ©2023 Uwyn LLC 28 | NSHighResolutionCapable 29 | 30 | LSApplicationCategoryType 31 | public.app-category.music 32 | 33 | 34 | -------------------------------------------------------------------------------- /Builds/MacOSX/Info-LV2_Plugin.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ITSAppUsesNonExemptEncryption 7 | 8 | CFBundleExecutable 9 | ${EXECUTABLE_NAME} 10 | CFBundleIconFile 11 | Icon.icns 12 | CFBundleIdentifier 13 | com.uwyn.showmidi 14 | CFBundleName 15 | ShowMIDI 16 | CFBundleDisplayName 17 | ShowMIDI 18 | CFBundlePackageType 19 | 20 | CFBundleSignature 21 | 22 | CFBundleShortVersionString 23 | 1.0.1 24 | CFBundleVersion 25 | 22 26 | NSHumanReadableCopyright 27 | ©2023 Uwyn LLC 28 | NSHighResolutionCapable 29 | 30 | LSApplicationCategoryType 31 | public.app-category.music 32 | 33 | 34 | -------------------------------------------------------------------------------- /Builds/MacOSX/Info-Standalone_Plugin.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ITSAppUsesNonExemptEncryption 7 | 8 | CFBundleExecutable 9 | ${EXECUTABLE_NAME} 10 | CFBundleIconFile 11 | Icon.icns 12 | CFBundleIdentifier 13 | com.uwyn.showmidi 14 | CFBundleName 15 | ShowMIDI 16 | CFBundleDisplayName 17 | ShowMIDI 18 | CFBundlePackageType 19 | APPL 20 | CFBundleSignature 21 | ???? 22 | CFBundleShortVersionString 23 | 1.0.1 24 | CFBundleVersion 25 | 22 26 | NSHumanReadableCopyright 27 | ©2023 Uwyn LLC 28 | NSHighResolutionCapable 29 | 30 | LSApplicationCategoryType 31 | public.app-category.music 32 | 33 | 34 | -------------------------------------------------------------------------------- /Builds/MacOSX/Info-VST.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ITSAppUsesNonExemptEncryption 7 | 8 | CFBundleExecutable 9 | ${EXECUTABLE_NAME} 10 | CFBundleIconFile 11 | Icon.icns 12 | CFBundleIdentifier 13 | com.uwyn.showmidi 14 | CFBundleName 15 | ShowMIDI 16 | CFBundleDisplayName 17 | ShowMIDI 18 | CFBundlePackageType 19 | BNDL 20 | CFBundleSignature 21 | ???? 22 | CFBundleShortVersionString 23 | 1.0.1 24 | CFBundleVersion 25 | 22 26 | NSHumanReadableCopyright 27 | ©2023 Uwyn LLC 28 | NSHighResolutionCapable 29 | 30 | LSApplicationCategoryType 31 | public.app-category.music 32 | 33 | 34 | -------------------------------------------------------------------------------- /Builds/MacOSX/Info-VST3.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ITSAppUsesNonExemptEncryption 7 | 8 | CFBundleExecutable 9 | ${EXECUTABLE_NAME} 10 | CFBundleIconFile 11 | Icon.icns 12 | CFBundleIdentifier 13 | com.uwyn.showmidi 14 | CFBundleName 15 | ShowMIDI 16 | CFBundleDisplayName 17 | ShowMIDI 18 | CFBundlePackageType 19 | BNDL 20 | CFBundleSignature 21 | ???? 22 | CFBundleShortVersionString 23 | 1.0.1 24 | CFBundleVersion 25 | 22 26 | NSHumanReadableCopyright 27 | ©2023 Uwyn LLC 28 | NSHighResolutionCapable 29 | 30 | LSApplicationCategoryType 31 | public.app-category.music 32 | 33 | 34 | -------------------------------------------------------------------------------- /Builds/MacOSX/Info-VST3_Manifest_Helper.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ITSAppUsesNonExemptEncryption 7 | 8 | CFBundleExecutable 9 | ${EXECUTABLE_NAME} 10 | CFBundleIconFile 11 | Icon.icns 12 | CFBundleIdentifier 13 | com.uwyn.showmidi 14 | CFBundleName 15 | ShowMIDI 16 | CFBundleDisplayName 17 | ShowMIDI 18 | CFBundlePackageType 19 | 20 | CFBundleSignature 21 | 22 | CFBundleShortVersionString 23 | 1.0.1 24 | CFBundleVersion 25 | 22 26 | NSHumanReadableCopyright 27 | ©2023 Uwyn LLC 28 | NSHighResolutionCapable 29 | 30 | LSApplicationCategoryType 31 | public.app-category.music 32 | 33 | 34 | -------------------------------------------------------------------------------- /Builds/MacOSX/LV2_Manifest_Helper.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | com.apple.security.files.user-selected.read-write 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Builds/MacOSX/LV2_Plugin.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | com.apple.security.files.user-selected.read-write 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Builds/MacOSX/RecentFilesMenuTemplate.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/MacOSX/RecentFilesMenuTemplate.nib -------------------------------------------------------------------------------- /Builds/MacOSX/Shared_Code.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | com.apple.security.files.user-selected.read-write 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Builds/MacOSX/Standalone_Plugin.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | com.apple.security.files.user-selected.read-write 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Builds/MacOSX/VST.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | com.apple.security.files.user-selected.read-write 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Builds/MacOSX/VST3.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | com.apple.security.files.user-selected.read-write 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Builds/MacOSX/showmidi.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Builds/MacOSX/showmidi.xcodeproj/xcshareddata/xcschemes/ShowMIDI - Standalone Plugin.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 42 | 44 | 50 | 51 | 52 | 53 | 59 | 61 | 67 | 68 | 69 | 70 | 72 | 73 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /Builds/VisualStudio2022/ShowMIDI_LV2ManifestHelper.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | JUCE Library Code 10 | 11 | 12 | 13 | 14 | JUCE Library Code 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Builds/VisualStudio2022/ShowMIDI_LV2Plugin.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {8FF7E4BF-402D-E88A-60F1-F4B63E830502} 7 | 8 | 9 | {BA0A76FA-458F-0B1C-02E9-ECFBF81140EC} 10 | 11 | 12 | {FE955B6B-68AC-AA07-70D8-2413F6DB65C8} 13 | 14 | 15 | {7ED5A90E-41AF-A1EF-659B-37CEEAB9BA61} 16 | 17 | 18 | 19 | 20 | JUCE Modules\juce_audio_plugin_client\LV2 21 | 22 | 23 | JUCE Modules\juce_audio_plugin_client 24 | 25 | 26 | JUCE Modules\juce_audio_plugin_client 27 | 28 | 29 | JUCE Library Code 30 | 31 | 32 | 33 | 34 | 35 | JUCE Library Code 36 | 37 | 38 | 39 | 40 | JUCE Library Code 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Builds/VisualStudio2022/ShowMIDI_StandalonePlugin.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {725C0EA8-9736-764D-81E6-01695B6B00B3} 7 | 8 | 9 | {BA0A76FA-458F-0B1C-02E9-ECFBF81140EC} 10 | 11 | 12 | {FE955B6B-68AC-AA07-70D8-2413F6DB65C8} 13 | 14 | 15 | {7ED5A90E-41AF-A1EF-659B-37CEEAB9BA61} 16 | 17 | 18 | 19 | 20 | JUCE Modules\juce_audio_plugin_client 21 | 22 | 23 | JUCE Library Code 24 | 25 | 26 | 27 | 28 | JUCE Modules\juce_audio_plugin_client\Standalone 29 | 30 | 31 | 32 | 33 | JUCE Library Code 34 | 35 | 36 | 37 | 38 | JUCE Library Code 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /Builds/VisualStudio2022/ShowMIDI_VST.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {BA0A76FA-458F-0B1C-02E9-ECFBF81140EC} 7 | 8 | 9 | {FE955B6B-68AC-AA07-70D8-2413F6DB65C8} 10 | 11 | 12 | {7ED5A90E-41AF-A1EF-659B-37CEEAB9BA61} 13 | 14 | 15 | 16 | 17 | JUCE Modules\juce_audio_plugin_client 18 | 19 | 20 | JUCE Modules\juce_audio_plugin_client 21 | 22 | 23 | JUCE Library Code 24 | 25 | 26 | 27 | 28 | 29 | JUCE Library Code 30 | 31 | 32 | 33 | 34 | JUCE Library Code 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /Builds/VisualStudio2022/ShowMIDI_VST3.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {68760A18-ED41-41C7-2560-F3A65E9AD133} 7 | 8 | 9 | {BA0A76FA-458F-0B1C-02E9-ECFBF81140EC} 10 | 11 | 12 | {FE955B6B-68AC-AA07-70D8-2413F6DB65C8} 13 | 14 | 15 | {7ED5A90E-41AF-A1EF-659B-37CEEAB9BA61} 16 | 17 | 18 | 19 | 20 | JUCE Modules\juce_audio_plugin_client\VST3 21 | 22 | 23 | JUCE Modules\juce_audio_plugin_client\VST3 24 | 25 | 26 | JUCE Modules\juce_audio_plugin_client 27 | 28 | 29 | JUCE Modules\juce_audio_plugin_client 30 | 31 | 32 | JUCE Library Code 33 | 34 | 35 | 36 | 37 | 38 | JUCE Library Code 39 | 40 | 41 | 42 | 43 | JUCE Library Code 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /Builds/VisualStudio2022/ShowMIDI_VST3ManifestHelper.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | JUCE Library Code 10 | 11 | 12 | 13 | 14 | JUCE Library Code 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Builds/VisualStudio2022/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/VisualStudio2022/icon.ico -------------------------------------------------------------------------------- /Builds/VisualStudio2022/resources.rc: -------------------------------------------------------------------------------- 1 | #pragma code_page(65001) 2 | 3 | #ifdef JUCE_USER_DEFINED_RC_FILE 4 | #include JUCE_USER_DEFINED_RC_FILE 5 | #else 6 | 7 | #undef WIN32_LEAN_AND_MEAN 8 | #define WIN32_LEAN_AND_MEAN 9 | #include 10 | 11 | VS_VERSION_INFO VERSIONINFO 12 | FILEVERSION 1,0,1,0 13 | BEGIN 14 | BLOCK "StringFileInfo" 15 | BEGIN 16 | BLOCK "040904E4" 17 | BEGIN 18 | VALUE "CompanyName", "Uwyn\0" 19 | VALUE "LegalCopyright", "©2023 Uwyn LLC\0" 20 | VALUE "FileDescription", "ShowMIDI\0" 21 | VALUE "FileVersion", "1.0.1\0" 22 | VALUE "ProductName", "ShowMIDI\0" 23 | VALUE "ProductVersion", "1.0.1\0" 24 | END 25 | END 26 | 27 | BLOCK "VarFileInfo" 28 | BEGIN 29 | VALUE "Translation", 0x409, 1252 30 | END 31 | END 32 | 33 | #endif 34 | 35 | IDI_ICON1 ICON DISCARDABLE "icon.ico" 36 | IDI_ICON2 ICON DISCARDABLE "icon.ico" -------------------------------------------------------------------------------- /Builds/VisualStudio2022/showmidi.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio Version 17 4 | 5 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ShowMIDI - Standalone Plugin", "ShowMIDI_StandalonePlugin.vcxproj", "{2B4F9D8C-0172-A8B9-CE6A-A38A58226832}" 6 | ProjectSection(ProjectDependencies) = postProject 7 | {A34E9471-D4CC-86F7-7BFE-6B029AD9E991} = {A34E9471-D4CC-86F7-7BFE-6B029AD9E991} 8 | EndProjectSection 9 | EndProject 10 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ShowMIDI - VST", "ShowMIDI_VST.vcxproj", "{1FC1894E-F35C-AC8A-08E3-3017498ED029}" 11 | ProjectSection(ProjectDependencies) = postProject 12 | {A34E9471-D4CC-86F7-7BFE-6B029AD9E991} = {A34E9471-D4CC-86F7-7BFE-6B029AD9E991} 13 | EndProjectSection 14 | EndProject 15 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ShowMIDI - VST3", "ShowMIDI_VST3.vcxproj", "{4DDDB4C1-B624-AEE2-D2A5-B7B55FF21687}" 16 | ProjectSection(ProjectDependencies) = postProject 17 | {A34E9471-D4CC-86F7-7BFE-6B029AD9E991} = {A34E9471-D4CC-86F7-7BFE-6B029AD9E991} 18 | {56E0C9E0-23F9-584B-A4D0-272AC6BD51E4} = {56E0C9E0-23F9-584B-A4D0-272AC6BD51E4} 19 | EndProjectSection 20 | EndProject 21 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ShowMIDI - LV2 Plugin", "ShowMIDI_LV2Plugin.vcxproj", "{D992E02F-C650-25EF-7465-C0912FE66ECF}" 22 | ProjectSection(ProjectDependencies) = postProject 23 | {A34E9471-D4CC-86F7-7BFE-6B029AD9E991} = {A34E9471-D4CC-86F7-7BFE-6B029AD9E991} 24 | {AA384ABD-77F9-8A67-6540-43791D7F3919} = {AA384ABD-77F9-8A67-6540-43791D7F3919} 25 | EndProjectSection 26 | EndProject 27 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ShowMIDI - Shared Code", "ShowMIDI_SharedCode.vcxproj", "{A34E9471-D4CC-86F7-7BFE-6B029AD9E991}" 28 | EndProject 29 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ShowMIDI - LV2 Manifest Helper", "ShowMIDI_LV2ManifestHelper.vcxproj", "{AA384ABD-77F9-8A67-6540-43791D7F3919}" 30 | EndProject 31 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ShowMIDI - VST3 Manifest Helper", "ShowMIDI_VST3ManifestHelper.vcxproj", "{56E0C9E0-23F9-584B-A4D0-272AC6BD51E4}" 32 | EndProject 33 | Global 34 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 35 | Debug|x64 = Debug|x64 36 | Release|x64 = Release|x64 37 | EndGlobalSection 38 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 39 | {1FC1894E-F35C-AC8A-08E3-3017498ED029}.Debug|x64.ActiveCfg = Debug|x64 40 | {1FC1894E-F35C-AC8A-08E3-3017498ED029}.Debug|x64.Build.0 = Debug|x64 41 | {1FC1894E-F35C-AC8A-08E3-3017498ED029}.Release|x64.ActiveCfg = Release|x64 42 | {1FC1894E-F35C-AC8A-08E3-3017498ED029}.Release|x64.Build.0 = Release|x64 43 | {4DDDB4C1-B624-AEE2-D2A5-B7B55FF21687}.Debug|x64.ActiveCfg = Debug|x64 44 | {4DDDB4C1-B624-AEE2-D2A5-B7B55FF21687}.Debug|x64.Build.0 = Debug|x64 45 | {4DDDB4C1-B624-AEE2-D2A5-B7B55FF21687}.Release|x64.ActiveCfg = Release|x64 46 | {4DDDB4C1-B624-AEE2-D2A5-B7B55FF21687}.Release|x64.Build.0 = Release|x64 47 | {2B4F9D8C-0172-A8B9-CE6A-A38A58226832}.Debug|x64.ActiveCfg = Debug|x64 48 | {2B4F9D8C-0172-A8B9-CE6A-A38A58226832}.Debug|x64.Build.0 = Debug|x64 49 | {2B4F9D8C-0172-A8B9-CE6A-A38A58226832}.Release|x64.ActiveCfg = Release|x64 50 | {2B4F9D8C-0172-A8B9-CE6A-A38A58226832}.Release|x64.Build.0 = Release|x64 51 | {D992E02F-C650-25EF-7465-C0912FE66ECF}.Debug|x64.ActiveCfg = Debug|x64 52 | {D992E02F-C650-25EF-7465-C0912FE66ECF}.Debug|x64.Build.0 = Debug|x64 53 | {D992E02F-C650-25EF-7465-C0912FE66ECF}.Release|x64.ActiveCfg = Release|x64 54 | {D992E02F-C650-25EF-7465-C0912FE66ECF}.Release|x64.Build.0 = Release|x64 55 | {A34E9471-D4CC-86F7-7BFE-6B029AD9E991}.Debug|x64.ActiveCfg = Debug|x64 56 | {A34E9471-D4CC-86F7-7BFE-6B029AD9E991}.Debug|x64.Build.0 = Debug|x64 57 | {A34E9471-D4CC-86F7-7BFE-6B029AD9E991}.Release|x64.ActiveCfg = Release|x64 58 | {A34E9471-D4CC-86F7-7BFE-6B029AD9E991}.Release|x64.Build.0 = Release|x64 59 | {AA384ABD-77F9-8A67-6540-43791D7F3919}.Debug|x64.ActiveCfg = Debug|x64 60 | {AA384ABD-77F9-8A67-6540-43791D7F3919}.Debug|x64.Build.0 = Debug|x64 61 | {AA384ABD-77F9-8A67-6540-43791D7F3919}.Release|x64.ActiveCfg = Release|x64 62 | {AA384ABD-77F9-8A67-6540-43791D7F3919}.Release|x64.Build.0 = Release|x64 63 | {56E0C9E0-23F9-584B-A4D0-272AC6BD51E4}.Debug|x64.ActiveCfg = Debug|x64 64 | {56E0C9E0-23F9-584B-A4D0-272AC6BD51E4}.Debug|x64.Build.0 = Debug|x64 65 | {56E0C9E0-23F9-584B-A4D0-272AC6BD51E4}.Release|x64.ActiveCfg = Release|x64 66 | {56E0C9E0-23F9-584B-A4D0-272AC6BD51E4}.Release|x64.Build.0 = Release|x64 67 | EndGlobalSection 68 | GlobalSection(SolutionProperties) = preSolution 69 | HideSolutionNode = FALSE 70 | EndGlobalSection 71 | EndGlobal 72 | -------------------------------------------------------------------------------- /Builds/iOS/AUv3_AppExtension.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.icloud-container-identifiers 6 | 7 | iCloud.$(CFBundleIdentifier) 8 | 9 | com.apple.developer.icloud-services 10 | 11 | CloudDocuments 12 | 13 | com.apple.developer.ubiquity-container-identifiers 14 | 15 | iCloud.$(CFBundleIdentifier) 16 | 17 | com.apple.security.application-groups 18 | 19 | group.com.uwyn.showmidi 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Builds/iOS/All.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.icloud-container-identifiers 6 | 7 | iCloud.$(CFBundleIdentifier) 8 | 9 | com.apple.developer.icloud-services 10 | 11 | CloudDocuments 12 | 13 | com.apple.developer.ubiquity-container-identifiers 14 | 15 | iCloud.$(CFBundleIdentifier) 16 | 17 | com.apple.security.application-groups 18 | 19 | group.com.uwyn.showmidi 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Builds/iOS/Icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/Icon.icns -------------------------------------------------------------------------------- /Builds/iOS/Info-AUv3_AppExtension.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDisplayName 6 | ShowMIDI 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.uwyn.showmidi.showmidiAUv3 11 | CFBundleName 12 | ShowMIDI 13 | CFBundlePackageType 14 | XPC! 15 | CFBundleShortVersionString 16 | 1.0.1 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 22 21 | ITSAppUsesNonExemptEncryption 22 | 23 | LSRequiresIPhoneOS 24 | 25 | NSExtension 26 | 27 | NSExtensionAttributes 28 | 29 | AudioComponents 30 | 31 | 32 | description 33 | Visualize MIDI activity 34 | factoryFunction 35 | ShowMIDIAUFactoryAUv3 36 | manufacturer 37 | Uwyn 38 | name 39 | Uwyn: ShowMIDI 40 | sandboxSafe 41 | 42 | subtype 43 | shmi 44 | tags 45 | 46 | Effects 47 | size:{296, 600} 48 | MIDI 49 | 50 | type 51 | aumi 52 | version 53 | 65537 54 | 55 | 56 | 57 | NSExtensionPointIdentifier 58 | com.apple.AudioUnit-UI 59 | NSExtensionPrincipalClass 60 | ShowMIDIAUFactoryAUv3 61 | 62 | NSHighResolutionCapable 63 | 64 | NSHumanReadableCopyright 65 | ©2023 Uwyn LLC 66 | UILaunchStoryboardName 67 | LaunchScreen 68 | UISupportsDocumentBrowser 69 | 70 | UIViewControllerBasedStatusBarAppearance 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /Builds/iOS/Info-Standalone_Plugin.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ITSAppUsesNonExemptEncryption 7 | 8 | LSRequiresIPhoneOS 9 | 10 | UIViewControllerBasedStatusBarAppearance 11 | 12 | UILaunchStoryboardName 13 | LaunchScreen 14 | CFBundleExecutable 15 | ${EXECUTABLE_NAME} 16 | CFBundleIdentifier 17 | com.uwyn.showmidi 18 | CFBundleName 19 | ShowMIDI 20 | CFBundleDisplayName 21 | ShowMIDI 22 | CFBundlePackageType 23 | APPL 24 | CFBundleSignature 25 | ???? 26 | CFBundleShortVersionString 27 | 1.0.1 28 | CFBundleVersion 29 | 22 30 | NSHumanReadableCopyright 31 | ©2023 Uwyn LLC 32 | NSHighResolutionCapable 33 | 34 | UIFileSharingEnabled 35 | 36 | UISupportsDocumentBrowser 37 | 38 | UIRequiresFullScreen 39 | 40 | UISupportedInterfaceOrientations 41 | 42 | UIInterfaceOrientationLandscapeLeft 43 | UIInterfaceOrientationLandscapeRight 44 | UIInterfaceOrientationPortrait 45 | UIInterfaceOrientationPortraitUpsideDown 46 | 47 | UIBackgroundModes 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /Builds/iOS/Shared_Code.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.icloud-container-identifiers 6 | 7 | iCloud.$(CFBundleIdentifier) 8 | 9 | com.apple.developer.icloud-services 10 | 11 | CloudDocuments 12 | 13 | com.apple.developer.ubiquity-container-identifiers 14 | 15 | iCloud.$(CFBundleIdentifier) 16 | 17 | com.apple.security.application-groups 18 | 19 | group.com.uwyn.showmidi 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI.xcodeproj/xcshareddata/xcschemes/ShowMIDI - AUv3 AppExtension.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | 10 | 16 | 22 | 23 | 24 | 30 | 36 | 37 | 38 | 39 | 40 | 46 | 47 | 59 | 61 | 67 | 68 | 69 | 70 | 78 | 80 | 86 | 87 | 88 | 89 | 91 | 92 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI.xcodeproj/xcshareddata/xcschemes/ShowMIDI - Standalone Plugin.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 42 | 44 | 50 | 51 | 52 | 53 | 59 | 61 | 67 | 68 | 69 | 70 | 72 | 73 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "idiom": "iphone", 5 | "size": "20x20", 6 | "filename": "Icon-Notification-20@2x.png", 7 | "scale": "2x" 8 | }, 9 | { 10 | "idiom": "iphone", 11 | "size": "20x20", 12 | "filename": "Icon-Notification-20@3x.png", 13 | "scale": "3x" 14 | }, 15 | { 16 | "idiom": "iphone", 17 | "size": "29x29", 18 | "filename": "Icon-29.png", 19 | "scale": "1x" 20 | }, 21 | { 22 | "idiom": "iphone", 23 | "size": "29x29", 24 | "filename": "Icon-29@2x.png", 25 | "scale": "2x" 26 | }, 27 | { 28 | "idiom": "iphone", 29 | "size": "29x29", 30 | "filename": "Icon-29@3x.png", 31 | "scale": "3x" 32 | }, 33 | { 34 | "idiom": "iphone", 35 | "size": "40x40", 36 | "filename": "Icon-Spotlight-40@2x.png", 37 | "scale": "2x" 38 | }, 39 | { 40 | "idiom": "iphone", 41 | "size": "40x40", 42 | "filename": "Icon-Spotlight-40@3x.png", 43 | "scale": "3x" 44 | }, 45 | { 46 | "idiom": "iphone", 47 | "size": "60x60", 48 | "filename": "Icon-60@2x.png", 49 | "scale": "2x" 50 | }, 51 | { 52 | "idiom": "iphone", 53 | "size": "60x60", 54 | "filename": "Icon-@3x.png", 55 | "scale": "3x" 56 | }, 57 | { 58 | "idiom": "ipad", 59 | "size": "20x20", 60 | "filename": "Icon-Notifications-20.png", 61 | "scale": "1x" 62 | }, 63 | { 64 | "idiom": "ipad", 65 | "size": "20x20", 66 | "filename": "Icon-Notifications-20@2x.png", 67 | "scale": "2x" 68 | }, 69 | { 70 | "idiom": "ipad", 71 | "size": "29x29", 72 | "filename": "Icon-Small-1.png", 73 | "scale": "1x" 74 | }, 75 | { 76 | "idiom": "ipad", 77 | "size": "29x29", 78 | "filename": "Icon-Small@2x-1.png", 79 | "scale": "2x" 80 | }, 81 | { 82 | "idiom": "ipad", 83 | "size": "40x40", 84 | "filename": "Icon-Spotlight-40.png", 85 | "scale": "1x" 86 | }, 87 | { 88 | "idiom": "ipad", 89 | "size": "40x40", 90 | "filename": "Icon-Spotlight-40@2x-1.png", 91 | "scale": "2x" 92 | }, 93 | { 94 | "idiom": "ipad", 95 | "size": "76x76", 96 | "filename": "Icon-76.png", 97 | "scale": "1x" 98 | }, 99 | { 100 | "idiom": "ipad", 101 | "size": "76x76", 102 | "filename": "Icon-76@2x.png", 103 | "scale": "2x" 104 | }, 105 | { 106 | "idiom": "ipad", 107 | "size": "83.5x83.5", 108 | "filename": "Icon-83.5@2x.png", 109 | "scale": "2x" 110 | }, 111 | { 112 | "idiom": "ios-marketing", 113 | "size": "1024x1024", 114 | "filename": "Icon-AppStore-1024.png", 115 | "scale": "1x" 116 | } 117 | ], 118 | "info": { 119 | "version": 1, 120 | "author": "xcode" 121 | } 122 | } -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-29.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-29@2x.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-29@3x.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-83.5@2x.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-@3x.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-AppStore-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-AppStore-1024.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Notification-20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Notification-20@2x.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Notification-20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Notification-20@3x.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Notifications-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Notifications-20.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Notifications-20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Notifications-20@2x.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Small-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Small-1.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "orientation": "portrait", 5 | "idiom": "iphone", 6 | "extent": "full-screen", 7 | "minimum-system-version": "7.0", 8 | "scale": "2x", 9 | "filename": "LaunchImage-iphone-2x.png" 10 | }, 11 | { 12 | "orientation": "portrait", 13 | "idiom": "iphone", 14 | "extent": "full-screen", 15 | "minimum-system-version": "7.0", 16 | "scale": "2x", 17 | "filename": "LaunchImage-iphone-retina4.png", 18 | "subtype": "retina4" 19 | }, 20 | { 21 | "orientation": "portrait", 22 | "idiom": "ipad", 23 | "extent": "full-screen", 24 | "minimum-system-version": "7.0", 25 | "scale": "1x", 26 | "filename": "LaunchImage-ipad-portrait-1x.png" 27 | }, 28 | { 29 | "orientation": "landscape", 30 | "idiom": "ipad", 31 | "extent": "full-screen", 32 | "minimum-system-version": "7.0", 33 | "scale": "1x", 34 | "filename": "LaunchImage-ipad-landscape-1x.png" 35 | }, 36 | { 37 | "orientation": "portrait", 38 | "idiom": "ipad", 39 | "extent": "full-screen", 40 | "minimum-system-version": "7.0", 41 | "scale": "2x", 42 | "filename": "LaunchImage-ipad-portrait-2x.png" 43 | }, 44 | { 45 | "orientation": "landscape", 46 | "idiom": "ipad", 47 | "extent": "full-screen", 48 | "minimum-system-version": "7.0", 49 | "scale": "2x", 50 | "filename": "LaunchImage-ipad-landscape-2x.png" 51 | } 52 | ], 53 | "info": { 54 | "version": 1, 55 | "author": "xcode" 56 | } 57 | } -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/LaunchImage.launchimage/LaunchImage-ipad-landscape-1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/LaunchImage.launchimage/LaunchImage-ipad-landscape-1x.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/LaunchImage.launchimage/LaunchImage-ipad-landscape-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/LaunchImage.launchimage/LaunchImage-ipad-landscape-2x.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/LaunchImage.launchimage/LaunchImage-ipad-portrait-1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/LaunchImage.launchimage/LaunchImage-ipad-portrait-1x.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/LaunchImage.launchimage/LaunchImage-ipad-portrait-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/LaunchImage.launchimage/LaunchImage-ipad-portrait-2x.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/LaunchImage.launchimage/LaunchImage-iphone-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/LaunchImage.launchimage/LaunchImage-iphone-2x.png -------------------------------------------------------------------------------- /Builds/iOS/ShowMIDI/Images.xcassets/LaunchImage.launchimage/LaunchImage-iphone-retina4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Builds/iOS/ShowMIDI/Images.xcassets/LaunchImage.launchimage/LaunchImage-iphone-retina4.png -------------------------------------------------------------------------------- /Builds/iOS/Standalone_Plugin.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.icloud-container-identifiers 6 | 7 | iCloud.$(CFBundleIdentifier) 8 | 9 | com.apple.developer.icloud-services 10 | 11 | CloudDocuments 12 | 13 | com.apple.developer.ubiquity-container-identifiers 14 | 15 | iCloud.$(CFBundleIdentifier) 16 | 17 | com.apple.security.application-groups 18 | 19 | group.com.uwyn.showmidi 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.15) 2 | 3 | # To build a CLAP you need to do the following in addition to editing this file 4 | # 5 | # - First do the native build of at least the ShowMIDI_shared target on your platform as Debug or Release 6 | # - Then do `cmake -Bbuild_clap -DCMAKE_BUILD_TYPE=Debug` or Release of course 7 | # - Then do `cmake --build build_clap --config Debug` or Release 8 | # 9 | # This will result in build_clap/ShowMIDI_artefacts/Debug/ShowMIDI.clap (or Release). 10 | # 11 | # For this to work a couple of things need to be configured 12 | 13 | # Next adjust these paths to point to your JUCE and the current checkout of ClapJuce Extensions 14 | set(PATH_TO_JUCE "$ENV{PATH_TO_JUCE}") 15 | set(PATH_TO_CLAP_EXTENSIONS libs/clap-juce-extensions) 16 | 17 | # Make sure to set the same C++ version as you have set in the Projucer 18 | set(CMAKE_CXX_STANDARD 17) 19 | 20 | # Make sure to set the same MacOS deployment target as you have set in the Projucer 21 | set(CMAKE_OSX_DEPLOYMENT_TARGET "11.7" CACHE STRING "Minimum OS X deployment target") 22 | 23 | # If the Projucer is using "static runtime" for Visual Studio: 24 | #set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>" CACHE STRING "Runtime") 25 | set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded" CACHE STRING "Runtime") 26 | 27 | # This bypasses XCode signing and is appropriate if you sign after a build. Comment it out if you want to use 28 | # xcode signing. 29 | set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO") 30 | set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO") 31 | 32 | project(ShowMIDI VERSION 1.0.0) 33 | 34 | # define the exporter types used in your Projucer configuration 35 | if (APPLE) 36 | set(JUCER_GENERATOR "Xcode") 37 | elseif (WIN32) 38 | set(JUCER_GENERATOR "VisualStudio2022") 39 | else () # Linux 40 | set(JUCER_GENERATOR "LinuxMakefile") 41 | endif () 42 | 43 | include(${PATH_TO_CLAP_EXTENSIONS}/cmake/JucerClap.cmake) 44 | create_jucer_clap_target( 45 | TARGET ShowMIDI 46 | PLUGIN_NAME "ShowMIDI" 47 | BINARY_NAME "ShowMIDI" 48 | 49 | # You will want to check all this information 50 | MANUFACTURER_NAME "Uwyn" 51 | MANUFACTURER_CODE Uwyn 52 | PLUGIN_CODE shmi 53 | VERSION_STRING "$ENV{RELEASE_VERSION}" 54 | CLAP_ID "com.uwyn.showmidi.clap" 55 | CLAP_FEATURES note-effect utility 56 | CLAP_MANUAL_URL "https://www.uwyn.com" 57 | CLAP_SUPPORT_URL "https://www.uwyn.com" 58 | EDITOR_NEEDS_KEYBOARD_FOCUS TRUE 59 | ) 60 | 61 | -------------------------------------------------------------------------------- /Design/icon.afdesign: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Design/icon.afdesign -------------------------------------------------------------------------------- /Design/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Design/icon.png -------------------------------------------------------------------------------- /Design/logo.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Design/logo.pdf -------------------------------------------------------------------------------- /Design/play-pause.afdesign: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Design/play-pause.afdesign -------------------------------------------------------------------------------- /Design/showmidi-0.5.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Design/showmidi-0.5.0.png -------------------------------------------------------------------------------- /Design/showmidi-0.8.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Design/showmidi-0.8.0.png -------------------------------------------------------------------------------- /Design/showmidi-0.9.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Design/showmidi-0.9.0.png -------------------------------------------------------------------------------- /Design/showmidi-1.0.0-announcement.afdesign: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Design/showmidi-1.0.0-announcement.afdesign -------------------------------------------------------------------------------- /Design/showmidi-1.0.0-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Design/showmidi-1.0.0-graph.png -------------------------------------------------------------------------------- /Design/showmidi-1.0.0-line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Design/showmidi-1.0.0-line.png -------------------------------------------------------------------------------- /Design/showmidi.afdesign: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Design/showmidi.afdesign -------------------------------------------------------------------------------- /Design/showmidi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Design/showmidi.png -------------------------------------------------------------------------------- /Design/wizard_image1.afphoto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Design/wizard_image1.afphoto -------------------------------------------------------------------------------- /Fonts/JetBrainsMono-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Fonts/JetBrainsMono-Italic.ttf -------------------------------------------------------------------------------- /Fonts/JetBrainsMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Fonts/JetBrainsMono-Regular.ttf -------------------------------------------------------------------------------- /Fonts/JetBrainsMono-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Fonts/JetBrainsMono-SemiBold.ttf -------------------------------------------------------------------------------- /Fonts/JetBrainsMono-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Fonts/JetBrainsMono-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /Installers/Assets/wizard_icon1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Installers/Assets/wizard_icon1.bmp -------------------------------------------------------------------------------- /Installers/Assets/wizard_icon2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Installers/Assets/wizard_icon2.bmp -------------------------------------------------------------------------------- /Installers/Assets/wizard_icon3.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Installers/Assets/wizard_icon3.bmp -------------------------------------------------------------------------------- /Installers/Assets/wizard_icon4.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Installers/Assets/wizard_icon4.bmp -------------------------------------------------------------------------------- /Installers/Assets/wizard_icon5.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Installers/Assets/wizard_icon5.bmp -------------------------------------------------------------------------------- /Installers/Assets/wizard_icon6.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Installers/Assets/wizard_icon6.bmp -------------------------------------------------------------------------------- /Installers/Assets/wizard_icon7.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Installers/Assets/wizard_icon7.bmp -------------------------------------------------------------------------------- /Installers/Assets/wizard_image1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Installers/Assets/wizard_image1.bmp -------------------------------------------------------------------------------- /Installers/Assets/wizard_image2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Installers/Assets/wizard_image2.bmp -------------------------------------------------------------------------------- /Installers/Assets/wizard_image3.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Installers/Assets/wizard_image3.bmp -------------------------------------------------------------------------------- /Installers/Assets/wizard_image4.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Installers/Assets/wizard_image4.bmp -------------------------------------------------------------------------------- /Installers/Assets/wizard_image5.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Installers/Assets/wizard_image5.bmp -------------------------------------------------------------------------------- /Installers/Assets/wizard_image6.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Installers/Assets/wizard_image6.bmp -------------------------------------------------------------------------------- /Installers/Assets/wizard_image7.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Installers/Assets/wizard_image7.bmp -------------------------------------------------------------------------------- /Installers/uninstall.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | APP="ShowMIDI" 4 | 5 | rm -f -Rf "/Users/$USER/Applications/$APP.app"; 6 | rm -f -Rf "/Applications/$APP.app"; 7 | 8 | rm -f -Rf "/Users/$USER/Library/Audio/Plug-Ins/Components/$APP.component"; 9 | rm -f -Rf "/Library/Audio/Plug-Ins/Components/$APP.component"; 10 | 11 | rm -f -Rf "/Users/$USER/Library/Audio/Plug-Ins/VST/$APP.vst"; 12 | rm -f -Rf "/Library/Audio/Plug-Ins/VST/$APP.vst"; 13 | 14 | rm -f -Rf "/Users/$USER/Library/Audio/Plug-Ins/VST3/$APP.vst3"; 15 | rm -f -Rf "/Library/Audio/Plug-Ins/VST3/$APP.vst3"; 16 | 17 | exit 0 18 | -------------------------------------------------------------------------------- /Interface/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Interface/Base.lproj/launch-screen-logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gbevin/ShowMIDI/fcf58a47a39cebeec697a732ae745ab5ad334cbc/Interface/Base.lproj/launch-screen-logo@2x.png -------------------------------------------------------------------------------- /JuceLibraryCode/BinaryData.h: -------------------------------------------------------------------------------- 1 | /* ========================================================================================= 2 | 3 | This is an auto-generated file: Any edits you make may be overwritten! 4 | 5 | */ 6 | 7 | #pragma once 8 | 9 | namespace BinaryData 10 | { 11 | extern const char* appiconios_png; 12 | const int appiconios_pngSize = 39031; 13 | 14 | extern const char* appicon_png; 15 | const int appicon_pngSize = 87300; 16 | 17 | extern const char* bar_svg; 18 | const int bar_svgSize = 1174; 19 | 20 | extern const char* close_svg; 21 | const int close_svgSize = 1087; 22 | 23 | extern const char* collapsed_svg; 24 | const int collapsed_svgSize = 864; 25 | 26 | extern const char* expanded_svg; 27 | const int expanded_svgSize = 825; 28 | 29 | extern const char* graph_svg; 30 | const int graph_svgSize = 1196; 31 | 32 | extern const char* help_svg; 33 | const int help_svgSize = 1676; 34 | 35 | extern const char* hidden_svg; 36 | const int hidden_svgSize = 1148; 37 | 38 | extern const char* pause_svg; 39 | const int pause_svgSize = 919; 40 | 41 | extern const char* play_svg; 42 | const int play_svgSize = 1128; 43 | 44 | extern const char* reset_svg; 45 | const int reset_svgSize = 1510; 46 | 47 | extern const char* settings_svg; 48 | const int settings_svgSize = 2022; 49 | 50 | extern const char* visible_svg; 51 | const int visible_svgSize = 1504; 52 | 53 | extern const char* JetBrainsMonoItalic_ttf; 54 | const int JetBrainsMonoItalic_ttfSize = 276840; 55 | 56 | extern const char* JetBrainsMonoRegular_ttf; 57 | const int JetBrainsMonoRegular_ttfSize = 273900; 58 | 59 | extern const char* JetBrainsMonoSemiBold_ttf; 60 | const int JetBrainsMonoSemiBold_ttfSize = 277092; 61 | 62 | extern const char* JetBrainsMonoSemiBoldItalic_ttf; 63 | const int JetBrainsMonoSemiBoldItalic_ttfSize = 279828; 64 | 65 | // Number of elements in the namedResourceList and originalFileNames arrays. 66 | const int namedResourceListSize = 18; 67 | 68 | // Points to the start of a list of resource names. 69 | extern const char* namedResourceList[]; 70 | 71 | // Points to the start of a list of resource filenames. 72 | extern const char* originalFilenames[]; 73 | 74 | // If you provide the name of one of the binary resource variables above, this function will 75 | // return the corresponding data and its size (or a null pointer if the name isn't found). 76 | const char* getNamedResource (const char* resourceNameUTF8, int& dataSizeInBytes); 77 | 78 | // If you provide the name of one of the binary resource variables above, this function will 79 | // return the corresponding original, non-mangled filename (or a null pointer if the name isn't found). 80 | const char* getNamedResourceOriginalFilename (const char* resourceNameUTF8); 81 | } 82 | -------------------------------------------------------------------------------- /JuceLibraryCode/JuceHeader.h: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | This is the header file that your files should include in order to get all the 7 | JUCE library headers. You should avoid including the JUCE headers directly in 8 | your own source files, because that wouldn't pick up the correct configuration 9 | options for your app. 10 | 11 | */ 12 | 13 | #pragma once 14 | 15 | #include "AppConfig.h" 16 | 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | 30 | #include "BinaryData.h" 31 | 32 | #if defined (JUCE_PROJUCER_VERSION) && JUCE_PROJUCER_VERSION < JUCE_VERSION 33 | /** If you've hit this error then the version of the Projucer that was used to generate this project is 34 | older than the version of the JUCE modules being included. To fix this error, re-save your project 35 | using the latest version of the Projucer or, if you aren't using the Projucer to manage your project, 36 | remove the JUCE_PROJUCER_VERSION define. 37 | */ 38 | #error "This project was last saved using an outdated version of the Projucer! Re-save this project with the latest version to fix this error." 39 | #endif 40 | 41 | #if ! DONT_SET_USING_JUCE_NAMESPACE 42 | // If your code uses a lot of JUCE classes, then this will obviously save you 43 | // a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE. 44 | using namespace juce; 45 | #endif 46 | 47 | #if ! JUCE_DONT_DECLARE_PROJECTINFO 48 | namespace ProjectInfo 49 | { 50 | const char* const projectName = "ShowMIDI"; 51 | const char* const companyName = "Uwyn"; 52 | const char* const versionString = "1.0.1"; 53 | const int versionNumber = 0x10001; 54 | } 55 | #endif 56 | -------------------------------------------------------------------------------- /JuceLibraryCode/JuceLV2Defines.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifndef JucePlugin_LV2URI 4 | #define JucePlugin_LV2URI "https://www.uwyn.com/plugins/ShowMIDI" 5 | #endif 6 | -------------------------------------------------------------------------------- /JuceLibraryCode/ReadMe.txt: -------------------------------------------------------------------------------- 1 | 2 | Important Note!! 3 | ================ 4 | 5 | The purpose of this folder is to contain files that are auto-generated by the Projucer, 6 | and ALL files in this folder will be mercilessly DELETED and completely re-written whenever 7 | the Projucer saves your project. 8 | 9 | Therefore, it's a bad idea to make any manual changes to the files in here, or to 10 | put any of your own files in here if you don't want to lose them. (Of course you may choose 11 | to add the folder's contents to your version-control system so that you can re-merge your own 12 | modifications after the Projucer has saved its changes). 13 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_basics.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_basics.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_devices.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_devices.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_formats.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_formats.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_AAX.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_AAX.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_AAX_utils.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_ARA.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_AU_1.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_AU_2.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_AUv3.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_LV2.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_LV2.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_Standalone.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_Unity.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_VST2.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_VST2.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_VST3.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_plugin_client_VST3.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_processors.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_processors.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_processors_ara.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_processors_lv2_libs.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_utils.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_audio_utils.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_core.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_core.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_data_structures.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_data_structures.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_events.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_events.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_graphics.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_graphics.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_gui_basics.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_gui_basics.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_gui_extra.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/include_juce_gui_extra.mm: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | IMPORTANT! This file is auto-generated each time you save your 4 | project - if you alter its contents, your changes may be overwritten! 5 | 6 | */ 7 | 8 | #include "AppConfig.h" 9 | #include 10 | -------------------------------------------------------------------------------- /JuceLibraryCode/modules/juce_audio_devices/native/oboe/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.4.1) 2 | 3 | # Set the name of the project and store it in PROJECT_NAME. Also set the following variables: 4 | # PROJECT_SOURCE_DIR (usually the root directory where Oboe has been cloned e.g.) 5 | # PROJECT_BINARY_DIR (usually the containing project's binary directory, 6 | # e.g. ${OBOE_HOME}/samples/RhythmGame/.externalNativeBuild/cmake/ndkExtractorDebug/x86/oboe-bin) 7 | project(oboe) 8 | 9 | set (oboe_sources 10 | src/aaudio/AAudioLoader.cpp 11 | src/aaudio/AudioStreamAAudio.cpp 12 | src/common/AudioSourceCaller.cpp 13 | src/common/AudioStream.cpp 14 | src/common/AudioStreamBuilder.cpp 15 | src/common/DataConversionFlowGraph.cpp 16 | src/common/FilterAudioStream.cpp 17 | src/common/FixedBlockAdapter.cpp 18 | src/common/FixedBlockReader.cpp 19 | src/common/FixedBlockWriter.cpp 20 | src/common/LatencyTuner.cpp 21 | src/common/SourceFloatCaller.cpp 22 | src/common/SourceI16Caller.cpp 23 | src/common/SourceI24Caller.cpp 24 | src/common/SourceI32Caller.cpp 25 | src/common/Utilities.cpp 26 | src/common/QuirksManager.cpp 27 | src/fifo/FifoBuffer.cpp 28 | src/fifo/FifoController.cpp 29 | src/fifo/FifoControllerBase.cpp 30 | src/fifo/FifoControllerIndirect.cpp 31 | src/flowgraph/FlowGraphNode.cpp 32 | src/flowgraph/ChannelCountConverter.cpp 33 | src/flowgraph/ClipToRange.cpp 34 | src/flowgraph/ManyToMultiConverter.cpp 35 | src/flowgraph/MonoToMultiConverter.cpp 36 | src/flowgraph/MultiToMonoConverter.cpp 37 | src/flowgraph/RampLinear.cpp 38 | src/flowgraph/SampleRateConverter.cpp 39 | src/flowgraph/SinkFloat.cpp 40 | src/flowgraph/SinkI16.cpp 41 | src/flowgraph/SinkI24.cpp 42 | src/flowgraph/SinkI32.cpp 43 | src/flowgraph/SourceFloat.cpp 44 | src/flowgraph/SourceI16.cpp 45 | src/flowgraph/SourceI24.cpp 46 | src/flowgraph/SourceI32.cpp 47 | src/flowgraph/resampler/IntegerRatio.cpp 48 | src/flowgraph/resampler/LinearResampler.cpp 49 | src/flowgraph/resampler/MultiChannelResampler.cpp 50 | src/flowgraph/resampler/PolyphaseResampler.cpp 51 | src/flowgraph/resampler/PolyphaseResamplerMono.cpp 52 | src/flowgraph/resampler/PolyphaseResamplerStereo.cpp 53 | src/flowgraph/resampler/SincResampler.cpp 54 | src/flowgraph/resampler/SincResamplerStereo.cpp 55 | src/opensles/AudioInputStreamOpenSLES.cpp 56 | src/opensles/AudioOutputStreamOpenSLES.cpp 57 | src/opensles/AudioStreamBuffered.cpp 58 | src/opensles/AudioStreamOpenSLES.cpp 59 | src/opensles/EngineOpenSLES.cpp 60 | src/opensles/OpenSLESUtilities.cpp 61 | src/opensles/OutputMixerOpenSLES.cpp 62 | src/common/StabilizedCallback.cpp 63 | src/common/Trace.cpp 64 | src/common/Version.cpp 65 | ) 66 | 67 | add_library(oboe ${oboe_sources}) 68 | 69 | # Specify directories which the compiler should look for headers 70 | target_include_directories(oboe 71 | PRIVATE src 72 | PUBLIC include) 73 | 74 | # JUCE CHANGE STARTS HERE 75 | 76 | # This comment provided for Apache License compliance. We've removed the extra warnings flags and 77 | # the `-Werror` option, to avoid cases where compilers produce unexpected errors and fail the build. 78 | # We've also removed the explicit `-std=c++17` compile option, and replaced it with a more 79 | # cmake-friendly way of specifying the language standard. 80 | 81 | target_compile_options(oboe PRIVATE -Ofast) 82 | set_target_properties(oboe PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED TRUE CXX_EXTENSIONS FALSE) 83 | 84 | # JUCE CHANGE ENDS HERE 85 | 86 | # Enable logging of D,V for debug builds 87 | target_compile_definitions(oboe PUBLIC $<$:OBOE_ENABLE_LOGGING=1>) 88 | 89 | target_link_libraries(oboe PRIVATE log OpenSLES) 90 | 91 | # When installing oboe put the libraries in the lib/ folder e.g. lib/arm64-v8a 92 | install(TARGETS oboe 93 | LIBRARY DESTINATION lib/${ANDROID_ABI} 94 | ARCHIVE DESTINATION lib/${ANDROID_ABI}) 95 | 96 | # Also install the headers 97 | install(DIRECTORY include/oboe DESTINATION include) 98 | -------------------------------------------------------------------------------- /Scripts/auv3_aum_size.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | SCRIPT_DIR="$1" 3 | if [ -e /usr/libexec/PlistBuddy ] 4 | then 5 | /usr/libexec/PlistBuddy -c "add :NSExtension:NSExtensionAttributes:AudioComponents:0:tags:1 string 'size:{296, 600}'" $SCRIPT_DIR/Builds/iOS/Info-AUv3_AppExtension.plist 6 | fi 7 | -------------------------------------------------------------------------------- /Scripts/build-linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ $# -eq 0 ]; then 4 | echo "The release version is required as an argument" 5 | exit 1 6 | fi 7 | 8 | PROJECT_DIR=$PWD 9 | 10 | export RELEASE_VERSION="$1" 11 | export PATH_TO_JUCE="$PROJECT_DIR/JUCE" 12 | 13 | rm -rfv Builds/LinuxMakefile/build/ 14 | 15 | pushd Builds/LinuxMakefile 16 | make CONFIG=Release 17 | popd 18 | 19 | cmake -BBuilds/LinuxMakefile/build/clap -DCMAKE_BUILD_TYPE=Release 20 | pushd Builds/LinuxMakefile 21 | cmake --build build/clap --config Release 22 | 23 | pushd build 24 | STAGE_DIR="ShowMIDI-$RELEASE_VERSION" 25 | mkdir -p $STAGE_DIR/vst $STAGE_DIR/vst3 $STAGE_DIR/clap $STAGE_DIR/lv2 26 | mv ShowMIDI $STAGE_DIR 27 | mv ShowMIDI.so $STAGE_DIR/vst 28 | mv ShowMIDI.vst3 $STAGE_DIR/vst3 29 | mv clap/ShowMIDI_artefacts/Release/ShowMIDI.clap $STAGE_DIR/clap 30 | mv ShowMIDI.lv2 $STAGE_DIR/lv2 31 | cp $PROJECT_DIR/*.md $STAGE_DIR 32 | 33 | ARCHIVE_FILE="$PROJECT_DIR/Installers/ShowMIDI-Linux-Ubuntu-x64-$RELEASE_VERSION.tar.bz2" 34 | tar cvp $STAGE_DIR | bzip2 > $ARCHIVE_FILE 35 | echo "Finished building `realpath $ARCHIVE_FILE`" 36 | 37 | popd 38 | 39 | popd -------------------------------------------------------------------------------- /Scripts/build-macos.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ $# -eq 0 ]; then 4 | echo "The release version is required as an argument" 5 | exit 1 6 | fi 7 | 8 | PROJECT_DIR=$PWD 9 | 10 | export RELEASE_VERSION="$1" 11 | export PATH_TO_JUCE="$PROJECT_DIR/JUCE" 12 | 13 | SIGN_ID="Developer ID Application: Uwyn, LLC (AGZT8GVS7G)" 14 | BUILD_DIR=$PWD/Builds/MacOSX/build 15 | 16 | rm -rfv $BUILD_DIR 17 | 18 | # build release artifacts 19 | echo "Building all ProJucer artifacts" 20 | xcodebuild -project ./Builds/MacOSX/showmidi.xcodeproj -destination "generic/platform=macOS,name=Any Mac" -config Release SYMROOT=build -scheme "ShowMIDI - All" 21 | 22 | echo "Building CLAP plugin" 23 | cmake -BBuilds/MacOSX/build/clap -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" 24 | cmake --build $BUILD_DIR/clap --config Release 25 | 26 | # sign each individual artifact 27 | echo "Codesigning all artifacts" 28 | codesign -f -s "$SIGN_ID" Builds/MacOSX/build/Release/ShowMIDI.app --deep --strict --timestamp --options=runtime 29 | codesign -f -s "$SIGN_ID" Builds/MacOSX/build/Release/ShowMIDI.appex --deep --strict --timestamp --options=runtime 30 | codesign -f -s "$SIGN_ID" Builds/MacOSX/build/Release/ShowMIDI.component --deep --strict --timestamp --options=runtime 31 | codesign -f -s "$SIGN_ID" Builds/MacOSX/build/Release/ShowMIDI.vst --deep --strict --timestamp --options=runtime 32 | codesign -f -s "$SIGN_ID" Builds/MacOSX/build/Release/ShowMIDI.vst3 --deep --strict --timestamp --options=runtime 33 | codesign -f -s "$SIGN_ID" Builds/MacOSX/build/Release/ShowMIDI.lv2 --deep --strict --timestamp --options=runtime 34 | codesign -f -s "$SIGN_ID" Builds/MacOSX/build/Release/ShowMIDI.lv2/ShowMIDI --deep --strict --timestamp --options=runtime 35 | codesign -f -s "$SIGN_ID" Builds/MacOSX/build/clap/ShowMIDI_artefacts/Release/ShowMIDI.clap --deep --strict --timestamp --options=runtime 36 | 37 | # update packager file with version number and generate it in the build 38 | # directory, updating relevant paths 39 | echo "Generating installer packages project" 40 | sed "s/REPLACE_VERSION/$RELEASE_VERSION/g" Installers/ShowMIDI.pkgproj | \ 41 | sed "s/Builds\/MacOSX/..\/..\/Builds\/MacOSX/g" > $BUILD_DIR/ShowMIDI_versioned.pkgproj 42 | # copy other files that are needed by the installer to the new location 43 | cp Installers/uninstall.sh $BUILD_DIR 44 | cp Installers/gpl-3.0.txt $BUILD_DIR 45 | 46 | # build the installer package in the build directory 47 | echo "Building installer package" 48 | /usr/local/bin/packagesbuild --project $BUILD_DIR/ShowMIDI_versioned.pkgproj -v 49 | mv $BUILD_DIR/ShowMIDI.pkg $BUILD_DIR/ShowMIDI-${RELEASE_VERSION}.pkg 50 | 51 | ARCHIVE_FILE="$PROJECT_DIR/Installers/ShowMIDI-macOS-${RELEASE_VERSION}.zip" 52 | pushd "$BUILD_DIR" 53 | 54 | PKG_FILE="ShowMIDI-${RELEASE_VERSION}.pkg" 55 | 56 | # Notarization 57 | echo "Notarizating installer" 58 | xcrun notarytool submit "${PKG_FILE}" --keychain-profile "notary-uwyn.com" --wait 59 | xcrun stapler staple "${PKG_FILE}" 60 | spctl --assess -vv --type install "${PKG_FILE}" 61 | 62 | echo "Creating zip archive of installer" 63 | zip -r "${ARCHIVE_FILE}" "${PKG_FILE}" 64 | popd 65 | 66 | echo "Finished building `realpath $ARCHIVE_FILE`" 67 | -------------------------------------------------------------------------------- /Scripts/build-windows.ps1: -------------------------------------------------------------------------------- 1 | param ( 2 | [Parameter(Mandatory=$true)][string]$version 3 | ) 4 | 5 | $curDir = Get-Location 6 | 7 | Write-Output "Setting up development environment with Visuals Studio 2022" 8 | Import-Module "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" 9 | Enter-VsDevShell -VsInstallPath "C:\Program Files\Microsoft Visual Studio\2022\Community\" 10 | 11 | $Env:RELEASE_VERSION = "$version" 12 | $Env:PATH_TO_JUCE = "$curDir\JUCE" 13 | 14 | Write-Output "Changing location to $curDir" 15 | Set-Location $curDir 16 | 17 | $signId = "Open Source Developer, Geert Bevin" 18 | $buildLocation = "Builds\VisualStudio2022\x64" 19 | 20 | Write-Output "Deleting previous build from $buildLocation" 21 | Remove-Item -LiteralPath $buildLocation -Force -Recurse 22 | 23 | Write-Output "Building project" 24 | MSBuild.exe .\Builds\VisualStudio2022\showmidi.sln /p:Configuration=Release /p:PreferredToolArchitecture=x64 /p:Platform=x64 /clp:ErrorsOnly 25 | 26 | Write-Output "Building CLAP plugin" 27 | cmake -B"$buildLocation\clap" -DCMAKE_BUILD_TYPE=Release 28 | cmake --build "$buildLocation\clap" --config Release 29 | 30 | Write-Output "Codesigning all artifacts" 31 | 32 | & signtool sign /n "$signId" /t http://time.certum.pl/ /fd sha1 /v "$buildLocation\Release\Standalone Plugin\ShowMIDI.exe" 33 | & signtool sign /n "$signId" /t http://time.certum.pl/ /fd sha1 /v "$buildLocation\Release\VST\ShowMIDI.dll" 34 | & signtool sign /n "$signId" /t http://time.certum.pl/ /fd sha1 /v "$buildLocation\Release\VST3\ShowMIDI.vst3\Contents\x86_64-win\ShowMIDI.vst3" 35 | & signtool sign /n "$signId" /t http://time.certum.pl/ /fd sha1 /v "$buildLocation\Release\LV2 Plugin\ShowMIDI.lv2\ShowMIDI.dll" 36 | & signtool sign /n "$signId" /t http://time.certum.pl/ /fd sha1 /v "$buildLocation\clap\ShowMIDI_artefacts\Release\ShowMIDI.clap" 37 | 38 | Write-Output "Building installer" 39 | & 'C:\Program Files (x86)\Inno Setup 6\ISCC.exe' /DPWD="$curDir" /DPATH=./ /DVERSION="$Env:RELEASE_VERSION" Installers\ShowMIDI.iss 40 | 41 | Write-Output "Code signing installer" 42 | 43 | & signtool sign /n "$signId" /t http://time.certum.pl/ /fd sha1 /v "$curDir\Installers\ShowMIDI-Windows-$Env:RELEASE_VERSION.exe" -------------------------------------------------------------------------------- /Source/AboutComponent.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #include "AboutComponent.h" 19 | 20 | #include "MidiDeviceComponent.h" 21 | #include "SidebarComponent.h" 22 | 23 | namespace showmidi 24 | { 25 | AboutComponent::AboutComponent(Theme& theme) : theme_(theme) 26 | { 27 | websiteButton_ = std::make_unique("https://uwyn.com"); 28 | closeButton_ = std::make_unique("close"); 29 | 30 | websiteButton_->addListener(this); 31 | closeButton_->addListener(this); 32 | 33 | addAndMakeVisible(websiteButton_.get()); 34 | addAndMakeVisible(closeButton_.get()); 35 | 36 | updateDimensions(); 37 | resized(); 38 | } 39 | 40 | void AboutComponent::paint(Graphics& g) 41 | { 42 | g.fillAll(theme_.colorBackground); 43 | 44 | g.setColour(theme_.colorData); 45 | g.drawRect(Rectangle{0, 0, getWidth(), getHeight()}); 46 | 47 | g.setFont(theme_.fontLabel()); 48 | g.drawText(ProjectInfo::projectName, 49 | 0, theme_.linePosition(1), 50 | getWidth(), theme_.labelHeight(), 51 | Justification::centred, true); 52 | g.drawText(ProjectInfo::versionString, 53 | 0, theme_.linePosition(2), 54 | getWidth(), theme_.labelHeight(), 55 | Justification::centred, true); 56 | 57 | g.setColour(theme_.colorData.withAlpha(0.7f)); 58 | g.setFont(theme_.fontData()); 59 | websiteButton_->drawName(g, Justification::centred); 60 | 61 | // close button 62 | 63 | g.setColour(theme_.colorController); 64 | g.setFont(theme_.fontLabel()); 65 | closeButton_->drawName(g, Justification::centred); 66 | } 67 | 68 | void AboutComponent::resized() 69 | { 70 | websiteButton_->setBoundsForTouch(0, theme_.linePosition(4), 71 | getWidth(), theme_.labelHeight()); 72 | closeButton_->setBoundsForTouch(0, getHeight() - theme_.linePosition(1) - theme_.labelHeight(), 73 | getWidth(), theme_.labelHeight()); 74 | } 75 | 76 | void AboutComponent::buttonClicked(Button* buttonThatWasClicked) 77 | { 78 | if (buttonThatWasClicked == websiteButton_.get()) 79 | { 80 | URL(websiteButton_->getName()).launchInDefaultBrowser(); 81 | } 82 | else if (buttonThatWasClicked == closeButton_.get()) 83 | { 84 | setVisible(false); 85 | } 86 | } 87 | 88 | void AboutComponent::updateDimensions() 89 | { 90 | setSize(MidiDeviceComponent::getStandardWidth() - SidebarComponent::X_SETTINGS * 2, theme_.linePosition(8)); 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /Source/AboutComponent.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include "JuceHeader.h" 21 | 22 | #include "PaintedButton.h" 23 | #include "Theme.h" 24 | 25 | namespace showmidi 26 | { 27 | class AboutComponent : public Component, public Button::Listener 28 | { 29 | public: 30 | AboutComponent(Theme&); 31 | 32 | void paint(Graphics&) override; 33 | void resized() override; 34 | 35 | void buttonClicked(Button*) override; 36 | 37 | void updateDimensions(); 38 | 39 | private: 40 | Theme& theme_; 41 | 42 | std::unique_ptr websiteButton_; 43 | std::unique_ptr closeButton_; 44 | 45 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AboutComponent) 46 | }; 47 | } 48 | -------------------------------------------------------------------------------- /Source/DetectDevice.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | namespace showmidi 21 | { 22 | bool isiPhone(); 23 | } 24 | -------------------------------------------------------------------------------- /Source/DetectDevice.mm: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #include "DetectDevice.h" 19 | 20 | #define JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED = 1 21 | #include "juce_core/system/juce_TargetPlatform.h" 22 | 23 | #if JUCE_IOS 24 | #import 25 | #endif 26 | 27 | namespace showmidi 28 | { 29 | bool isiPhone() 30 | { 31 | #if JUCE_IOS 32 | return [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone; 33 | #endif 34 | return false; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Source/DeviceListener.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #include "DeviceListener.h" 19 | 20 | namespace showmidi 21 | { 22 | DeviceListener::DeviceListener() { } 23 | DeviceListener::~DeviceListener() { } 24 | 25 | void DeviceListeners::broadcastPauseChange(bool state) 26 | { 27 | call([state] (DeviceListener& l) { l.pauseChanged(state); }); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Source/DeviceListener.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include "JuceHeader.h" 21 | 22 | namespace showmidi 23 | { 24 | class DeviceListener 25 | { 26 | public: 27 | DeviceListener(); 28 | virtual ~DeviceListener(); 29 | 30 | virtual void pauseChanged(bool) = 0; 31 | }; 32 | 33 | class DeviceListeners : public ListenerList 34 | { 35 | public: 36 | void broadcastPauseChange(bool); 37 | }; 38 | } 39 | -------------------------------------------------------------------------------- /Source/DeviceManager.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include 21 | 22 | #include "DeviceListener.h" 23 | 24 | namespace showmidi 25 | { 26 | class DeviceManager 27 | { 28 | public: 29 | virtual ~DeviceManager() {}; 30 | 31 | virtual bool isPaused() = 0; 32 | virtual void togglePaused() = 0; 33 | virtual DeviceListeners& getDeviceListeners() = 0; 34 | virtual void resetChannelData() = 0; 35 | }; 36 | } 37 | -------------------------------------------------------------------------------- /Source/Main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #include 19 | 20 | #include "ShowMidiApplication.h" 21 | 22 | ApplicationCommandManager* commandManager = 0; 23 | JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wmissing-prototypes") 24 | JUCEApplicationBase* juce_CreateApplication() { return new showmidi::ShowMidiApplication(); } 25 | void* juce_GetIOSCustomDelegateClass() { return nullptr; } 26 | JUCE_END_IGNORE_WARNINGS_GCC_LIKE 27 | -------------------------------------------------------------------------------- /Source/MainLayoutComponent.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include 21 | 22 | #include "DeviceManager.h" 23 | #include "SettingsManager.h" 24 | 25 | namespace showmidi 26 | { 27 | enum MainLayoutType 28 | { 29 | layoutStandalone = 1, 30 | layoutPlugin 31 | }; 32 | 33 | class MainLayoutComponent : public Component, public FileDragAndDropTarget 34 | { 35 | public: 36 | MainLayoutComponent(SettingsManager*, DeviceManager*, MainLayoutType, Component*); 37 | virtual ~MainLayoutComponent(); 38 | 39 | bool isInterestedInFileDrag(const StringArray&); 40 | void filesDropped(const StringArray&, int, int); 41 | 42 | void resized(); 43 | 44 | int getSidebarWidth(); 45 | 46 | struct Pimpl; 47 | private: 48 | std::unique_ptr pimpl_; 49 | 50 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainLayoutComponent) 51 | }; 52 | } 53 | -------------------------------------------------------------------------------- /Source/MidiDeviceComponent.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include 21 | 22 | #include "SettingsManager.h" 23 | #include "Theme.h" 24 | 25 | namespace showmidi 26 | { 27 | class MidiDeviceComponent : public Component, public FileDragAndDropTarget 28 | { 29 | public: 30 | MidiDeviceComponent(SettingsManager*, const String&); 31 | MidiDeviceComponent(SettingsManager*, const MidiDeviceInfo&); 32 | ~MidiDeviceComponent() override; 33 | 34 | static int getStandardWidth(); 35 | int getVisibleHeight() const; 36 | 37 | void render(); 38 | void paint(Graphics&) override; 39 | void resized() override; 40 | void setPaused(bool); 41 | void resetChannelData(); 42 | 43 | void handleIncomingMidiMessage(const MidiMessage&); 44 | 45 | bool isInterestedInFileDrag(const StringArray&) override; 46 | void filesDropped(const StringArray&, int, int) override; 47 | 48 | struct Pimpl; 49 | private: 50 | std::unique_ptr pimpl_; 51 | 52 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MidiDeviceComponent) 53 | }; 54 | } 55 | -------------------------------------------------------------------------------- /Source/MidiDeviceInfoComparator.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | namespace showmidi 21 | { 22 | class MidiDeviceInfoComparator 23 | { 24 | public: 25 | static int compareElements(MidiDeviceInfo& first, MidiDeviceInfo& second) 26 | { 27 | return (first.name.toLowerCase() < second.name.toLowerCase()) ? -1 : ((second.name.toLowerCase() < first.name.toLowerCase()) ? 1 : 0); 28 | } 29 | }; 30 | } 31 | -------------------------------------------------------------------------------- /Source/MidiDevicesListener.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #include "MidiDevicesListener.h" 19 | 20 | namespace showmidi 21 | { 22 | MidiDevicesListener::MidiDevicesListener() { } 23 | MidiDevicesListener::~MidiDevicesListener() { } 24 | 25 | void MidiDevicesListeners::broadcast() 26 | { 27 | call([] (MidiDevicesListener& l) { l.refreshMidiDevices(); }); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Source/MidiDevicesListener.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include "JuceHeader.h" 21 | 22 | namespace showmidi 23 | { 24 | class MidiDevicesListener 25 | { 26 | public: 27 | MidiDevicesListener(); 28 | virtual ~MidiDevicesListener(); 29 | 30 | virtual void refreshMidiDevices() = 0; 31 | }; 32 | 33 | class MidiDevicesListeners : public ListenerList 34 | { 35 | public: 36 | void broadcast(); 37 | }; 38 | } 39 | -------------------------------------------------------------------------------- /Source/PaintedButton.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #include "AboutComponent.h" 19 | 20 | #include "PaintedButton.h" 21 | 22 | namespace showmidi 23 | { 24 | PaintedButton::PaintedButton() : Button({}) 25 | { 26 | } 27 | 28 | PaintedButton::PaintedButton(const String& name) : Button(name) 29 | { 30 | } 31 | 32 | void PaintedButton::paintButton(Graphics&, bool, bool) 33 | { 34 | // no-op 35 | } 36 | 37 | void PaintedButton::setBoundsForTouch(int x, int y, int w, int h) 38 | { 39 | auto bounds = Rectangle {x, y, w, h}; 40 | Component::setBounds(bounds.expanded(DEFAULT_TOUCH_OUTSET)); 41 | } 42 | 43 | Rectangle PaintedButton::getBoundsForDrawing() 44 | { 45 | return getBounds().reduced(DEFAULT_TOUCH_OUTSET).toFloat(); 46 | } 47 | 48 | void PaintedButton::drawName(Graphics& g, Justification justificationType) 49 | { 50 | auto bounds = getBounds().reduced(DEFAULT_TOUCH_OUTSET); 51 | g.drawText(getName(), 52 | bounds.getX(), bounds.getY(), 53 | bounds.getWidth(), bounds.getHeight(), 54 | justificationType); 55 | } 56 | 57 | void PaintedButton::drawDrawable(Graphics& g, Drawable& drawable) 58 | { 59 | auto bounds = getBounds().reduced(DEFAULT_TOUCH_OUTSET); 60 | drawable.drawAt(g, (float)bounds.getX(), (float)bounds.getY(), 1.0f); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /Source/PaintedButton.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include "JuceHeader.h" 21 | 22 | #include "Theme.h" 23 | 24 | namespace showmidi 25 | { 26 | class PaintedButton : public Button 27 | { 28 | public: 29 | PaintedButton(); 30 | PaintedButton(const String&); 31 | 32 | void paintButton(Graphics&, bool, bool) override; 33 | 34 | void setBoundsForTouch(int, int, int, int); 35 | Rectangle getBoundsForDrawing(); 36 | 37 | void drawName(Graphics&, Justification); 38 | void drawDrawable(Graphics&, Drawable&); 39 | 40 | private: 41 | void setBounds(Rectangle); 42 | void setBounds(int, int, int, int); 43 | 44 | static constexpr int DEFAULT_TOUCH_OUTSET { 12 }; 45 | 46 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PaintedButton) 47 | }; 48 | } 49 | -------------------------------------------------------------------------------- /Source/PluginEditor.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include 21 | 22 | #include "PluginProcessor.h" 23 | 24 | namespace showmidi 25 | { 26 | class ShowMIDIPluginAudioProcessorEditor : public AudioProcessorEditor 27 | { 28 | public: 29 | ShowMIDIPluginAudioProcessorEditor(ShowMIDIPluginAudioProcessor*); 30 | ~ShowMIDIPluginAudioProcessorEditor() override; 31 | 32 | void handleIncomingMidiMessage(const MidiMessage&); 33 | 34 | void paint(Graphics&) override; 35 | void resized() override; 36 | 37 | struct Pimpl; 38 | private: 39 | std::unique_ptr pimpl_; 40 | 41 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ShowMIDIPluginAudioProcessorEditor) 42 | }; 43 | } 44 | -------------------------------------------------------------------------------- /Source/PluginProcessor.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #include "PluginProcessor.h" 19 | 20 | #include "PluginEditor.h" 21 | 22 | namespace showmidi 23 | { 24 | ShowMIDIPluginAudioProcessor::ShowMIDIPluginAudioProcessor() : AudioProcessor(BusesProperties()) 25 | { 26 | } 27 | 28 | ShowMIDIPluginAudioProcessor::~ShowMIDIPluginAudioProcessor() 29 | { 30 | } 31 | 32 | const String ShowMIDIPluginAudioProcessor::getName() const 33 | { 34 | return JucePlugin_Name; 35 | } 36 | 37 | bool ShowMIDIPluginAudioProcessor::acceptsMidi() const 38 | { 39 | return true; 40 | } 41 | 42 | bool ShowMIDIPluginAudioProcessor::producesMidi() const 43 | { 44 | return true; 45 | } 46 | 47 | bool ShowMIDIPluginAudioProcessor::isMidiEffect() const 48 | { 49 | return true; 50 | } 51 | 52 | double ShowMIDIPluginAudioProcessor::getTailLengthSeconds() const 53 | { 54 | return 0.0; 55 | } 56 | 57 | int ShowMIDIPluginAudioProcessor::getNumPrograms() 58 | { 59 | return 1; 60 | } 61 | 62 | int ShowMIDIPluginAudioProcessor::getCurrentProgram() 63 | { 64 | return 0; 65 | } 66 | 67 | void ShowMIDIPluginAudioProcessor::setCurrentProgram(int) 68 | { 69 | } 70 | 71 | const String ShowMIDIPluginAudioProcessor::getProgramName(int) 72 | { 73 | return {}; 74 | } 75 | 76 | void ShowMIDIPluginAudioProcessor::changeProgramName(int, const String&) 77 | { 78 | } 79 | 80 | void ShowMIDIPluginAudioProcessor::prepareToPlay(double, int) 81 | { 82 | } 83 | 84 | void ShowMIDIPluginAudioProcessor::releaseResources() 85 | { 86 | } 87 | 88 | void ShowMIDIPluginAudioProcessor::processBlock(AudioBuffer&, MidiBuffer& midiMessages) 89 | { 90 | ScopedNoDenormals noDenormals; 91 | 92 | for (const MidiMessageMetadata metadata : midiMessages) 93 | { 94 | auto editor = (ShowMIDIPluginAudioProcessorEditor*)getActiveEditor(); 95 | if (editor != nullptr) 96 | { 97 | editor->handleIncomingMidiMessage(metadata.getMessage()); 98 | } 99 | } 100 | } 101 | 102 | bool ShowMIDIPluginAudioProcessor::hasEditor() const 103 | { 104 | return true; 105 | } 106 | 107 | AudioProcessorEditor* ShowMIDIPluginAudioProcessor::createEditor() 108 | { 109 | return new ShowMIDIPluginAudioProcessorEditor(this); 110 | } 111 | 112 | void ShowMIDIPluginAudioProcessor::getStateInformation(MemoryBlock& destData) 113 | { 114 | settings_.storeTheme(); 115 | 116 | auto& state = settings_.getValueTree(); 117 | if (auto xml_state = state.createXml()) 118 | { 119 | copyXmlToBinary(*xml_state, destData); 120 | } 121 | } 122 | 123 | void ShowMIDIPluginAudioProcessor::setStateInformation(const void* data, int sizeInBytes) 124 | { 125 | if (auto xml_state = getXmlFromBinary(data, sizeInBytes)) 126 | { 127 | auto state = ValueTree::fromXml(*xml_state); 128 | settings_.copyValueTree(state); 129 | } 130 | } 131 | 132 | PluginSettings& ShowMIDIPluginAudioProcessor::getSettings() 133 | { 134 | return settings_; 135 | } 136 | } 137 | 138 | AudioProcessor* JUCE_CALLTYPE createPluginFilter() 139 | { 140 | return new showmidi::ShowMIDIPluginAudioProcessor(); 141 | } 142 | -------------------------------------------------------------------------------- /Source/PluginProcessor.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include 21 | 22 | #include "PluginSettings.h" 23 | 24 | namespace showmidi 25 | { 26 | class ShowMIDIPluginAudioProcessor : public AudioProcessor 27 | { 28 | public: 29 | ShowMIDIPluginAudioProcessor(); 30 | ~ShowMIDIPluginAudioProcessor() override; 31 | 32 | void prepareToPlay(double sampleRate, int samplesPerBlock) override; 33 | void releaseResources() override; 34 | 35 | void processBlock(AudioBuffer&, MidiBuffer&) override; 36 | 37 | AudioProcessorEditor* createEditor() override; 38 | bool hasEditor() const override; 39 | 40 | const String getName() const override; 41 | 42 | bool acceptsMidi() const override; 43 | bool producesMidi() const override; 44 | bool isMidiEffect() const override; 45 | double getTailLengthSeconds() const override; 46 | 47 | int getNumPrograms() override; 48 | int getCurrentProgram() override; 49 | void setCurrentProgram(int index) override; 50 | const String getProgramName(int index) override; 51 | void changeProgramName(int index, const String& newName) override; 52 | 53 | void getStateInformation(MemoryBlock& destData) override; 54 | void setStateInformation(const void* data, int sizeInBytes) override; 55 | 56 | PluginSettings& getSettings(); 57 | 58 | private: 59 | PluginSettings settings_; 60 | 61 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ShowMIDIPluginAudioProcessor) 62 | }; 63 | } 64 | -------------------------------------------------------------------------------- /Source/PluginSettings.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include 21 | 22 | #include "Settings.h" 23 | 24 | namespace showmidi 25 | { 26 | class PluginSettings : public Settings 27 | { 28 | public: 29 | PluginSettings(); 30 | ~PluginSettings(); 31 | 32 | Visualization getVisualization(); 33 | void setVisualization(Visualization); 34 | 35 | int getOctaveMiddleC(); 36 | void setOctaveMiddleC(int); 37 | 38 | NoteFormat getNoteFormat(); 39 | void setNoteFormat(NoteFormat); 40 | 41 | NumberFormat getNumberFormat(); 42 | void setNumberFormat(NumberFormat); 43 | 44 | int getTimeoutDelay(); 45 | void setTimeoutDelay(int); 46 | 47 | WindowPosition getWindowPosition(); 48 | void setWindowPosition(WindowPosition); 49 | 50 | int getControlGraphHeight(); 51 | void setControlGraphHeight(int); 52 | 53 | Theme& getTheme(); 54 | void storeTheme(); 55 | 56 | bool isMidiDeviceVisible(const String&); 57 | void setMidiDeviceVisible(const String&, bool); 58 | 59 | ValueTree& getValueTree(); 60 | void copyValueTree(ValueTree&); 61 | 62 | private: 63 | ValueTree settings_ { ProjectInfo::projectName }; 64 | Theme theme_; 65 | 66 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PluginSettings) 67 | }; 68 | } 69 | -------------------------------------------------------------------------------- /Source/PopupColourSelector.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #include "PopupColourSelector.h" 19 | 20 | namespace showmidi 21 | { 22 | PopupColourSelector::PopupColourSelector(const Value& colour) : colourValue_(colour) 23 | { 24 | addAndMakeVisible(&selector_); 25 | selector_.setName("Colour"); 26 | selector_.setCurrentColour(getColour()); 27 | selector_.addChangeListener(this); 28 | 29 | colourValue_.addListener(this); 30 | setSize(300, 400); 31 | } 32 | 33 | void PopupColourSelector::resized() 34 | { 35 | selector_.setBounds (getLocalBounds()); 36 | } 37 | 38 | Colour PopupColourSelector::getColour() const 39 | { 40 | return Colour::fromString(colourValue_.toString()); 41 | } 42 | 43 | void PopupColourSelector::setColour(const Colour &newColour) 44 | { 45 | if (getColour() != newColour) 46 | { 47 | colourValue_ = newColour.toDisplayString(true); 48 | } 49 | } 50 | 51 | void PopupColourSelector::changeListenerCallback(ChangeBroadcaster *) 52 | { 53 | if (selector_.getCurrentColour() != getColour()) 54 | { 55 | setColour(selector_.getCurrentColour()); 56 | } 57 | } 58 | 59 | void PopupColourSelector::valueChanged(Value &) 60 | { 61 | selector_.setCurrentColour(getColour()); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /Source/PopupColourSelector.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include "JuceHeader.h" 21 | 22 | namespace showmidi 23 | { 24 | class PopupColourSelector : public Component, public ChangeListener, public Value::Listener 25 | { 26 | public: 27 | PopupColourSelector(const Value&); 28 | 29 | void resized(); 30 | Colour getColour() const; 31 | void setColour(const Colour &); 32 | void changeListenerCallback(ChangeBroadcaster*); 33 | void valueChanged(Value&); 34 | 35 | private: 36 | ColourSelector selector_; 37 | Value colourValue_; 38 | }; 39 | } 40 | -------------------------------------------------------------------------------- /Source/PortListComponent.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include 21 | 22 | #include "SettingsManager.h" 23 | 24 | namespace showmidi 25 | { 26 | class PortListComponent : public Component 27 | { 28 | public: 29 | PortListComponent(SettingsManager*); 30 | ~PortListComponent() override; 31 | 32 | int getVisibleHeight() const; 33 | 34 | void paint(Graphics&) override; 35 | 36 | struct Pimpl; 37 | private: 38 | std::unique_ptr pimpl_; 39 | 40 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PortListComponent) 41 | }; 42 | } 43 | -------------------------------------------------------------------------------- /Source/PropertiesSettings.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include 21 | 22 | #include "Settings.h" 23 | 24 | namespace showmidi 25 | { 26 | class PropertiesSettings : public Settings 27 | { 28 | public: 29 | static const String VISUALIZATION; 30 | static const String OCTAVE_MIDDLE_C; 31 | static const String NOTE_FORMAT; 32 | static const String NUMBER_FORMAT; 33 | static const String TIMEOUT_DELAY; 34 | static const String WINDOW_POSITION; 35 | static const String CONTROL_GRAPH_HEIGHT; 36 | static const String MIDI_DEVICE_VISIBLE_PREFIX; 37 | static const String THEME; 38 | 39 | PropertiesSettings(); 40 | ~PropertiesSettings(); 41 | 42 | Visualization getVisualization(); 43 | void setVisualization(Visualization); 44 | 45 | int getOctaveMiddleC(); 46 | void setOctaveMiddleC(int); 47 | 48 | NoteFormat getNoteFormat(); 49 | void setNoteFormat(NoteFormat); 50 | 51 | NumberFormat getNumberFormat(); 52 | void setNumberFormat(NumberFormat); 53 | 54 | int getTimeoutDelay(); 55 | void setTimeoutDelay(int); 56 | 57 | WindowPosition getWindowPosition(); 58 | void setWindowPosition(WindowPosition); 59 | 60 | int getControlGraphHeight(); 61 | void setControlGraphHeight(int); 62 | 63 | Theme& getTheme(); 64 | void storeTheme(); 65 | 66 | bool isMidiDeviceVisible(const String&); 67 | void setMidiDeviceVisible(const String&, bool); 68 | 69 | void flush(); 70 | 71 | private: 72 | std::unique_ptr propertyFile_; 73 | 74 | PropertiesFile& getGlobalProperties(); 75 | void updateGlobalProps(); 76 | void reload(); 77 | 78 | Theme theme_; 79 | 80 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PropertiesSettings) 81 | }; 82 | } 83 | -------------------------------------------------------------------------------- /Source/Settings.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include 21 | 22 | #include "Theme.h" 23 | 24 | namespace showmidi 25 | { 26 | enum Visualization 27 | { 28 | visualizationBar = 1, 29 | visualizationGraph 30 | }; 31 | 32 | enum NoteFormat 33 | { 34 | formatName = 1, 35 | formatNumber 36 | }; 37 | 38 | enum NumberFormat 39 | { 40 | formatDecimal = 1, 41 | formatHexadecimal 42 | }; 43 | 44 | enum WindowPosition 45 | { 46 | windowRegular = 1, 47 | windowAlwaysOnTop 48 | }; 49 | 50 | class Settings 51 | { 52 | public: 53 | static constexpr Visualization DEFAULT_VISUALIZATION { visualizationBar }; 54 | static constexpr int DEFAULT_OCTAVE_MIDDLE_C { 3 }; 55 | static constexpr NoteFormat DEFAULT_NOTE_FORMAT { formatName }; 56 | static constexpr NumberFormat DEFAULT_NUMBER_FORMAT { formatDecimal }; 57 | static constexpr int DEFAULT_TIMEOUT_DELAY { 2 }; 58 | static constexpr int DEFAULT_CONTROL_GRAPH_HEIGHT { 1 }; 59 | static constexpr WindowPosition DEFAULT_WINDOW_POSITION { windowRegular }; 60 | 61 | Settings() {}; 62 | virtual ~Settings() {}; 63 | 64 | virtual Visualization getVisualization() = 0; 65 | virtual void setVisualization(Visualization) = 0; 66 | 67 | virtual int getOctaveMiddleC() = 0; 68 | virtual void setOctaveMiddleC(int) = 0; 69 | 70 | virtual NoteFormat getNoteFormat() = 0; 71 | virtual void setNoteFormat(NoteFormat) = 0; 72 | 73 | virtual NumberFormat getNumberFormat() = 0; 74 | virtual void setNumberFormat(NumberFormat) = 0; 75 | 76 | virtual int getTimeoutDelay() = 0; 77 | virtual void setTimeoutDelay(int) = 0; 78 | 79 | virtual WindowPosition getWindowPosition() = 0; 80 | virtual void setWindowPosition(WindowPosition) = 0; 81 | 82 | virtual int getControlGraphHeight() = 0; 83 | virtual void setControlGraphHeight(int) = 0; 84 | 85 | virtual Theme& getTheme() = 0; 86 | virtual void storeTheme() = 0; 87 | 88 | virtual bool isMidiDeviceVisible(const String&) = 0; 89 | virtual void setMidiDeviceVisible(const String&, bool) = 0; 90 | }; 91 | } 92 | -------------------------------------------------------------------------------- /Source/SettingsComponent.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include "JuceHeader.h" 21 | 22 | #include "SettingsManager.h" 23 | 24 | namespace showmidi 25 | { 26 | class SettingsComponent : public Component 27 | { 28 | public: 29 | SettingsComponent(SettingsManager*); 30 | ~SettingsComponent(); 31 | 32 | void paint(Graphics&) override; 33 | void resized() override; 34 | 35 | void updateDimensions(); 36 | 37 | struct Pimpl; 38 | private: 39 | std::unique_ptr pimpl_; 40 | 41 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SettingsComponent) 42 | }; 43 | } 44 | -------------------------------------------------------------------------------- /Source/SettingsManager.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include 21 | 22 | #include "MidiDevicesListener.h" 23 | #include "Settings.h" 24 | 25 | namespace showmidi 26 | { 27 | class SettingsManager 28 | { 29 | public: 30 | virtual ~SettingsManager() {}; 31 | 32 | virtual bool isPlugin() = 0; 33 | virtual Component* getTopLevelComponent() = 0; 34 | 35 | virtual Settings& getSettings() = 0; 36 | virtual void applySettings() = 0; 37 | virtual void storeSettings() = 0; 38 | 39 | virtual MidiDevicesListeners& getMidiDevicesListeners() = 0; 40 | }; 41 | } 42 | -------------------------------------------------------------------------------- /Source/ShowMidiApplication.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #include "ShowMidiApplication.h" 19 | 20 | #include "StandaloneWindow.h" 21 | 22 | namespace showmidi 23 | { 24 | struct ShowMidiApplication::Pimpl : public Timer 25 | { 26 | Pimpl() 27 | { 28 | // poll for MIDI devices refresh 29 | startTimerHz(5); 30 | } 31 | 32 | ~Pimpl() 33 | { 34 | stopTimer(); 35 | } 36 | 37 | void timerCallback() 38 | { 39 | midiDevicesListeners_.broadcast(); 40 | } 41 | 42 | void setWindowTitle(const String& title) 43 | { 44 | if (mainWindow_ != nullptr) 45 | { 46 | mainWindow_->setName(title); 47 | } 48 | } 49 | 50 | void setWindowWidthForMainLayout(int width) 51 | { 52 | if (mainWindow_ != nullptr) 53 | { 54 | #if JUCE_IOS 55 | mainWindow_->updatePosition(); 56 | #else 57 | width += mainWindow_->getSidebarWidth(); 58 | mainWindow_->setSize(width, mainWindow_->getHeight()); 59 | #endif 60 | } 61 | } 62 | 63 | void storeSettings() 64 | { 65 | settings_.storeTheme(); 66 | settings_.flush(); 67 | 68 | mainWindow_->repaint(); 69 | } 70 | 71 | UwynLookAndFeel lookAndFeel_; 72 | std::unique_ptr mainWindow_; 73 | PropertiesSettings settings_; 74 | MidiDevicesListeners midiDevicesListeners_; 75 | 76 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Pimpl) 77 | }; 78 | 79 | const String ShowMidiApplication::getApplicationName() 80 | { 81 | return ProjectInfo::projectName; 82 | } 83 | 84 | const String ShowMidiApplication::getApplicationVersion() 85 | { 86 | return ProjectInfo::versionString; 87 | } 88 | 89 | bool ShowMidiApplication::moreThanOneInstanceAllowed() 90 | { 91 | return true; 92 | } 93 | 94 | UwynLookAndFeel& ShowMidiApplication::getLookAndFeel() 95 | { 96 | return pimpl_->lookAndFeel_; 97 | } 98 | 99 | void ShowMidiApplication::initialise(const String&) 100 | { 101 | pimpl_->mainWindow_.reset(new StandaloneWindow(getApplicationName())); 102 | 103 | applySettings(); 104 | } 105 | 106 | void ShowMidiApplication::shutdown() 107 | { 108 | pimpl_->mainWindow_ = nullptr; 109 | } 110 | 111 | void ShowMidiApplication::systemRequestedQuit() 112 | { 113 | quit(); 114 | } 115 | 116 | void ShowMidiApplication::anotherInstanceStarted(const String&) 117 | { 118 | } 119 | 120 | bool ShowMidiApplication::isPlugin() 121 | { 122 | return false; 123 | } 124 | 125 | Component* ShowMidiApplication::getTopLevelComponent() 126 | { 127 | return nullptr; 128 | } 129 | 130 | Settings& ShowMidiApplication::getSettings() 131 | { 132 | return pimpl_->settings_; 133 | } 134 | 135 | void ShowMidiApplication::applySettings() 136 | { 137 | pimpl_->mainWindow_->setAlwaysOnTop(pimpl_->settings_.getWindowPosition() == WindowPosition::windowAlwaysOnTop); 138 | pimpl_->mainWindow_->repaint(); 139 | } 140 | 141 | MidiDevicesListeners& ShowMidiApplication::getMidiDevicesListeners() 142 | { 143 | return pimpl_->midiDevicesListeners_; 144 | } 145 | 146 | ShowMidiApplication::ShowMidiApplication() : pimpl_(new Pimpl()) 147 | { 148 | Desktop::getInstance().setDefaultLookAndFeel(&pimpl_->lookAndFeel_); 149 | } 150 | 151 | void ShowMidiApplication::setWindowTitle(const String& title) { pimpl_->setWindowTitle(title); } 152 | void ShowMidiApplication::setWindowWidthForMainLayout(int width) { pimpl_->setWindowWidthForMainLayout(width); } 153 | void ShowMidiApplication::storeSettings() { pimpl_->storeSettings(); } 154 | } 155 | -------------------------------------------------------------------------------- /Source/ShowMidiApplication.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include 21 | 22 | #include "MidiDevicesListener.h" 23 | #include "PropertiesSettings.h" 24 | #include "SettingsManager.h" 25 | #include "UwynLookAndFeel.h" 26 | 27 | #define SMApp ShowMidiApplication::getInstance() 28 | 29 | namespace showmidi 30 | { 31 | class StandaloneWindow; 32 | 33 | class ShowMidiApplication : public JUCEApplication, public SettingsManager 34 | { 35 | public: 36 | ShowMidiApplication(); 37 | 38 | inline static bool hasInstance() 39 | { 40 | return JUCEApplication::getInstance() != nullptr; 41 | } 42 | 43 | inline static ShowMidiApplication& getInstance() 44 | { 45 | ShowMidiApplication* const app = dynamic_cast(JUCEApplication::getInstance()); 46 | jassert (app != nullptr); 47 | return *app; 48 | } 49 | 50 | const String getApplicationName() override; 51 | const String getApplicationVersion() override; 52 | bool moreThanOneInstanceAllowed() override; 53 | UwynLookAndFeel& getLookAndFeel(); 54 | 55 | void initialise(const String& commandLine) override; 56 | void shutdown() override; 57 | void systemRequestedQuit() override; 58 | void anotherInstanceStarted(const String& commandLine) override; 59 | 60 | void setWindowTitle(const String&); 61 | void setWindowWidthForMainLayout(int); 62 | 63 | bool isPlugin() override; 64 | Component* getTopLevelComponent() override; 65 | Settings& getSettings() override; 66 | void applySettings() override; 67 | void storeSettings() override; 68 | 69 | MidiDevicesListeners& getMidiDevicesListeners() override; 70 | 71 | struct Pimpl; 72 | private: 73 | std::unique_ptr pimpl_; 74 | }; 75 | } 76 | -------------------------------------------------------------------------------- /Source/SidebarComponent.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include 21 | 22 | #include "DeviceManager.h" 23 | #include "SettingsManager.h" 24 | 25 | namespace showmidi 26 | { 27 | enum SidebarType 28 | { 29 | sidebarExpandable = 1, 30 | sidebarFixed 31 | }; 32 | 33 | class SidebarListener 34 | { 35 | public: 36 | SidebarListener(); 37 | virtual ~SidebarListener(); 38 | 39 | virtual void sidebarChangedWidth() = 0; 40 | }; 41 | 42 | class SidebarComponent : public Component 43 | { 44 | public: 45 | static constexpr int X_COLLAPSED = 14; 46 | static constexpr int Y_COLLAPSED = 13; 47 | 48 | static constexpr int X_EXPANDED = 12; 49 | static constexpr int Y_EXPANDED = 13; 50 | 51 | static constexpr int X_SETTINGS = 11; 52 | static constexpr int Y_SETTINGS = 11; 53 | 54 | static constexpr int X_PLAY_COLLAPSED = 12; 55 | static constexpr int Y_PLAY_COLLAPSED = 44; 56 | 57 | static constexpr int X_PLAY_EXPANDED = 40; 58 | static constexpr int Y_PLAY_EXPANDED = 11; 59 | 60 | static constexpr int X_VISUALIZATION_COLLAPSED = 12; 61 | static constexpr int Y_VISUALIZATION_COLLAPSED = 78; 62 | 63 | static constexpr int X_VISUALIZATION_EXPANDED = 68; 64 | static constexpr int Y_VISUALIZATION_EXPANDED = 11; 65 | 66 | static constexpr int X_RESET_COLLAPSED = 11; 67 | static constexpr int Y_RESET_COLLAPSED = 46; 68 | 69 | static constexpr int X_RESET_EXPANDED = 39; 70 | static constexpr int Y_RESET_EXPANDED = 11; 71 | 72 | static constexpr int X_HELP = 11; 73 | static constexpr int Y_HELP = 12; 74 | 75 | SidebarComponent(SettingsManager*, DeviceManager*, SidebarType, SidebarListener*); 76 | ~SidebarComponent() override; 77 | 78 | void setup(); 79 | 80 | void paint(Graphics&) override; 81 | 82 | void resized() override; 83 | 84 | int getActiveWidth(); 85 | 86 | void updateSettings(); 87 | 88 | struct Pimpl; 89 | private: 90 | std::unique_ptr pimpl_; 91 | 92 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SidebarComponent) 93 | }; 94 | } 95 | -------------------------------------------------------------------------------- /Source/StandaloneDevicesComponent.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include 21 | 22 | #include "DeviceManager.h" 23 | #include "Theme.h" 24 | 25 | namespace showmidi 26 | { 27 | class StandaloneDevicesComponent : public Component, public DeviceManager 28 | { 29 | public: 30 | StandaloneDevicesComponent(); 31 | ~StandaloneDevicesComponent() override; 32 | 33 | void paint(Graphics&) override; 34 | 35 | bool isPaused() override; 36 | void togglePaused() override; 37 | DeviceListeners& getDeviceListeners() override; 38 | void resetChannelData() override; 39 | 40 | struct Pimpl; 41 | private: 42 | std::unique_ptr pimpl_; 43 | 44 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (StandaloneDevicesComponent) 45 | }; 46 | } 47 | -------------------------------------------------------------------------------- /Source/StandaloneWindow.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #include "StandaloneWindow.h" 19 | 20 | #include "StandaloneDevicesComponent.h" 21 | #include "StandaloneDevicesComponent.h" 22 | #include "MainLayoutComponent.h" 23 | #include "MidiDeviceComponent.h" 24 | #include "SidebarComponent.h" 25 | #include "ShowMidiApplication.h" 26 | 27 | namespace showmidi 28 | { 29 | struct StandaloneWindow::Pimpl 30 | { 31 | Pimpl(StandaloneWindow* owner) : owner_(owner) 32 | { 33 | main_ = std::make_unique(); 34 | layout_ = std::make_unique(&SMApp, main_.get(), MainLayoutType::layoutStandalone, main_.get()); 35 | owner_->setUsingNativeTitleBar(true); 36 | 37 | owner_->setContentNonOwned(layout_.get(), true); 38 | #if JUCE_IOS 39 | owner_->setFullScreen(true); 40 | #else 41 | owner_->setResizable(true, true); 42 | owner_->centreWithSize(owner_->getWidth(), owner_->getHeight()); 43 | #endif 44 | } 45 | 46 | ~Pimpl() 47 | { 48 | owner_->clearContentComponent(); 49 | } 50 | 51 | void closeButtonPressed() 52 | { 53 | JUCEApplication::getInstance()->systemRequestedQuit(); 54 | } 55 | 56 | StandaloneWindow* const owner_; 57 | std::unique_ptr main_; 58 | std::unique_ptr layout_; 59 | 60 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Pimpl) 61 | }; 62 | 63 | StandaloneWindow::StandaloneWindow(String name) : 64 | DocumentWindow(name, SMApp.getSettings().getTheme().colorBackground, DocumentWindow::allButtons), 65 | pimpl_(new Pimpl(this)) 66 | { 67 | updatePosition(); 68 | setVisible(true); 69 | } 70 | 71 | StandaloneWindow::~StandaloneWindow() = default; 72 | 73 | void StandaloneWindow::updatePosition() 74 | { 75 | #if JUCE_IOS 76 | auto display = Desktop::getInstance().getDisplays().getPrimaryDisplay(); 77 | auto& user_area = display->userArea; 78 | auto& safe_insets = display->safeAreaInsets; 79 | setBounds(user_area.getX() + safe_insets.getLeft(), user_area.getY() + safe_insets.getTop(), 80 | user_area.getWidth() - safe_insets.getLeftAndRight(), user_area.getHeight() - safe_insets.getTopAndBottom()); 81 | if (pimpl_.get() && isVisible()) 82 | { 83 | pimpl_->layout_->setBounds(0, 0, getWidth(), getHeight()); 84 | pimpl_->layout_->resized(); 85 | } 86 | #endif 87 | } 88 | 89 | void StandaloneWindow::moved() 90 | { 91 | DocumentWindow::moved(); 92 | 93 | updatePosition(); 94 | }; 95 | 96 | void StandaloneWindow::resized() 97 | { 98 | DocumentWindow::resized(); 99 | 100 | if (pimpl_.get() && isVisible()) 101 | { 102 | pimpl_->layout_->setBounds(0, 0, getWidth(), getHeight()); 103 | } 104 | }; 105 | 106 | void StandaloneWindow::closeButtonPressed() { pimpl_->closeButtonPressed(); } 107 | int StandaloneWindow::getSidebarWidth() { return pimpl_->layout_->getSidebarWidth(); } 108 | } 109 | -------------------------------------------------------------------------------- /Source/StandaloneWindow.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include 21 | 22 | namespace showmidi 23 | { 24 | class StandaloneWindow : public DocumentWindow 25 | { 26 | public: 27 | StandaloneWindow(String name); 28 | ~StandaloneWindow(); 29 | 30 | void updatePosition(); 31 | void moved() override; 32 | void resized() override; 33 | void closeButtonPressed() override; 34 | 35 | int getSidebarWidth(); 36 | 37 | struct Pimpl; 38 | private: 39 | std::unique_ptr pimpl_; 40 | 41 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (StandaloneWindow) 42 | }; 43 | } 44 | -------------------------------------------------------------------------------- /Source/Theme.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include 21 | 22 | namespace showmidi 23 | { 24 | struct Theme 25 | { 26 | static constexpr int MIDI_DEVICE_SPACING = 2; 27 | static constexpr int SCROLLBAR_THICKNESS = 8; 28 | 29 | static Theme getDefault(); 30 | 31 | int lineHeight(); 32 | int linePosition(float); 33 | int getSidebarExpandedWidth(); 34 | 35 | Font fontLabel(); 36 | int labelHeight(); 37 | Font fontData(); 38 | int dataHeight(); 39 | 40 | String generateXml(); 41 | void parseXml(const String&); 42 | 43 | void randomize(); 44 | void reset(); 45 | 46 | static String convertSvgColor(const String&); 47 | 48 | Colour colorBackground; 49 | Colour colorSidebar; 50 | Colour colorSeperator; 51 | Colour colorTrack; 52 | Colour colorLabel; 53 | Colour colorData; 54 | Colour colorPositive; 55 | Colour colorNegative; 56 | Colour colorController; 57 | }; 58 | 59 | static const Theme THEME_DARK = 60 | { 61 | Colour(0xFF29272B), // colorBackground 62 | Colour(0xFF201E21), // colorSidebar 63 | Colour(0xFF66606B), // colorSeperator 64 | Colour(0xFF201E21), // colorTrack 65 | Colour(0xFF66606B), // colorLabel 66 | Colour(0xFFFFFFFF), // colorData 67 | Colour(0xFF66ADF3), // colorPositive 68 | Colour(0xFFD8414E), // colorNegative 69 | Colour(0xFFFFAB2B) // colorController 70 | }; 71 | 72 | static const Theme THEME_LIGHT = 73 | { 74 | Colour(0xFFF2F2F2), // colorBackground 75 | Colour(0xFFFFFFFF), // colorSidebar 76 | Colour(0xFFA0A0A0), // colorSeperator 77 | Colour(0xFFFFFFFF), // colorTrack 78 | Colour(0xFFA0A0A0), // colorLabel 79 | Colour(0xFF222222), // colorData 80 | Colour(0xFF66ADF3), // colorPositive 81 | Colour(0xFFD8414E), // colorNegative 82 | Colour(0xFFFFAB2B) // colorController 83 | }; 84 | } 85 | -------------------------------------------------------------------------------- /Source/UwynLookAndFeel.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #include "UwynLookAndFeel.h" 19 | 20 | using namespace showmidi; 21 | 22 | struct UwynLookAndFeel::Pimpl 23 | { 24 | Pimpl() : 25 | jetbrainMono_(Typeface::createSystemTypefaceFor(BinaryData::JetBrainsMonoRegular_ttf, BinaryData::JetBrainsMonoRegular_ttfSize)), 26 | jetbrainMonoItalic_(Typeface::createSystemTypefaceFor(BinaryData::JetBrainsMonoItalic_ttf, BinaryData::JetBrainsMonoItalic_ttfSize)), 27 | jetbrainMonoSemiBold_(Typeface::createSystemTypefaceFor(BinaryData::JetBrainsMonoSemiBold_ttf, BinaryData::JetBrainsMonoSemiBold_ttfSize)), 28 | jetbrainMonoSemiBoldItalic_(Typeface::createSystemTypefaceFor(BinaryData::JetBrainsMonoSemiBoldItalic_ttf, BinaryData::JetBrainsMonoSemiBoldItalic_ttfSize)) 29 | { 30 | } 31 | 32 | Typeface::Ptr getTypefaceForFont(const Font& font) 33 | { 34 | bool bold = font.getTypefaceStyle().toLowerCase().contains("bold") || font.isBold(); 35 | bool italic = font.getTypefaceStyle().toLowerCase().contains("italic") || font.isItalic(); 36 | if (bold) 37 | { 38 | if (italic) 39 | { 40 | return jetbrainMonoSemiBoldItalic_; 41 | } 42 | else 43 | { 44 | return jetbrainMonoSemiBold_; 45 | } 46 | } 47 | 48 | if (italic) 49 | { 50 | return jetbrainMonoItalic_; 51 | } 52 | else 53 | { 54 | return jetbrainMono_; 55 | } 56 | } 57 | 58 | Typeface::Ptr jetbrainMono_; 59 | Typeface::Ptr jetbrainMonoItalic_; 60 | Typeface::Ptr jetbrainMonoSemiBold_; 61 | Typeface::Ptr jetbrainMonoSemiBoldItalic_; 62 | }; 63 | 64 | UwynLookAndFeel::UwynLookAndFeel() : pimpl_(new Pimpl()) 65 | { 66 | setColourScheme(getDarkColourScheme()); 67 | 68 | setColour(TextEditor::focusedOutlineColourId, Colour(0x00000000)); 69 | setColour(TextEditor::outlineColourId, Colour(0x00000000)); 70 | setColour(ComboBox::outlineColourId, Colour(0x00000000)); 71 | setColour(ComboBox::buttonColourId, Colour(0xff2e2e2e)); 72 | setColour(TextButton::buttonColourId, Colour(0xff2e2e2e)); 73 | setColour(ScrollBar::thumbColourId, Colour(0xff999999)); 74 | setColour(ScrollBar::trackColourId, Colour(0xff666666)); 75 | setColour(AlertWindow::backgroundColourId, Colour(0xff1e1e1e)); 76 | setColour(AlertWindow::outlineColourId, Colour(0xff2e2e2e)); 77 | } 78 | 79 | UwynLookAndFeel::~UwynLookAndFeel() = default; 80 | 81 | Typeface::Ptr UwynLookAndFeel::getTypefaceForFont(const Font& font) 82 | { 83 | Typeface::Ptr r = pimpl_->getTypefaceForFont(font); 84 | if (r) 85 | { 86 | return r; 87 | } 88 | return LookAndFeel::getTypefaceForFont(font); 89 | } 90 | 91 | LookAndFeel_V4::ColourScheme UwynLookAndFeel::getDarkColourScheme() 92 | { 93 | return { 94 | 0xff1e1e1e, 0xff323232, 0xff1e1e1e, 95 | 0xff989898, 0xffffffff, 0xffa2a2a2, 96 | 0xffffffff, 0xff4f4f4f, 0xffffffff }; 97 | } 98 | -------------------------------------------------------------------------------- /Source/UwynLookAndFeel.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of ShowMIDI. 3 | * Copyright (command) 2023 Uwyn LLC. https://www.uwyn.com 4 | * 5 | * ShowMIDI is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * ShowMIDI is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | #pragma once 19 | 20 | #include 21 | 22 | namespace showmidi 23 | { 24 | class UwynLookAndFeel : public LookAndFeel_V4 25 | { 26 | public: 27 | UwynLookAndFeel(); 28 | virtual ~UwynLookAndFeel(); 29 | 30 | Typeface::Ptr getTypefaceForFont(const Font& font) override; 31 | 32 | LookAndFeel_V4::ColourScheme getDarkColourScheme(); 33 | 34 | struct Pimpl; 35 | private: 36 | std::unique_ptr pimpl_; 37 | 38 | UwynLookAndFeel(const UwynLookAndFeel &); 39 | const UwynLookAndFeel& operator= (const UwynLookAndFeel &); 40 | }; 41 | } 42 | -------------------------------------------------------------------------------- /Themes/bstation.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Themes/classic light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Themes/darcula.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Themes/dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Themes/disco.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Themes/light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Themes/mouha.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /libs/vst2_readme.txt: -------------------------------------------------------------------------------- 1 | Put the vst2 SDK in this folder and name it: 2 | vst2 3 | --------------------------------------------------------------------------------