├── .gitignore ├── OpenSheetMusicDisplay-Swift-Example.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcuserdata │ └── massimo.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── OpenSheetMusicDisplay-Swift-Example ├── AppDelegate.swift ├── Assets.xcassets │ ├── AccentColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── FaurReveSample.musicxml ├── Info.plist ├── NotationView.swift ├── OSMD │ ├── index.html │ └── opensheetmusicdisplay.min.js ├── OpenSheetMusicDisplay-Swift-Example.entitlements ├── SceneDelegate.swift ├── The Beginning.musicxml └── ViewController.swift ├── README.md └── example.png /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.toptal.com/developers/gitignore/api/swift,xcode 3 | # Edit at https://www.toptal.com/developers/gitignore?templates=swift,xcode 4 | 5 | ### Swift ### 6 | # Xcode 7 | # 8 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 9 | 10 | ## User settings 11 | xcuserdata/ 12 | 13 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) 14 | *.xcscmblueprint 15 | *.xccheckout 16 | 17 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) 18 | build/ 19 | DerivedData/ 20 | *.moved-aside 21 | *.pbxuser 22 | !default.pbxuser 23 | *.mode1v3 24 | !default.mode1v3 25 | *.mode2v3 26 | !default.mode2v3 27 | *.perspectivev3 28 | !default.perspectivev3 29 | 30 | ## Obj-C/Swift specific 31 | *.hmap 32 | 33 | ## App packaging 34 | *.ipa 35 | *.dSYM.zip 36 | *.dSYM 37 | 38 | ## Playgrounds 39 | timeline.xctimeline 40 | playground.xcworkspace 41 | 42 | # Swift Package Manager 43 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 44 | # Packages/ 45 | # Package.pins 46 | # Package.resolved 47 | # *.xcodeproj 48 | # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata 49 | # hence it is not needed unless you have added a package configuration file to your project 50 | # .swiftpm 51 | 52 | .build/ 53 | 54 | # CocoaPods 55 | # We recommend against adding the Pods directory to your .gitignore. However 56 | # you should judge for yourself, the pros and cons are mentioned at: 57 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 58 | # Pods/ 59 | # Add this line if you want to avoid checking in source code from the Xcode workspace 60 | # *.xcworkspace 61 | 62 | # Carthage 63 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 64 | # Carthage/Checkouts 65 | 66 | Carthage/Build/ 67 | 68 | # Accio dependency management 69 | Dependencies/ 70 | .accio/ 71 | 72 | # fastlane 73 | # It is recommended to not store the screenshots in the git repo. 74 | # Instead, use fastlane to re-generate the screenshots whenever they are needed. 75 | # For more information about the recommended setup visit: 76 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 77 | 78 | fastlane/report.xml 79 | fastlane/Preview.html 80 | fastlane/screenshots/**/*.png 81 | fastlane/test_output 82 | 83 | # Code Injection 84 | # After new code Injection tools there's a generated folder /iOSInjectionProject 85 | # https://github.com/johnno1962/injectionforxcode 86 | 87 | iOSInjectionProject/ 88 | 89 | ### Xcode ### 90 | # Xcode 91 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 92 | 93 | 94 | 95 | 96 | ## Gcc Patch 97 | /*.gcno 98 | 99 | ### Xcode Patch ### 100 | *.xcodeproj/* 101 | !*.xcodeproj/project.pbxproj 102 | !*.xcodeproj/xcshareddata/ 103 | !*.xcworkspace/contents.xcworkspacedata 104 | **/xcshareddata/WorkspaceSettings.xcsettings 105 | 106 | # End of https://www.toptal.com/developers/gitignore/api/swift,xcode -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 563A572C2594063E0032C000 /* The Beginning.musicxml in Resources */ = {isa = PBXBuildFile; fileRef = 563A572B2594063E0032C000 /* The Beginning.musicxml */; }; 11 | 56FBBCAC25740BCA00074308 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56FBBCAB25740BCA00074308 /* AppDelegate.swift */; }; 12 | 56FBBCAE25740BCA00074308 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56FBBCAD25740BCA00074308 /* SceneDelegate.swift */; }; 13 | 56FBBCB025740BCA00074308 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56FBBCAF25740BCA00074308 /* ViewController.swift */; }; 14 | 56FBBCB325740BCA00074308 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 56FBBCB125740BCA00074308 /* Main.storyboard */; }; 15 | 56FBBCB525740BCB00074308 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 56FBBCB425740BCB00074308 /* Assets.xcassets */; }; 16 | 56FBBCB825740BCB00074308 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 56FBBCB625740BCB00074308 /* LaunchScreen.storyboard */; }; 17 | 56FBBCCA2574105B00074308 /* NotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56FBBCC92574105B00074308 /* NotationView.swift */; }; 18 | 56FBBCCD257414BD00074308 /* OSMD in Resources */ = {isa = PBXBuildFile; fileRef = 56FBBCC825740FCA00074308 /* OSMD */; }; 19 | 56FBBD0E2574408B00074308 /* FaurReveSample.musicxml in Resources */ = {isa = PBXBuildFile; fileRef = 56FBBD0D2574408B00074308 /* FaurReveSample.musicxml */; }; 20 | /* End PBXBuildFile section */ 21 | 22 | /* Begin PBXFileReference section */ 23 | 563A572B2594063E0032C000 /* The Beginning.musicxml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "The Beginning.musicxml"; sourceTree = ""; }; 24 | 56FBBCA825740BCA00074308 /* OpenSheetMusicDisplay-Swift-Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "OpenSheetMusicDisplay-Swift-Example.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 25 | 56FBBCAB25740BCA00074308 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 26 | 56FBBCAD25740BCA00074308 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 27 | 56FBBCAF25740BCA00074308 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 28 | 56FBBCB225740BCA00074308 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 29 | 56FBBCB425740BCB00074308 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 30 | 56FBBCB725740BCB00074308 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 31 | 56FBBCB925740BCB00074308 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 32 | 56FBBCC825740FCA00074308 /* OSMD */ = {isa = PBXFileReference; lastKnownFileType = folder; path = OSMD; sourceTree = ""; }; 33 | 56FBBCC92574105B00074308 /* NotationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotationView.swift; sourceTree = ""; }; 34 | 56FBBD0D2574408B00074308 /* FaurReveSample.musicxml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = FaurReveSample.musicxml; sourceTree = ""; }; 35 | 56FBBD112574561400074308 /* OpenSheetMusicDisplay-Swift-Example.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "OpenSheetMusicDisplay-Swift-Example.entitlements"; sourceTree = ""; }; 36 | /* End PBXFileReference section */ 37 | 38 | /* Begin PBXFrameworksBuildPhase section */ 39 | 56FBBCA525740BCA00074308 /* Frameworks */ = { 40 | isa = PBXFrameworksBuildPhase; 41 | buildActionMask = 2147483647; 42 | files = ( 43 | ); 44 | runOnlyForDeploymentPostprocessing = 0; 45 | }; 46 | /* End PBXFrameworksBuildPhase section */ 47 | 48 | /* Begin PBXGroup section */ 49 | 56FBBC9F25740BCA00074308 = { 50 | isa = PBXGroup; 51 | children = ( 52 | 56FBBCAA25740BCA00074308 /* OpenSheetMusicDisplay-Swift-Example */, 53 | 56FBBCA925740BCA00074308 /* Products */, 54 | ); 55 | sourceTree = ""; 56 | }; 57 | 56FBBCA925740BCA00074308 /* Products */ = { 58 | isa = PBXGroup; 59 | children = ( 60 | 56FBBCA825740BCA00074308 /* OpenSheetMusicDisplay-Swift-Example.app */, 61 | ); 62 | name = Products; 63 | sourceTree = ""; 64 | }; 65 | 56FBBCAA25740BCA00074308 /* OpenSheetMusicDisplay-Swift-Example */ = { 66 | isa = PBXGroup; 67 | children = ( 68 | 56FBBD112574561400074308 /* OpenSheetMusicDisplay-Swift-Example.entitlements */, 69 | 56FBBCAB25740BCA00074308 /* AppDelegate.swift */, 70 | 56FBBCAD25740BCA00074308 /* SceneDelegate.swift */, 71 | 56FBBCAF25740BCA00074308 /* ViewController.swift */, 72 | 56FBBCC92574105B00074308 /* NotationView.swift */, 73 | 56FBBCB125740BCA00074308 /* Main.storyboard */, 74 | 56FBBCB425740BCB00074308 /* Assets.xcassets */, 75 | 56FBBD0D2574408B00074308 /* FaurReveSample.musicxml */, 76 | 563A572B2594063E0032C000 /* The Beginning.musicxml */, 77 | 56FBBCB625740BCB00074308 /* LaunchScreen.storyboard */, 78 | 56FBBCB925740BCB00074308 /* Info.plist */, 79 | 56FBBCC825740FCA00074308 /* OSMD */, 80 | ); 81 | path = "OpenSheetMusicDisplay-Swift-Example"; 82 | sourceTree = ""; 83 | }; 84 | /* End PBXGroup section */ 85 | 86 | /* Begin PBXNativeTarget section */ 87 | 56FBBCA725740BCA00074308 /* OpenSheetMusicDisplay-Swift-Example */ = { 88 | isa = PBXNativeTarget; 89 | buildConfigurationList = 56FBBCBC25740BCB00074308 /* Build configuration list for PBXNativeTarget "OpenSheetMusicDisplay-Swift-Example" */; 90 | buildPhases = ( 91 | 56FBBCA425740BCA00074308 /* Sources */, 92 | 56FBBCA525740BCA00074308 /* Frameworks */, 93 | 56FBBCA625740BCA00074308 /* Resources */, 94 | ); 95 | buildRules = ( 96 | ); 97 | dependencies = ( 98 | ); 99 | name = "OpenSheetMusicDisplay-Swift-Example"; 100 | productName = "OpenSheetMusicDisplay-Swift-Example"; 101 | productReference = 56FBBCA825740BCA00074308 /* OpenSheetMusicDisplay-Swift-Example.app */; 102 | productType = "com.apple.product-type.application"; 103 | }; 104 | /* End PBXNativeTarget section */ 105 | 106 | /* Begin PBXProject section */ 107 | 56FBBCA025740BCA00074308 /* Project object */ = { 108 | isa = PBXProject; 109 | attributes = { 110 | LastSwiftUpdateCheck = 1220; 111 | LastUpgradeCheck = 1220; 112 | TargetAttributes = { 113 | 56FBBCA725740BCA00074308 = { 114 | CreatedOnToolsVersion = 12.2; 115 | }; 116 | }; 117 | }; 118 | buildConfigurationList = 56FBBCA325740BCA00074308 /* Build configuration list for PBXProject "OpenSheetMusicDisplay-Swift-Example" */; 119 | compatibilityVersion = "Xcode 9.3"; 120 | developmentRegion = en; 121 | hasScannedForEncodings = 0; 122 | knownRegions = ( 123 | en, 124 | Base, 125 | ); 126 | mainGroup = 56FBBC9F25740BCA00074308; 127 | productRefGroup = 56FBBCA925740BCA00074308 /* Products */; 128 | projectDirPath = ""; 129 | projectRoot = ""; 130 | targets = ( 131 | 56FBBCA725740BCA00074308 /* OpenSheetMusicDisplay-Swift-Example */, 132 | ); 133 | }; 134 | /* End PBXProject section */ 135 | 136 | /* Begin PBXResourcesBuildPhase section */ 137 | 56FBBCA625740BCA00074308 /* Resources */ = { 138 | isa = PBXResourcesBuildPhase; 139 | buildActionMask = 2147483647; 140 | files = ( 141 | 56FBBCB825740BCB00074308 /* LaunchScreen.storyboard in Resources */, 142 | 56FBBCB525740BCB00074308 /* Assets.xcassets in Resources */, 143 | 56FBBCB325740BCA00074308 /* Main.storyboard in Resources */, 144 | 56FBBD0E2574408B00074308 /* FaurReveSample.musicxml in Resources */, 145 | 563A572C2594063E0032C000 /* The Beginning.musicxml in Resources */, 146 | 56FBBCCD257414BD00074308 /* OSMD in Resources */, 147 | ); 148 | runOnlyForDeploymentPostprocessing = 0; 149 | }; 150 | /* End PBXResourcesBuildPhase section */ 151 | 152 | /* Begin PBXSourcesBuildPhase section */ 153 | 56FBBCA425740BCA00074308 /* Sources */ = { 154 | isa = PBXSourcesBuildPhase; 155 | buildActionMask = 2147483647; 156 | files = ( 157 | 56FBBCCA2574105B00074308 /* NotationView.swift in Sources */, 158 | 56FBBCB025740BCA00074308 /* ViewController.swift in Sources */, 159 | 56FBBCAC25740BCA00074308 /* AppDelegate.swift in Sources */, 160 | 56FBBCAE25740BCA00074308 /* SceneDelegate.swift in Sources */, 161 | ); 162 | runOnlyForDeploymentPostprocessing = 0; 163 | }; 164 | /* End PBXSourcesBuildPhase section */ 165 | 166 | /* Begin PBXVariantGroup section */ 167 | 56FBBCB125740BCA00074308 /* Main.storyboard */ = { 168 | isa = PBXVariantGroup; 169 | children = ( 170 | 56FBBCB225740BCA00074308 /* Base */, 171 | ); 172 | name = Main.storyboard; 173 | sourceTree = ""; 174 | }; 175 | 56FBBCB625740BCB00074308 /* LaunchScreen.storyboard */ = { 176 | isa = PBXVariantGroup; 177 | children = ( 178 | 56FBBCB725740BCB00074308 /* Base */, 179 | ); 180 | name = LaunchScreen.storyboard; 181 | sourceTree = ""; 182 | }; 183 | /* End PBXVariantGroup section */ 184 | 185 | /* Begin XCBuildConfiguration section */ 186 | 56FBBCBA25740BCB00074308 /* Debug */ = { 187 | isa = XCBuildConfiguration; 188 | buildSettings = { 189 | ALWAYS_SEARCH_USER_PATHS = NO; 190 | CLANG_ANALYZER_NONNULL = YES; 191 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 192 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 193 | CLANG_CXX_LIBRARY = "libc++"; 194 | CLANG_ENABLE_MODULES = YES; 195 | CLANG_ENABLE_OBJC_ARC = YES; 196 | CLANG_ENABLE_OBJC_WEAK = YES; 197 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 198 | CLANG_WARN_BOOL_CONVERSION = YES; 199 | CLANG_WARN_COMMA = YES; 200 | CLANG_WARN_CONSTANT_CONVERSION = YES; 201 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 202 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 203 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 204 | CLANG_WARN_EMPTY_BODY = YES; 205 | CLANG_WARN_ENUM_CONVERSION = YES; 206 | CLANG_WARN_INFINITE_RECURSION = YES; 207 | CLANG_WARN_INT_CONVERSION = YES; 208 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 209 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 210 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 211 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 212 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 213 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 214 | CLANG_WARN_STRICT_PROTOTYPES = YES; 215 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 216 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 217 | CLANG_WARN_UNREACHABLE_CODE = YES; 218 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 219 | COPY_PHASE_STRIP = NO; 220 | DEBUG_INFORMATION_FORMAT = dwarf; 221 | ENABLE_STRICT_OBJC_MSGSEND = YES; 222 | ENABLE_TESTABILITY = YES; 223 | GCC_C_LANGUAGE_STANDARD = gnu11; 224 | GCC_DYNAMIC_NO_PIC = NO; 225 | GCC_NO_COMMON_BLOCKS = YES; 226 | GCC_OPTIMIZATION_LEVEL = 0; 227 | GCC_PREPROCESSOR_DEFINITIONS = ( 228 | "DEBUG=1", 229 | "$(inherited)", 230 | ); 231 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 232 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 233 | GCC_WARN_UNDECLARED_SELECTOR = YES; 234 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 235 | GCC_WARN_UNUSED_FUNCTION = YES; 236 | GCC_WARN_UNUSED_VARIABLE = YES; 237 | IPHONEOS_DEPLOYMENT_TARGET = 14.2; 238 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 239 | MTL_FAST_MATH = YES; 240 | ONLY_ACTIVE_ARCH = YES; 241 | SDKROOT = iphoneos; 242 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 243 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 244 | }; 245 | name = Debug; 246 | }; 247 | 56FBBCBB25740BCB00074308 /* Release */ = { 248 | isa = XCBuildConfiguration; 249 | buildSettings = { 250 | ALWAYS_SEARCH_USER_PATHS = NO; 251 | CLANG_ANALYZER_NONNULL = YES; 252 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 253 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 254 | CLANG_CXX_LIBRARY = "libc++"; 255 | CLANG_ENABLE_MODULES = YES; 256 | CLANG_ENABLE_OBJC_ARC = YES; 257 | CLANG_ENABLE_OBJC_WEAK = YES; 258 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 259 | CLANG_WARN_BOOL_CONVERSION = YES; 260 | CLANG_WARN_COMMA = YES; 261 | CLANG_WARN_CONSTANT_CONVERSION = YES; 262 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 263 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 264 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 265 | CLANG_WARN_EMPTY_BODY = YES; 266 | CLANG_WARN_ENUM_CONVERSION = YES; 267 | CLANG_WARN_INFINITE_RECURSION = YES; 268 | CLANG_WARN_INT_CONVERSION = YES; 269 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 270 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 271 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 272 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 273 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 274 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 275 | CLANG_WARN_STRICT_PROTOTYPES = YES; 276 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 277 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 278 | CLANG_WARN_UNREACHABLE_CODE = YES; 279 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 280 | COPY_PHASE_STRIP = NO; 281 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 282 | ENABLE_NS_ASSERTIONS = NO; 283 | ENABLE_STRICT_OBJC_MSGSEND = YES; 284 | GCC_C_LANGUAGE_STANDARD = gnu11; 285 | GCC_NO_COMMON_BLOCKS = YES; 286 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 287 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 288 | GCC_WARN_UNDECLARED_SELECTOR = YES; 289 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 290 | GCC_WARN_UNUSED_FUNCTION = YES; 291 | GCC_WARN_UNUSED_VARIABLE = YES; 292 | IPHONEOS_DEPLOYMENT_TARGET = 14.2; 293 | MTL_ENABLE_DEBUG_INFO = NO; 294 | MTL_FAST_MATH = YES; 295 | SDKROOT = iphoneos; 296 | SWIFT_COMPILATION_MODE = wholemodule; 297 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 298 | VALIDATE_PRODUCT = YES; 299 | }; 300 | name = Release; 301 | }; 302 | 56FBBCBD25740BCB00074308 /* Debug */ = { 303 | isa = XCBuildConfiguration; 304 | buildSettings = { 305 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 306 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 307 | CODE_SIGN_ENTITLEMENTS = "OpenSheetMusicDisplay-Swift-Example/OpenSheetMusicDisplay-Swift-Example.entitlements"; 308 | "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; 309 | CODE_SIGN_STYLE = Automatic; 310 | DEVELOPMENT_TEAM = ""; 311 | INFOPLIST_FILE = "OpenSheetMusicDisplay-Swift-Example/Info.plist"; 312 | IPHONEOS_DEPLOYMENT_TARGET = 13.6; 313 | "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 13.5; 314 | LD_RUNPATH_SEARCH_PATHS = ( 315 | "$(inherited)", 316 | "@executable_path/Frameworks", 317 | ); 318 | PRODUCT_BUNDLE_IDENTIFIER = "com.technimo.OpenSheetMusicDisplay-Swift-Example"; 319 | PRODUCT_NAME = "$(TARGET_NAME)"; 320 | SUPPORTS_MACCATALYST = YES; 321 | SWIFT_VERSION = 5.0; 322 | TARGETED_DEVICE_FAMILY = "1,2"; 323 | }; 324 | name = Debug; 325 | }; 326 | 56FBBCBE25740BCB00074308 /* Release */ = { 327 | isa = XCBuildConfiguration; 328 | buildSettings = { 329 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 330 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 331 | CODE_SIGN_ENTITLEMENTS = "OpenSheetMusicDisplay-Swift-Example/OpenSheetMusicDisplay-Swift-Example.entitlements"; 332 | "CODE_SIGN_IDENTITY[sdk=macosx*]" = "-"; 333 | CODE_SIGN_STYLE = Automatic; 334 | DEVELOPMENT_TEAM = ""; 335 | INFOPLIST_FILE = "OpenSheetMusicDisplay-Swift-Example/Info.plist"; 336 | IPHONEOS_DEPLOYMENT_TARGET = 13.6; 337 | "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 13.5; 338 | LD_RUNPATH_SEARCH_PATHS = ( 339 | "$(inherited)", 340 | "@executable_path/Frameworks", 341 | ); 342 | PRODUCT_BUNDLE_IDENTIFIER = "com.technimo.OpenSheetMusicDisplay-Swift-Example"; 343 | PRODUCT_NAME = "$(TARGET_NAME)"; 344 | SUPPORTS_MACCATALYST = YES; 345 | SWIFT_VERSION = 5.0; 346 | TARGETED_DEVICE_FAMILY = "1,2"; 347 | }; 348 | name = Release; 349 | }; 350 | /* End XCBuildConfiguration section */ 351 | 352 | /* Begin XCConfigurationList section */ 353 | 56FBBCA325740BCA00074308 /* Build configuration list for PBXProject "OpenSheetMusicDisplay-Swift-Example" */ = { 354 | isa = XCConfigurationList; 355 | buildConfigurations = ( 356 | 56FBBCBA25740BCB00074308 /* Debug */, 357 | 56FBBCBB25740BCB00074308 /* Release */, 358 | ); 359 | defaultConfigurationIsVisible = 0; 360 | defaultConfigurationName = Release; 361 | }; 362 | 56FBBCBC25740BCB00074308 /* Build configuration list for PBXNativeTarget "OpenSheetMusicDisplay-Swift-Example" */ = { 363 | isa = XCConfigurationList; 364 | buildConfigurations = ( 365 | 56FBBCBD25740BCB00074308 /* Debug */, 366 | 56FBBCBE25740BCB00074308 /* Release */, 367 | ); 368 | defaultConfigurationIsVisible = 0; 369 | defaultConfigurationName = Release; 370 | }; 371 | /* End XCConfigurationList section */ 372 | }; 373 | rootObject = 56FBBCA025740BCA00074308 /* Project object */; 374 | } 375 | -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example.xcodeproj/xcuserdata/massimo.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | OpenSheetMusicDisplay-Swift-Example.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // OpenSheetMusicDisplay-Swift-Example 4 | // 5 | // Created by Massimo Biolcati on 11/29/20. 6 | // 7 | 8 | import UIKit 9 | 10 | @main 11 | class AppDelegate: UIResponder, UIApplicationDelegate { 12 | 13 | 14 | 15 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 16 | // Override point for customization after application launch. 17 | return true 18 | } 19 | 20 | // MARK: UISceneSession Lifecycle 21 | 22 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { 23 | // Called when a new scene session is being created. 24 | // Use this method to select a configuration to create the new scene with. 25 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) 26 | } 27 | 28 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { 29 | // Called when the user discards a scene session. 30 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. 31 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return. 32 | } 33 | 34 | 35 | } 36 | 37 | -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "scale" : "1x", 46 | "size" : "20x20" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "scale" : "2x", 51 | "size" : "20x20" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "scale" : "1x", 56 | "size" : "29x29" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "29x29" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "scale" : "1x", 66 | "size" : "40x40" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "scale" : "2x", 71 | "size" : "40x40" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "scale" : "1x", 76 | "size" : "76x76" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "scale" : "2x", 81 | "size" : "76x76" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "scale" : "2x", 86 | "size" : "83.5x83.5" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "scale" : "1x", 91 | "size" : "1024x1024" 92 | } 93 | ], 94 | "info" : { 95 | "author" : "xcode", 96 | "version" : 1 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example/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 | -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example/Base.lproj/Main.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 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | OSMD 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UIApplicationSceneManifest 26 | 27 | UIApplicationSupportsMultipleScenes 28 | 29 | UISceneConfigurations 30 | 31 | UIWindowSceneSessionRoleApplication 32 | 33 | 34 | UISceneConfigurationName 35 | Default Configuration 36 | UISceneDelegateClassName 37 | $(PRODUCT_MODULE_NAME).SceneDelegate 38 | UISceneStoryboardFile 39 | Main 40 | 41 | 42 | 43 | 44 | UIApplicationSupportsIndirectInputEvents 45 | 46 | UILaunchStoryboardName 47 | LaunchScreen 48 | UIMainStoryboardFile 49 | Main 50 | UIRequiredDeviceCapabilities 51 | 52 | armv7 53 | 54 | UISupportedInterfaceOrientations 55 | 56 | UIInterfaceOrientationPortrait 57 | UIInterfaceOrientationLandscapeLeft 58 | UIInterfaceOrientationLandscapeRight 59 | 60 | UISupportedInterfaceOrientations~ipad 61 | 62 | UIInterfaceOrientationPortrait 63 | UIInterfaceOrientationPortraitUpsideDown 64 | UIInterfaceOrientationLandscapeLeft 65 | UIInterfaceOrientationLandscapeRight 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example/NotationView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NotationView.swift 3 | // OpenSheetMusicDisplay-Swift-Example 4 | // 5 | // Created by Massimo Biolcati on 11/29/20. 6 | // 7 | 8 | import UIKit 9 | import WebKit 10 | 11 | class NotationView: WKWebView, WKNavigationDelegate { 12 | 13 | private var zoom = 1.0 14 | private let scores = ["FaurReveSample", "The Beginning"] 15 | private var selectedScore = 0 16 | 17 | init(containerView: UIView) { 18 | super.init(frame: CGRect(x: 0, y: 0, width: containerView.frame.width, height: containerView.frame.height), configuration: WKWebViewConfiguration()) 19 | containerView.backgroundColor = .white 20 | isOpaque = false 21 | backgroundColor = .clear 22 | scrollView.backgroundColor = .clear 23 | navigationDelegate = self 24 | configuration.ignoresViewportScaleLimits = true 25 | backgroundColor = UIColor.clear 26 | allowsBackForwardNavigationGestures = false 27 | isUserInteractionEnabled = true 28 | 29 | if let url = Bundle.main.url(forResource: "index", withExtension: "html", subdirectory: "OSMD") { 30 | let request = URLRequest(url: url) 31 | load(request) 32 | } 33 | containerView.addSubview(self) 34 | autoresizingMask = [.flexibleWidth, .flexibleHeight] 35 | } 36 | 37 | required init?(coder: NSCoder) { 38 | fatalError("init(coder:) has not been implemented") 39 | } 40 | 41 | // MARK: WKNavigationDelegate functions 42 | 43 | func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { 44 | print("Did finish navigation") 45 | let xmlURL = URL(fileURLWithPath: Bundle.main.path(forResource: scores[selectedScore], ofType: "musicxml")!) 46 | guard var xmlString = try? String(contentsOf: xmlURL) else { 47 | print("Couldn't read the MusicXML file") 48 | return 49 | } 50 | xmlString = xmlString.replacingOccurrences(of: "'", with: "\\'").replacingOccurrences(of: "\n", with: "") 51 | evaluateJavaScript(""" 52 | console.log("Attempt loading of MusicXML file"); 53 | var osmd = new opensheetmusicdisplay.OpenSheetMusicDisplay("osmdContainer"); 54 | osmd.setOptions({ 55 | backend: "svg", drawTitle: true, followCursor: true, 56 | // drawingParameters: "compacttight" // don't display title, composer etc., smaller margins 57 | }); 58 | osmd.load('\(xmlString)').then(function () { 59 | osmd.render(); 60 | osmd.cursor.show(); 61 | osmd.rules.DefaultColorCursor = "#2FDAE0"; // light blue. use HTML hex colors 62 | }); 63 | """) { reply, error in 64 | print("JavaScript Initial load evaluation completed") 65 | print(reply ?? "No reply") 66 | print(error ?? "No error") 67 | } 68 | } 69 | 70 | @objc func changeZoomLevelPlus() { 71 | zoom += 0.25 72 | if zoom > 2.1 { 73 | zoom = 2.0 74 | } 75 | 76 | evaluateJavaScript("osmd.zoom = \(zoom);osmd.render();") { reply, error in 77 | print("JavaScript updateZoomLevel evaluation completed") 78 | print(reply ?? "No reply") 79 | print(error ?? "No error") 80 | } 81 | } 82 | 83 | @objc func changeZoomLevelMinus() { 84 | zoom -= 0.25 85 | if zoom < 1.0 { 86 | zoom = 1.0 87 | } 88 | 89 | evaluateJavaScript("osmd.zoom = \(zoom);osmd.render();") { reply, error in 90 | print("JavaScript updateZoomLevel evaluation completed") 91 | print(reply ?? "No reply") 92 | print(error ?? "No error") 93 | } 94 | } 95 | 96 | @objc func cursorNext() { 97 | evaluateJavaScript("osmd.cursor.next();") { reply, error in 98 | print("JavaScript cursorNext evaluation completed") 99 | print(reply ?? "No reply") 100 | print(error ?? "No error") 101 | } 102 | } 103 | 104 | @objc func switchScore() { 105 | selectedScore += 1 106 | if selectedScore >= scores.count { 107 | selectedScore = 0 108 | } 109 | reload() 110 | } 111 | 112 | } 113 | -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example/OSMD/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example/OpenSheetMusicDisplay-Swift-Example.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.network.client 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example/SceneDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.swift 3 | // OpenSheetMusicDisplay-Swift-Example 4 | // 5 | // Created by Massimo Biolcati on 11/29/20. 6 | // 7 | 8 | import UIKit 9 | 10 | class SceneDelegate: UIResponder, UIWindowSceneDelegate { 11 | 12 | var window: UIWindow? 13 | 14 | 15 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { 16 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. 17 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. 18 | // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). 19 | guard let _ = (scene as? UIWindowScene) else { return } 20 | } 21 | 22 | func sceneDidDisconnect(_ scene: UIScene) { 23 | // Called as the scene is being released by the system. 24 | // This occurs shortly after the scene enters the background, or when its session is discarded. 25 | // Release any resources associated with this scene that can be re-created the next time the scene connects. 26 | // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). 27 | } 28 | 29 | func sceneDidBecomeActive(_ scene: UIScene) { 30 | // Called when the scene has moved from an inactive state to an active state. 31 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. 32 | } 33 | 34 | func sceneWillResignActive(_ scene: UIScene) { 35 | // Called when the scene will move from an active state to an inactive state. 36 | // This may occur due to temporary interruptions (ex. an incoming phone call). 37 | } 38 | 39 | func sceneWillEnterForeground(_ scene: UIScene) { 40 | // Called as the scene transitions from the background to the foreground. 41 | // Use this method to undo the changes made on entering the background. 42 | } 43 | 44 | func sceneDidEnterBackground(_ scene: UIScene) { 45 | // Called as the scene transitions from the foreground to the background. 46 | // Use this method to save data, release shared resources, and store enough scene-specific state information 47 | // to restore the scene back to its current state. 48 | } 49 | 50 | 51 | } 52 | 53 | -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example/The Beginning.musicxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | The Beginning 6 | 7 | 8 | Massimo Biolcati 9 | Copyright © 2001 Swita Music, BMI. All Rights Reserved. 10 | 11 | 2021-01-28 12 | Massimo Biolcati 13 | Sibelius 20.12.0 14 | Direct export, not from Dolet 15 | Sibelius / MusicXML 3.0 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 215.9 26 | 1233 27 | 28 | 29 | 1596 30 | 1233 31 | 32 | 85 33 | 85 34 | 114 35 | 114 36 | 37 | 38 | 39 | 40 | 21 41 | 0 42 | 43 | 92 44 | 45 | 46 | 0.9375 47 | 5 48 | 0.9375 49 | 1.25 50 | 5 51 | 0.9375 52 | 1.5625 53 | 1.25 54 | 0.9375 55 | 1.25 56 | 5.9375 57 | 1.5625 58 | 0.9375 59 | 1.5625 60 | 1.5625 61 | 1.5625 62 | 0.625 63 | 1.5625 64 | 0.625 65 | 75 66 | 60 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | The Beginning 75 | 76 | 77 | Massimo Biolcati 78 | 79 | 80 | Copyright © 2001 Swita Music, BMI. All Rights Reserved. 81 | 82 | 83 | 84 | P1 85 | 86 | Piano (2) 87 | keyboard.piano.grand 88 | 89 | 90 | General MIDI 91 | Acoustic Piano 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 22 103 | 0 104 | 105 | 80 106 | 107 | 108 | 65 109 | 110 | 111 | 112 | 256 113 | 114 | 0 115 | major 116 | 117 | 121 | 2 122 | 123 | G 124 | 2 125 | 126 | 127 | F 128 | 4 129 | 130 | 131 | 132 | 133 | 134 | 135 | A 136 | 137 | 1 138 | 1 139 | 140 | 141 | heavy-light 142 | 143 | 144 | 145 | 146 | 147 | quarter 148 | 135 149 | 150 | 151 | 1 152 | 1 153 | 154 | 155 | 156 | 128 157 | 158 | 1 159 | eighth 160 | 1 161 | 162 | 163 | 164 | F 165 | 1 166 | 4 167 | 168 | 128 169 | 170 | 1 171 | eighth 172 | sharp 173 | up 174 | 1 175 | 176 | 177 | 178 | D 179 | 4 180 | 181 | 256 182 | 183 | 1 184 | quarter 185 | up 186 | 1 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 384 196 | 197 | 1 198 | quarter 199 | 200 | 1 201 | 202 | 203 | 204 | F 205 | 1 206 | 4 207 | 208 | 128 209 | 210 | 1 211 | eighth 212 | up 213 | 1 214 | 215 | 216 | 1024 217 | 218 | 219 | 220 | B 221 | 222 | minor-seventh 223 | 2 224 | 225 | 226 | 227 | B 228 | 2 229 | 230 | 256 231 | 232 | 2 233 | quarter 234 | up 235 | 2 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 256 245 | 246 | 2 247 | quarter 248 | 2 249 | 250 | 251 | 252 | 128 253 | 254 | 2 255 | eighth 256 | 2 257 | 258 | 259 | 260 | C 261 | 1 262 | 4 263 | 264 | 128 265 | 266 | 2 267 | eighth 268 | sharp 269 | down 270 | 2 271 | 272 | 273 | 274 | F 275 | 1 276 | 3 277 | 278 | 256 279 | 280 | 2 281 | quarter 282 | sharp 283 | down 284 | 2 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | C 298 | 1 299 | 4 300 | 301 | 256 302 | 303 | 1 304 | quarter 305 | sharp 306 | up 307 | 1 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 256 317 | 318 | 1 319 | quarter 320 | 1 321 | 322 | 323 | 324 | B 325 | 3 326 | 327 | 256 328 | 329 | 1 330 | quarter 331 | up 332 | 1 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | E 342 | 4 343 | 344 | 256 345 | 346 | 1 347 | quarter 348 | up 349 | 1 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 1024 358 | 359 | 360 | 361 | 128 362 | 363 | 2 364 | eighth 365 | 2 366 | 367 | 368 | 369 | E 370 | 3 371 | 372 | 128 373 | 374 | 2 375 | eighth 376 | down 377 | 2 378 | 379 | 380 | 381 | A 382 | 3 383 | 384 | 256 385 | 386 | 2 387 | quarter 388 | down 389 | 2 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 128 399 | 400 | 2 401 | eighth 402 | 2 403 | 404 | 405 | 406 | D 407 | 3 408 | 409 | 128 410 | 411 | 2 412 | eighth 413 | down 414 | 2 415 | 416 | 417 | 418 | 128 419 | 420 | 2 421 | eighth 422 | 2 423 | 424 | 425 | 426 | G 427 | 3 428 | 429 | 128 430 | 431 | 2 432 | eighth 433 | down 434 | 2 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 384 443 | 444 | 1 445 | quarter 446 | 447 | 1 448 | 449 | 450 | 451 | D 452 | 4 453 | 454 | 128 455 | 456 | 1 457 | eighth 458 | up 459 | 1 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 384 469 | 470 | 1 471 | quarter 472 | 473 | 1 474 | 475 | 476 | 477 | E 478 | 4 479 | 480 | 128 481 | 482 | 1 483 | eighth 484 | up 485 | 1 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 1024 494 | 495 | 496 | 497 | G 498 | 499 | dominant 500 | 501 | 11 502 | 1 503 | add 504 | 505 | 2 506 | 507 | 508 | 509 | 128 510 | 511 | 2 512 | eighth 513 | 2 514 | 515 | 516 | 517 | F 518 | 3 519 | 520 | 128 521 | 522 | 2 523 | eighth 524 | down 525 | 2 526 | 527 | 528 | 529 | G 530 | 3 531 | 532 | 256 533 | 534 | 2 535 | quarter 536 | down 537 | 2 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 128 547 | 548 | 2 549 | eighth 550 | 2 551 | 552 | 553 | 554 | D 555 | 3 556 | 557 | 128 558 | 559 | 2 560 | eighth 561 | down 562 | 2 563 | 564 | 565 | 566 | C 567 | 1 568 | 3 569 | 570 | 256 571 | 572 | 2 573 | quarter 574 | sharp 575 | up 576 | 2 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 512 590 | 591 | 1 592 | half 593 | 1 594 | 595 | 596 | 597 | A 598 | 4 599 | 600 | 256 601 | 602 | 1 603 | quarter 604 | up 605 | 1 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | B 615 | 4 616 | 617 | 256 618 | 619 | 1 620 | quarter 621 | down 622 | 1 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 1024 631 | 632 | 633 | 634 | 128 635 | 636 | 2 637 | eighth 638 | 2 639 | 640 | 641 | 642 | B 643 | 2 644 | 645 | 128 646 | 647 | 2 648 | eighth 649 | up 650 | 2 651 | 652 | 653 | 654 | F 655 | 2 656 | 657 | 256 658 | 659 | 2 660 | quarter 661 | up 662 | 2 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | F 672 | 3 673 | 674 | 256 675 | 676 | 2 677 | quarter 678 | down 679 | 2 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | G 689 | 3 690 | 691 | 256 692 | 693 | 2 694 | quarter 695 | down 696 | 2 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 22 710 | 0 711 | 712 | 130 713 | 714 | 715 | 65 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 256 725 | 726 | 1 727 | quarter 728 | 1 729 | 730 | 731 | 732 | C 733 | 5 734 | 735 | 64 736 | 737 | 1 738 | 16th 739 | down 740 | 1 741 | begin 742 | begin 743 | 744 | 745 | 746 | C 747 | 5 748 | 749 | 64 750 | 751 | 1 752 | 16th 753 | down 754 | 1 755 | end 756 | end 757 | 758 | 759 | 760 | 128 761 | 762 | 1 763 | eighth 764 | 1 765 | 766 | 767 | 768 | 512 769 | 770 | 1 771 | half 772 | 1 773 | 774 | 775 | 1024 776 | 777 | 778 | 779 | C 780 | 781 | major-seventh 782 | 783 | 11 784 | 1 785 | add 786 | 787 | 2 788 | 789 | 790 | 791 | 128 792 | 793 | 2 794 | eighth 795 | 2 796 | 797 | 798 | 799 | C 800 | 3 801 | 802 | 64 803 | 804 | 2 805 | 16th 806 | up 807 | 2 808 | begin 809 | begin 810 | 811 | 812 | 813 | C 814 | 3 815 | 816 | 64 817 | 818 | 2 819 | 16th 820 | up 821 | 2 822 | end 823 | end 824 | 825 | 826 | 827 | 256 828 | 829 | 2 830 | quarter 831 | 2 832 | 833 | 834 | 835 | F 836 | 1 837 | 3 838 | 839 | 128 840 | 841 | 2 842 | eighth 843 | sharp 844 | down 845 | 2 846 | begin 847 | 848 | 849 | 850 | G 851 | 3 852 | 853 | 128 854 | 855 | 2 856 | eighth 857 | down 858 | 2 859 | end 860 | 861 | 862 | 863 | F 864 | 1 865 | 3 866 | 867 | 128 868 | 869 | 2 870 | eighth 871 | down 872 | 2 873 | begin 874 | 875 | 876 | 877 | C 878 | 3 879 | 880 | 128 881 | 882 | 2 883 | eighth 884 | down 885 | 2 886 | end 887 | 888 | 889 | 890 | 891 | 892 | 893 | 894 | C 895 | 5 896 | 897 | 170 898 | 899 | 1 900 | quarter 901 | 902 | 3 903 | 2 904 | quarter 905 | 906 | down 907 | 1 908 | 909 | 910 | 911 | 912 | 913 | 914 | B 915 | 4 916 | 917 | 171 918 | 919 | 1 920 | quarter 921 | 922 | 3 923 | 2 924 | quarter 925 | 926 | down 927 | 1 928 | 929 | 930 | 931 | G 932 | 4 933 | 934 | 171 935 | 936 | 1 937 | quarter 938 | 939 | 3 940 | 2 941 | quarter 942 | 943 | up 944 | 1 945 | 946 | 947 | 948 | 949 | 950 | 951 | 512 952 | 953 | 1 954 | half 955 | 1 956 | 957 | 958 | 1024 959 | 960 | 961 | 962 | 512 963 | 964 | 2 965 | half 966 | 2 967 | 968 | 969 | 970 | F 971 | 1 972 | 3 973 | 974 | 170 975 | 976 | 2 977 | quarter 978 | sharp 979 | 980 | 3 981 | 2 982 | quarter 983 | 984 | down 985 | 2 986 | 987 | 988 | 989 | 990 | 991 | 992 | G 993 | 3 994 | 995 | 171 996 | 997 | 2 998 | quarter 999 | 1000 | 3 1001 | 2 1002 | quarter 1003 | 1004 | down 1005 | 2 1006 | 1007 | 1008 | 1009 | B 1010 | 3 1011 | 1012 | 171 1013 | 1014 | 2 1015 | quarter 1016 | 1017 | 3 1018 | 2 1019 | quarter 1020 | 1021 | down 1022 | 2 1023 | 1024 | 1025 | 1026 | 1027 | 1028 | 1029 | 1030 | 1031 | 1032 | 1033 | 128 1034 | 1035 | 1 1036 | eighth 1037 | 1 1038 | 1039 | 1040 | 1041 | G 1042 | 4 1043 | 1044 | 128 1045 | 1046 | 1 1047 | eighth 1048 | up 1049 | 1 1050 | 1051 | 1052 | 1053 | F 1054 | 1 1055 | 4 1056 | 1057 | 256 1058 | 1059 | 1 1060 | quarter 1061 | sharp 1062 | up 1063 | 1 1064 | 1065 | 1066 | 1067 | 1068 | 1069 | 1070 | 1071 | 1072 | 128 1073 | 1074 | 1 1075 | eighth 1076 | 1 1077 | 1078 | 1079 | 1080 | C 1081 | 1 1082 | 5 1083 | 1084 | 128 1085 | 1086 | 1 1087 | eighth 1088 | sharp 1089 | down 1090 | 1 1091 | 1092 | 1093 | 1094 | 256 1095 | 1096 | 1 1097 | quarter 1098 | 1 1099 | 1100 | 1101 | 1024 1102 | 1103 | 1104 | 1105 | F 1106 | 1 1107 | 1108 | dominant 1109 | 1110 | 9 1111 | -1 1112 | add 1113 | 1114 | 2 1115 | 1116 | 1117 | 1118 | A 1119 | 1 1120 | 3 1121 | 1122 | 256 1123 | 1124 | 2 1125 | quarter 1126 | sharp 1127 | down 1128 | 2 1129 | 1130 | 1131 | 1132 | 1133 | 1134 | 1135 | 1136 | 1137 | 128 1138 | 1139 | 2 1140 | eighth 1141 | 2 1142 | 1143 | 1144 | 1145 | E 1146 | 4 1147 | 1148 | 128 1149 | 1150 | 2 1151 | eighth 1152 | down 1153 | 2 1154 | 1155 | 1156 | 1157 | 384 1158 | 1159 | 2 1160 | quarter 1161 | 1162 | 2 1163 | 1164 | 1165 | 1166 | G 1167 | 3 1168 | 1169 | 128 1170 | 1171 | 2 1172 | eighth 1173 | down 1174 | 2 1175 | 1176 | 1177 | 1178 | 1179 | 1180 | 1181 | 1182 | 256 1183 | 1184 | 1 1185 | quarter 1186 | 1 1187 | 1188 | 1189 | 1190 | E 1191 | 4 1192 | 1193 | 256 1194 | 1195 | 1 1196 | quarter 1197 | up 1198 | 1 1199 | 1200 | 1201 | 1202 | 1203 | 1204 | 1205 | 1206 | 1207 | 128 1208 | 1209 | 1 1210 | eighth 1211 | 1 1212 | 1213 | 1214 | 1215 | A 1216 | 1 1217 | 4 1218 | 1219 | 384 1220 | 1221 | 1 1222 | quarter 1223 | 1224 | sharp 1225 | up 1226 | 1 1227 | 1228 | 1229 | 1230 | 1231 | 1232 | 1233 | 1234 | light-heavy 1235 | 1236 | 1237 | 1238 | 1024 1239 | 1240 | 1241 | 1242 | F 1243 | 1 1244 | 3 1245 | 1246 | 256 1247 | 1248 | 2 1249 | quarter 1250 | sharp 1251 | down 1252 | 2 1253 | 1254 | 1255 | 1256 | 1257 | 1258 | 1259 | 1260 | 1261 | 128 1262 | 1263 | 2 1264 | eighth 1265 | 2 1266 | 1267 | 1268 | 1269 | D 1270 | 3 1271 | 1272 | 128 1273 | 1274 | 2 1275 | eighth 1276 | down 1277 | 2 1278 | 1279 | 1280 | 1281 | C 1282 | 1 1283 | 3 1284 | 1285 | 128 1286 | 1287 | 2 1288 | eighth 1289 | sharp 1290 | up 1291 | 2 1292 | 1293 | 1294 | 1295 | F 1296 | 1 1297 | 2 1298 | 1299 | 384 1300 | 1301 | 2 1302 | quarter 1303 | 1304 | sharp 1305 | up 1306 | 2 1307 | 1308 | 1309 | 1310 | 1311 | 1312 | 1313 | 1314 | 1315 | 1316 | 1317 | 1318 | 1319 | 22 1320 | 0 1321 | 1322 | 130 1323 | 1324 | 1325 | 65 1326 | 1327 | 1328 | 1329 | 1330 | 1331 | 1332 | 1333 | 1334 | B 1335 | 1336 | 1 1337 | 1 1338 | 1339 | 1340 | heavy-light 1341 | 1342 | 1343 | 1344 | 1345 | B 1346 | 4 1347 | 1348 | 384 1349 | 1350 | 1 1351 | quarter 1352 | 1353 | down 1354 | 1 1355 | 1356 | 1357 | 1358 | A 1359 | 4 1360 | 1361 | 128 1362 | 1363 | 1364 | 1 1365 | eighth 1366 | up 1367 | 1 1368 | 1369 | 1370 | 1371 | 1372 | 1373 | 1374 | A 1375 | 4 1376 | 1377 | 256 1378 | 1379 | 1380 | 1 1381 | quarter 1382 | up 1383 | 1 1384 | 1385 | 1386 | 1387 | 1388 | 1389 | 1390 | G 1391 | 1 1392 | 4 1393 | 1394 | 256 1395 | 1396 | 1397 | 1 1398 | quarter 1399 | sharp 1400 | up 1401 | 1 1402 | 1403 | 1404 | 1405 | 1406 | 1407 | 1024 1408 | 1409 | 1410 | 1411 | F 1412 | 1413 | major-seventh 1414 | 1415 | 11 1416 | 1 1417 | add 1418 | 1419 | 2 1420 | 1421 | 1422 | 1423 | D 1424 | 3 1425 | 1426 | 256 1427 | 1428 | 2 1429 | quarter 1430 | none 1431 | slash 1432 | 2 1433 | 1434 | 1435 | 1436 | D 1437 | 3 1438 | 1439 | 256 1440 | 1441 | 2 1442 | quarter 1443 | none 1444 | slash 1445 | 2 1446 | 1447 | 1448 | 1449 | D 1450 | 3 1451 | 1452 | 256 1453 | 1454 | 2 1455 | quarter 1456 | none 1457 | slash 1458 | 2 1459 | 1460 | 1461 | 1462 | D 1463 | 3 1464 | 1465 | 256 1466 | 1467 | 1468 | 2 1469 | quarter 1470 | down 1471 | slash 1472 | 2 1473 | 1474 | 1475 | 1476 | 1477 | 1478 | 1479 | 1480 | 1481 | 1482 | 1483 | G 1484 | 1 1485 | 4 1486 | 1487 | 128 1488 | 1489 | 1490 | 1 1491 | eighth 1492 | up 1493 | 1 1494 | 1495 | 1496 | 1497 | 1498 | 1499 | 1500 | F 1501 | 1 1502 | 4 1503 | 1504 | 384 1505 | 1506 | 1 1507 | quarter 1508 | 1509 | sharp 1510 | up 1511 | 1 1512 | 1513 | 1514 | 1515 | E 1516 | 4 1517 | 1518 | 128 1519 | 1520 | 1 1521 | eighth 1522 | up 1523 | 1 1524 | 1525 | 1526 | 1527 | C 1528 | 1 1529 | 4 1530 | 1531 | 256 1532 | 1533 | 1 1534 | quarter 1535 | sharp 1536 | up 1537 | 1 1538 | 1539 | 1540 | 1541 | G 1542 | 4 1543 | 1544 | 128 1545 | 1546 | 1547 | 1 1548 | eighth 1549 | up 1550 | 1 1551 | 1552 | 1553 | 1554 | 1555 | 1556 | 1024 1557 | 1558 | 1559 | 1560 | A 1561 | 1562 | major-seventh 1563 | 2 1564 | 1565 | 1566 | 1567 | D 1568 | 3 1569 | 1570 | 256 1571 | 1572 | 1573 | 2 1574 | quarter 1575 | none 1576 | slash 1577 | 2 1578 | 1579 | 1580 | 1581 | 1582 | 1583 | 1584 | D 1585 | 3 1586 | 1587 | 256 1588 | 1589 | 2 1590 | quarter 1591 | none 1592 | slash 1593 | 2 1594 | 1595 | 1596 | 1597 | D 1598 | 3 1599 | 1600 | 256 1601 | 1602 | 2 1603 | quarter 1604 | none 1605 | slash 1606 | 2 1607 | 1608 | 1609 | 1610 | 128 1611 | 1612 | 2 1613 | eighth 1614 | 2 1615 | 1616 | 1617 | 1618 | E 1619 | -1 1620 | 3 1621 | 1622 | 128 1623 | 1624 | 1625 | 2 1626 | eighth 1627 | flat 1628 | down 1629 | 2 1630 | 1631 | 1632 | 1633 | 1634 | 1635 | 1636 | 1637 | 1638 | 1639 | 1640 | G 1641 | 4 1642 | 1643 | 1024 1644 | 1645 | 1646 | 1647 | 1 1648 | whole 1649 | 1 1650 | 1651 | 1652 | 1653 | 1654 | 1655 | 1656 | 1024 1657 | 1658 | 1659 | 1660 | E 1661 | -1 1662 | 1663 | dominant 1664 | 1665 | 11 1666 | 1 1667 | add 1668 | 1669 | 2 1670 | 1671 | 1672 | 1673 | E 1674 | -1 1675 | 3 1676 | 1677 | 384 1678 | 1679 | 1680 | 2 1681 | quarter 1682 | 1683 | down 1684 | 2 1685 | 1686 | 1687 | 1688 | 1689 | 1690 | 1691 | A 1692 | 2 1693 | 1694 | 128 1695 | 1696 | 2 1697 | eighth 1698 | up 1699 | 2 1700 | 1701 | 1702 | 1703 | D 1704 | -1 1705 | 3 1706 | 1707 | 128 1708 | 1709 | 2 1710 | eighth 1711 | flat 1712 | up 1713 | 2 1714 | begin 1715 | 1716 | 1717 | 1718 | C 1719 | 3 1720 | 1721 | 128 1722 | 1723 | 2 1724 | eighth 1725 | up 1726 | 2 1727 | end 1728 | 1729 | 1730 | 1731 | B 1732 | -1 1733 | 2 1734 | 1735 | 128 1736 | 1737 | 2 1738 | eighth 1739 | flat 1740 | up 1741 | 2 1742 | begin 1743 | 1744 | 1745 | 1746 | A 1747 | 2 1748 | 1749 | 128 1750 | 1751 | 2 1752 | eighth 1753 | up 1754 | 2 1755 | end 1756 | 1757 | 1758 | 1759 | 1760 | 1761 | 1762 | 1763 | G 1764 | 4 1765 | 1766 | 1024 1767 | 1768 | 1769 | 1 1770 | whole 1771 | 1 1772 | 1773 | 1774 | 1775 | 1776 | 1777 | 1024 1778 | 1779 | 1780 | 1781 | G 1782 | 2 1783 | 1784 | 128 1785 | 1786 | 2 1787 | eighth 1788 | up 1789 | 2 1790 | 1791 | 1792 | 1793 | E 1794 | -1 1795 | 3 1796 | 1797 | 896 1798 | 1799 | 2 1800 | half 1801 | 1802 | 1803 | flat 1804 | down 1805 | 2 1806 | 1807 | 1808 | 1809 | 1810 | 1811 | 1812 | 1813 | 22 1814 | 0 1815 | 1816 | 130 1817 | 1818 | 1819 | 65 1820 | 1821 | 1822 | 1823 | 1824 | 1825 | 1826 | 1827 | 1828 | B 1829 | 4 1830 | 1831 | 384 1832 | 1833 | 1 1834 | quarter 1835 | 1836 | down 1837 | 1 1838 | 1839 | 1840 | 1841 | A 1842 | 4 1843 | 1844 | 128 1845 | 1846 | 1847 | 1 1848 | eighth 1849 | up 1850 | 1 1851 | 1852 | 1853 | 1854 | 1855 | 1856 | 1857 | A 1858 | 4 1859 | 1860 | 256 1861 | 1862 | 1863 | 1 1864 | quarter 1865 | up 1866 | 1 1867 | 1868 | 1869 | 1870 | 1871 | 1872 | 1873 | G 1874 | 4 1875 | 1876 | 256 1877 | 1878 | 1879 | 1 1880 | quarter 1881 | up 1882 | 1 1883 | 1884 | 1885 | 1886 | 1887 | 1888 | 1024 1889 | 1890 | 1891 | 1892 | F 1893 | 1894 | major-seventh 1895 | 1896 | 11 1897 | 1 1898 | add 1899 | 1900 | 2 1901 | 1902 | 1903 | 1904 | D 1905 | 3 1906 | 1907 | 256 1908 | 1909 | 2 1910 | quarter 1911 | none 1912 | slash 1913 | 2 1914 | 1915 | 1916 | 1917 | D 1918 | 3 1919 | 1920 | 256 1921 | 1922 | 2 1923 | quarter 1924 | none 1925 | slash 1926 | 2 1927 | 1928 | 1929 | 1930 | D 1931 | 3 1932 | 1933 | 256 1934 | 1935 | 2 1936 | quarter 1937 | none 1938 | slash 1939 | 2 1940 | 1941 | 1942 | 1943 | D 1944 | 3 1945 | 1946 | 256 1947 | 1948 | 1949 | 2 1950 | quarter 1951 | down 1952 | slash 1953 | 2 1954 | 1955 | 1956 | 1957 | 1958 | 1959 | 1960 | 1961 | 1962 | 1963 | 1964 | G 1965 | 4 1966 | 1967 | 128 1968 | 1969 | 1970 | 1 1971 | eighth 1972 | up 1973 | 1 1974 | 1975 | 1976 | 1977 | 1978 | 1979 | 1980 | F 1981 | 4 1982 | 1983 | 384 1984 | 1985 | 1 1986 | quarter 1987 | 1988 | up 1989 | 1 1990 | 1991 | 1992 | 1993 | D 1994 | 4 1995 | 1996 | 128 1997 | 1998 | 1 1999 | eighth 2000 | up 2001 | 1 2002 | 2003 | 2004 | 2005 | B 2006 | 3 2007 | 2008 | 256 2009 | 2010 | 1 2011 | quarter 2012 | up 2013 | 1 2014 | 2015 | 2016 | 2017 | E 2018 | 4 2019 | 2020 | 128 2021 | 2022 | 2023 | 1 2024 | eighth 2025 | up 2026 | 1 2027 | 2028 | 2029 | 2030 | 2031 | 2032 | 1024 2033 | 2034 | 2035 | 2036 | B 2037 | 2038 | dominant 2039 | 2040 | 9 2041 | -1 2042 | add 2043 | 2044 | 2045 | 9 2046 | 1 2047 | add 2048 | 2049 | 2050 | 5 2051 | -1 2052 | alter 2053 | 2054 | 2055 | 5 2056 | 1 2057 | add 2058 | 2059 | 2 2060 | 2061 | 2062 | 2063 | D 2064 | 3 2065 | 2066 | 256 2067 | 2068 | 2069 | 2 2070 | quarter 2071 | none 2072 | slash 2073 | 2 2074 | 2075 | 2076 | 2077 | 2078 | 2079 | 2080 | D 2081 | 3 2082 | 2083 | 256 2084 | 2085 | 2 2086 | quarter 2087 | none 2088 | slash 2089 | 2 2090 | 2091 | 2092 | 2093 | D 2094 | 3 2095 | 2096 | 256 2097 | 2098 | 2 2099 | quarter 2100 | none 2101 | slash 2102 | 2 2103 | 2104 | 2105 | 2106 | 128 2107 | 2108 | 2 2109 | eighth 2110 | 2 2111 | 2112 | 2113 | 2114 | E 2115 | 2 2116 | 2117 | 128 2118 | 2119 | 2120 | 2 2121 | eighth 2122 | up 2123 | 2 2124 | 2125 | 2126 | 2127 | 2128 | 2129 | 2130 | 2131 | 2132 | 2133 | 2134 | 2135 | 2136 | 2137 | E 2138 | 4 2139 | 2140 | 1024 2141 | 2142 | 2143 | 2144 | 1 2145 | whole 2146 | 1 2147 | 2148 | 2149 | 2150 | 2151 | 2152 | 2153 | 1024 2154 | 2155 | 2156 | 2157 | E 2158 | 2159 | minor-seventh 2160 | 2 2161 | 2162 | 2163 | 2164 | E 2165 | 2 2166 | 2167 | 512 2168 | 2169 | 2170 | 2 2171 | half 2172 | up 2173 | 2 2174 | 2175 | 2176 | 2177 | 2178 | 2179 | 2180 | 128 2181 | 2182 | 2 2183 | eighth 2184 | 2 2185 | 2186 | 2187 | 2188 | D 2189 | 3 2190 | 2191 | 128 2192 | 2193 | 2 2194 | eighth 2195 | down 2196 | 2 2197 | 2198 | 2199 | 2200 | B 2201 | 2 2202 | 2203 | 128 2204 | 2205 | 2 2206 | eighth 2207 | up 2208 | 2 2209 | begin 2210 | 2211 | 2212 | 2213 | B 2214 | -1 2215 | 2 2216 | 2217 | 128 2218 | 2219 | 2220 | 2 2221 | eighth 2222 | flat 2223 | up 2224 | 2 2225 | end 2226 | 2227 | 2228 | 2229 | 2230 | 2231 | 2232 | 2233 | 2234 | 2235 | 2236 | E 2237 | 4 2238 | 2239 | 1024 2240 | 2241 | 2242 | 1 2243 | whole 2244 | 1 2245 | 2246 | 2247 | 2248 | 2249 | 2250 | light-heavy 2251 | 2252 | 2253 | 2254 | 2255 | 1024 2256 | 2257 | 2258 | 2259 | B 2260 | -1 2261 | 2262 | dominant 2263 | 2264 | 11 2265 | 1 2266 | add 2267 | 2268 | 2 2269 | 2270 | 2271 | 256 2272 | 2273 | 2274 | 2275 | A 2276 | 2277 | dominant 2278 | 2279 | 9 2280 | 1 2281 | add 2282 | 2283 | 2 2284 | 2285 | 2286 | 256 2287 | 2288 | 2289 | 2290 | B 2291 | -1 2292 | 2 2293 | 2294 | 128 2295 | 2296 | 2297 | 2 2298 | eighth 2299 | up 2300 | 2 2301 | begin 2302 | 2303 | 2304 | 2305 | 2306 | 2307 | 2308 | E 2309 | 3 2310 | 2311 | 128 2312 | 2313 | 2 2314 | eighth 2315 | up 2316 | 2 2317 | end 2318 | 2319 | 2320 | 2321 | A 2322 | 2 2323 | 2324 | 256 2325 | 2326 | 2327 | 2 2328 | quarter 2329 | up 2330 | 2 2331 | 2332 | 2333 | 2334 | 2335 | 2336 | 2337 | A 2338 | 2 2339 | 2340 | 128 2341 | 2342 | 2343 | 2 2344 | eighth 2345 | up 2346 | 2 2347 | 2348 | 2349 | 2350 | 2351 | 2352 | 2353 | G 2354 | 2 2355 | 2356 | 384 2357 | 2358 | 2 2359 | quarter 2360 | 2361 | up 2362 | 2 2363 | 2364 | 2365 | 2366 | 2367 | 2368 | 2369 | 2370 | 22 2371 | 0 2372 | 2373 | 130 2374 | 2375 | 2376 | 65 2377 | 2378 | 2379 | 2380 | 2381 | 2382 | 2383 | 2384 | 2385 | C 2386 | 2387 | 1 2388 | 1 2389 | 2390 | 2391 | heavy-light 2392 | 2393 | 2394 | 2395 | 2396 | 2397 | E 2398 | 4 2399 | 2400 | 1024 2401 | 2402 | 2403 | 1 2404 | whole 2405 | 1 2406 | 2407 | 2408 | 2409 | 2410 | 2411 | 2412 | 2413 | 2414 | 1024 2415 | 2416 | 2417 | 2418 | G 2419 | 2420 | major 2421 | 2422 | E 2423 | 2424 | 2 2425 | 2426 | 2427 | 2428 | D 2429 | 3 2430 | 2431 | 256 2432 | 2433 | 2 2434 | quarter 2435 | none 2436 | slash 2437 | 2 2438 | 2439 | 2440 | 2441 | D 2442 | 3 2443 | 2444 | 256 2445 | 2446 | 2 2447 | quarter 2448 | none 2449 | slash 2450 | 2 2451 | 2452 | 2453 | 2454 | D 2455 | 3 2456 | 2457 | 256 2458 | 2459 | 2 2460 | quarter 2461 | none 2462 | slash 2463 | 2 2464 | 2465 | 2466 | 2467 | D 2468 | 3 2469 | 2470 | 128 2471 | 2472 | 2 2473 | eighth 2474 | down 2475 | slash 2476 | 2 2477 | begin 2478 | 2479 | 2480 | 2481 | D 2482 | 3 2483 | 2484 | 128 2485 | 2486 | 2487 | 2 2488 | eighth 2489 | down 2490 | slash 2491 | 2 2492 | end 2493 | 2494 | 2495 | 2496 | 2497 | 2498 | 2499 | 2500 | 2501 | 2502 | 2503 | E 2504 | 4 2505 | 2506 | 1024 2507 | 2508 | 2509 | 2510 | 1 2511 | whole 2512 | 1 2513 | 2514 | 2515 | 2516 | 2517 | 2518 | 2519 | 1024 2520 | 2521 | 2522 | 2523 | G 2524 | -1 2525 | 2526 | major 2527 | 2528 | E 2529 | 2530 | 2 2531 | 2532 | 2533 | 2534 | D 2535 | 3 2536 | 2537 | 256 2538 | 2539 | 2540 | 2 2541 | quarter 2542 | none 2543 | slash 2544 | 2 2545 | 2546 | 2547 | 2548 | 2549 | 2550 | 2551 | D 2552 | 3 2553 | 2554 | 256 2555 | 2556 | 2 2557 | quarter 2558 | none 2559 | slash 2560 | 2 2561 | 2562 | 2563 | 2564 | D 2565 | 3 2566 | 2567 | 256 2568 | 2569 | 2 2570 | quarter 2571 | none 2572 | slash 2573 | 2 2574 | 2575 | 2576 | 2577 | D 2578 | 3 2579 | 2580 | 128 2581 | 2582 | 2 2583 | eighth 2584 | down 2585 | slash 2586 | 2 2587 | begin 2588 | 2589 | 2590 | 2591 | D 2592 | 3 2593 | 2594 | 128 2595 | 2596 | 2597 | 2 2598 | eighth 2599 | down 2600 | slash 2601 | 2 2602 | end 2603 | 2604 | 2605 | 2606 | 2607 | 2608 | 2609 | 2610 | 2611 | 2612 | 2613 | E 2614 | 4 2615 | 2616 | 1024 2617 | 2618 | 2619 | 2620 | 1 2621 | whole 2622 | 1 2623 | 2624 | 2625 | 2626 | 2627 | 2628 | 2629 | 1024 2630 | 2631 | 2632 | 2633 | F 2634 | 2635 | major 2636 | 2637 | E 2638 | 2639 | 2 2640 | 2641 | 2642 | 2643 | D 2644 | 3 2645 | 2646 | 256 2647 | 2648 | 2649 | 2 2650 | quarter 2651 | none 2652 | slash 2653 | 2 2654 | 2655 | 2656 | 2657 | 2658 | 2659 | 2660 | D 2661 | 3 2662 | 2663 | 256 2664 | 2665 | 2 2666 | quarter 2667 | none 2668 | slash 2669 | 2 2670 | 2671 | 2672 | 2673 | D 2674 | 3 2675 | 2676 | 256 2677 | 2678 | 2 2679 | quarter 2680 | none 2681 | slash 2682 | 2 2683 | 2684 | 2685 | 2686 | D 2687 | 3 2688 | 2689 | 128 2690 | 2691 | 2 2692 | eighth 2693 | down 2694 | slash 2695 | 2 2696 | begin 2697 | 2698 | 2699 | 2700 | D 2701 | 3 2702 | 2703 | 128 2704 | 2705 | 2706 | 2 2707 | eighth 2708 | down 2709 | slash 2710 | 2 2711 | end 2712 | 2713 | 2714 | 2715 | 2716 | 2717 | 2718 | 2719 | 2720 | 2721 | 2722 | 2723 | 2724 | 2725 | E 2726 | 4 2727 | 2728 | 1024 2729 | 2730 | 2731 | 1 2732 | whole 2733 | 1 2734 | 2735 | 2736 | 2737 | 2738 | 2739 | light-heavy 2740 | 2741 | 2742 | 2743 | 2744 | 1024 2745 | 2746 | 2747 | 2748 | E 2749 | 2750 | minor 2751 | 2 2752 | 2753 | 2754 | 2755 | D 2756 | 3 2757 | 2758 | 256 2759 | 2760 | 2761 | 2 2762 | quarter 2763 | none 2764 | slash 2765 | 2 2766 | 2767 | 2768 | 2769 | 2770 | 2771 | 2772 | D 2773 | 3 2774 | 2775 | 256 2776 | 2777 | 2 2778 | quarter 2779 | none 2780 | slash 2781 | 2 2782 | 2783 | 2784 | 2785 | D 2786 | 3 2787 | 2788 | 256 2789 | 2790 | 2 2791 | quarter 2792 | none 2793 | slash 2794 | 2 2795 | 2796 | 2797 | 2798 | D 2799 | 3 2800 | 2801 | 128 2802 | 2803 | 2 2804 | eighth 2805 | down 2806 | slash 2807 | 2 2808 | begin 2809 | 2810 | 2811 | 2812 | D 2813 | 3 2814 | 2815 | 128 2816 | 2817 | 2818 | 2 2819 | eighth 2820 | down 2821 | slash 2822 | 2 2823 | end 2824 | 2825 | 2826 | 2827 | 2828 | 2829 | 2830 | 2831 | 2832 | 2833 | 2834 | 2835 | 2836 | 2837 | E 2838 | 4 2839 | 2840 | 512 2841 | 2842 | 1 2843 | half 2844 | up 2845 | 1 2846 | 2847 | 2848 | 2849 | 128 2850 | 2851 | 1 2852 | eighth 2853 | 1 2854 | 2855 | 2856 | 2857 | Fine 2858 | 2859 | 1 2860 | 1 2861 | 2862 | 384 2863 | 2864 | 2865 | 2866 | 2867 | F 2868 | 1 2869 | 4 2870 | 2871 | 384 2872 | 2873 | 1 2874 | quarter 2875 | 2876 | sharp 2877 | up 2878 | 1 2879 | 2880 | 2881 | 2882 | 2883 | 2884 | 2885 | 2886 | light-heavy 2887 | 2888 | 2889 | 384 2890 | 2891 | 2892 | 2893 | F 2894 | 1 2895 | 2896 | dominant 2897 | 2898 | 9 2899 | -1 2900 | add 2901 | 2902 | 2 2903 | 2904 | 2905 | 640 2906 | 2907 | 2908 | 2909 | D 2910 | 3 2911 | 2912 | 256 2913 | 2914 | 2915 | 2 2916 | quarter 2917 | none 2918 | slash 2919 | 2 2920 | 2921 | 2922 | 2923 | 2924 | 2925 | 2926 | D 2927 | 3 2928 | 2929 | 256 2930 | 2931 | 2 2932 | quarter 2933 | none 2934 | slash 2935 | 2 2936 | 2937 | 2938 | 2939 | 128 2940 | 2941 | 2 2942 | eighth 2943 | 2 2944 | 2945 | 2946 | 2947 | D 2948 | 3 2949 | 2950 | 384 2951 | 2952 | 2 2953 | quarter 2954 | 2955 | down 2956 | slash 2957 | 2 2958 | 2959 | 2960 | 2961 | 2962 | 2963 | 2964 | 2965 | 2966 | 2967 | -------------------------------------------------------------------------------- /OpenSheetMusicDisplay-Swift-Example/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // OpenSheetMusicDisplay-Swift-Example 4 | // 5 | // Created by Massimo Biolcati on 11/29/20. 6 | // 7 | 8 | import UIKit 9 | 10 | class ViewController: UIViewController { 11 | 12 | @IBOutlet private var containerView: UIView! 13 | private var notationView: NotationView! 14 | 15 | override func viewDidLoad() { 16 | super.viewDidLoad() 17 | notationView = NotationView(containerView: containerView) 18 | 19 | let cursorMover = UIBarButtonItem(image: UIImage(systemName: "arrow.forward.square"), style: .plain, target: notationView, action: #selector(NotationView.cursorNext)) 20 | let scoreSelector = UIBarButtonItem(image: UIImage(systemName: "doc"), style: .plain, target: notationView, action: #selector(NotationView.switchScore)) 21 | navigationItem.leftBarButtonItems = [scoreSelector, cursorMover] 22 | 23 | let zoomIn = UIBarButtonItem(image: UIImage(systemName: "plus.magnifyingglass"), style: .plain, target: notationView, action: #selector(NotationView.changeZoomLevelPlus)) 24 | let zoomOut = UIBarButtonItem(image: UIImage(systemName: "minus.magnifyingglass"), style: .plain, target: notationView, action: #selector(NotationView.changeZoomLevelMinus)) 25 | navigationItem.rightBarButtonItems = [zoomIn, zoomOut] 26 | 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # OpenSheetMusicDisplay-Swift-Example 2 | An example of how to run OpenSheetMusicDisplay inside a WKWebView to display a MusicXML score 3 | 4 | [OpenSheetMusicDisplay](https://opensheetmusicdisplay.github.io) is a JavaScript library that renders music notation of MusicXML files in the browser and it's built on top of [VexFlow](https://www.vexflow.com). 5 | 6 | This is a demo implementation in Swift that works on iOS and macOS-Catalyst by running JavaScript in a `WKWebView` and uses OSMD version [0.8.7](https://github.com/opensheetmusicdisplay/opensheetmusicdisplay/releases/tag/0.8.7) 7 | 8 | OSMD doesn't [yet](https://opensheetmusicdisplay.org/2019/12/05/audio-player-is-coming-in-2020/) support audio playback but you can add separate audio player and [sync the cursor to music](https://github.com/opensheetmusicdisplay/opensheetmusicdisplay/wiki/Tutorial:-Extracting-note-timing-for-playing). 9 | 10 | I haven't figured out how to transpose or export the charts as an image or PDF. 11 | Also I wonder if there is a more elegant way to deal with JavaScript, perhaps using [JavaScriptCore](https://developer.apple.com/documentation/javascriptcore)? 12 | 13 | If you know about any of the above or have other ideas, contributions are welcome. 14 | 15 | ![App Image](example.png?) 16 | -------------------------------------------------------------------------------- /example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massimobio/OpenSheetMusicDisplay-Swift-Example/cf3bdbf2dac63ac39e7e8154733511968f482434/example.png --------------------------------------------------------------------------------