diff --git a/.DS_Store b/.DS_Store index 092ccc8..b816989 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/English.lproj/VLDocument.xib b/English.lproj/VLDocument.xib index 022a33c..0466d09 100644 --- a/English.lproj/VLDocument.xib +++ b/English.lproj/VLDocument.xib @@ -1,7271 +1,1234 @@ - - - 1070 - 14C109 - 7519 - 1344.72 - 757.30 - - com.apple.InterfaceBuilder.CocoaPlugin - 7519 - - - NSBox - NSButton - NSButtonCell - NSComboBox - NSComboBoxCell - NSCustomObject - NSCustomView - NSMenu - NSMenuItem - NSNumberFormatter - NSPopUpButton - NSPopUpButtonCell - NSProgressIndicator - NSScrollView - NSScroller - NSStepper - NSStepperCell - NSTableColumn - NSTableHeaderView - NSTableView - NSTextField - NSTextFieldCell - NSToolbar - NSToolbarFlexibleSpaceItem - NSToolbarItem - NSToolbarSpaceItem - NSUserDefaultsController - NSView - NSWindowTemplate - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - VLSheetWindow - - - FirstResponder - - - 15 - 2 - {{25, 304}, {971, 397}} - 1886912512 - Window - NSWindow - - - E740CC27-9C7E-4EAB-BF3D-81063362B3D3 - - - YES - YES - YES - NO - 1 - 1 - - - - 090F43F9-8231-43FE-922E-78ACFD149536 - - Preview - Preview - - - - NSImage - vlsong - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - 15BF1B1C-EB04-4D37-B74C-B24F5776A0AF - - - Progress - - - - 1292 - {{19, 14}, {16, 16}} - _NS:3954 - 28938 - 100 - - - - - {16, 16} - {16, 16} - YES - NO - -1 - YES - 0 - - - - 30E4DC32-DB89-4CFC-9F5D-D2D86BC93115 - - Play - Play - - - - NSImage - play - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - 4D42D89B-0099-40D5-916B-59940F715C41 - - Settings - Settings - - - - NSImage - display - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - 4FD2C68B-58C8-493C-8935-78D2E689B16F - - Slow - Slow - - - - 268 - {{0, 14}, {32, 32}} - _NS:1491 - YES - - 67633152 - 134217728 - - - YES - 13 - 1044 - - _NS:1491 - - -2042347520 - 134 - - NSImage - slow - - - - 400 - 75 - - NO - - - - - {32, 32} - {32, 32} - YES - YES - 0 - YES - 0 - - - - 737868E5-40A9-4B03-B2FD-E67F9EE16B2B - - In - Zoom In - - - - NSImage - zoomin - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - 77A31E50-1A2C-448A-A34C-424E366D478D - - Console - Console - - - - NSImage - console - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - 889E794D-914E-4969-8960-2CCF7C710455 - - Out - Zoom Out - - - - NSImage - zoomout - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - D63103EB-B919-45DD-827C-807BA0DB9509 - - >> - >> - - - - 268 - {{0, 14}, {32, 32}} - _NS:1491 - 1 - YES - - 67633152 - 134217728 - - - _NS:1491 - - -2042347520 - 134 - - NSImage - fwd - - - - 400 - 75 - - NO - - - - - {32, 32} - {32, 32} - YES - YES - 1 - YES - 0 - - - - F5E49E9C-6F16-4D08-9781-4AF5849DD18F - - << - << - - - - 268 - {{0, 14}, {32, 32}} - _NS:1491 - -1 - YES - - 67633152 - 134217728 - - - _NS:1491 - - -2042347520 - 134 - - NSImage - bck - - - - 400 - 75 - - NO - - - - - {32, 32} - {32, 32} - YES - YES - -1 - YES - 0 - - - NSToolbarFlexibleSpaceItem - - Flexible Space - - - - - - {1, 5} - {20000, 32} - YES - YES - -1 - YES - 0 - - YES - YES - - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - - - - NSToolbarPrintItem - Print - Print - Print - - - NSImage - NSToolbarPrint - - - printDocument: - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - NSToolbarSpaceItem - - Space - - - - - - {32, 5} - {32, 10000} - YES - YES - -1 - YES - 0 - - YES - YES - - - 1048576 - 2147483647 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {890, 350} - - - 256 - - - - 266 - - - - 274 - - - - 265 - {{656, 42}, {82, 26}} - - - - YES - - -2076180416 - 16779264 - - - 109199360 - 1 - - LucidaGrande - 13 - 16 - - - - - - 400 - 75 - - - YES - YES - - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - - OtherViews - - - - - C - - 1048576 - 2147483647 - - - _popUpItemAction: - 1 - - - - - YES - YES - - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - F - - 1048576 - 2147483647 - - - _popUpItemAction: - -255 - - - - - Bâ™­ - - 1048576 - 2147483647 - - - _popUpItemAction: - -511 - - - - - Eâ™­ - - 1048576 - 2147483647 - - - _popUpItemAction: - -767 - - - - - Aâ™­ - - 1048576 - 2147483647 - - - _popUpItemAction: - -1023 - - - - - Dâ™­ - - 1048576 - 2147483647 - - - _popUpItemAction: - -1279 - - - - - Gâ™­ - - 1048576 - 2147483647 - - - _popUpItemAction: - -1535 - - - - - - G - - 1048576 - 2147483647 - - - _popUpItemAction: - 257 - - - - - D - - 1048576 - 2147483647 - - - _popUpItemAction: - 513 - - - - - A - - 1048576 - 2147483647 - - - _popUpItemAction: - 769 - - - - - E - - 1048576 - 2147483647 - - - _popUpItemAction: - 1025 - - - - - B - - 1048576 - 2147483647 - - - _popUpItemAction: - 1281 - - - - - F# - - 1048576 - 2147483647 - - - _popUpItemAction: - 1537 - - - - - YES - YES - - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Am - - 1048576 - 2147483647 - - - _popUpItemAction: - 255 - - - - - YES - YES - - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Dm - - 1048576 - 2147483647 - - - _popUpItemAction: - -1 - - - - - Gm - - 1048576 - 2147483647 - - - _popUpItemAction: - -257 - - - - - Cm - - 1048576 - 2147483647 - - - _popUpItemAction: - -513 - - - - - Fm - - 1048576 - 2147483647 - - - _popUpItemAction: - -769 - - - - - Bâ™­m - - 1048576 - 2147483647 - - - _popUpItemAction: - -1025 - - - - - Eâ™­m - - 1048576 - 2147483647 - - - _popUpItemAction: - -1281 - - - - - YES - YES - - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Em - - 1048576 - 2147483647 - - - _popUpItemAction: - 511 - - - - - Bm - - 1048576 - 2147483647 - - - _popUpItemAction: - 767 - - - - - F#m - - 1048576 - 2147483647 - - - _popUpItemAction: - 1023 - - - - - C#m - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - 1279 - - - - - G#m - - 1048576 - 2147483647 - - - _popUpItemAction: - 1535 - - - - - D#m - - 1048576 - 2147483647 - - - _popUpItemAction: - 1791 - - - - - 28 - 3 - YES - YES - 1 - - NO - - - - 265 - {{740, 42}, {91, 26}} - - - - YES - - -2076180416 - 16779264 - - - 109199360 - 1 - - - - - - 400 - 75 - - - 4/4 - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - 1028 - - - YES - - - OtherViews - - - - - - 6/8 - - 1048576 - 2147483647 - - - _popUpItemAction: - 1544 - - - - - 3/4 - - 1048576 - 2147483647 - - - _popUpItemAction: - 772 - - - - - 12/8 - - 1048576 - 2147483647 - - - _popUpItemAction: - 3080 - - - - - 5/4 - - 1048576 - 2147483647 - - - _popUpItemAction: - 1284 - - - - - 3 - YES - YES - 1 - - NO - - - - 265 - {{833, 42}, {130, 26}} - - - - YES - - -2076180416 - 16779264 - - - 109199360 - 1 - - - - - - 400 - 75 - - - 12 - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - 12 - - - YES - - - OtherViews - - - - - 2 (Straight) - - 1048576 - 2147483647 - - - _popUpItemAction: - 2 - - - - - 3 (Swing) - - 1048576 - 2147483647 - - - _popUpItemAction: - 3 - - - - - 4 (Sixteenths) - - 1048576 - 2147483647 - - - _popUpItemAction: - 4 - - - - - 6 - - 1048576 - 2147483647 - - - _popUpItemAction: - 6 - - - - - 8 - - 1048576 - 2147483647 - - - _popUpItemAction: - 8 - - - - - - 5 - 3 - YES - YES - 1 - - NO - - - - 256 - {{92, 45}, {350, 22}} - - - - YES - - -1804599231 - 272630784 - Softly, As In A Morning Sunrise - - - YES - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 6 - System - textColor - - 3 - MAA - - - - NO - 1 - - - - 256 - {{13, 47}, {54, 17}} - - - - YES - - 67108864 - 272629760 - VGl0bGU6Cg - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - NO - 1 - - - - 256 - {{13, 22}, {114, 17}} - - - - YES - - 67108864 - 272629760 - Q29tcG9zZXI6Cg - - - - - - NO - 1 - - - - 256 - {{92, 20}, {142, 22}} - - - - YES - - -1804599231 - 272630784 - Dizzy Gillespie - - - YES - - - - NO - 1 - - - - 256 - {{246, 22}, {57, 17}} - - - - YES - - 67108864 - 272629760 - Lyricist: - - - - - - NO - 1 - - - - 256 - {{300, 20}, {142, 22}} - - - - YES - - -1804599231 - 272630784 - Dizzy Gillespie - - - YES - - - - NO - 1 - - - - 256 - {{447, 47}, {57, 17}} - - - - YES - - 67108864 - 272629760 - Tempo: - - - - - - NO - 1 - - - - 256 - {{501, 45}, {33, 22}} - - - - YES - - -1804599231 - 272630784 - 276 - - - YES - - - - NO - 1 - - - - 256 - {{539, 42}, {19, 27}} - - - - YES - - 786464 - 0 - - 20 - 20 - 300 - 1 - YES - YES - - NO - - - - 256 - {{447, 22}, {57, 17}} - - - - YES - - 67108864 - 272629760 - R3Jvb3ZlOgo - - - - - - NO - 1 - - - - 256 - {{498, 18}, {130, 26}} - - - - YES - - -2076180416 - 2048 - - - 109199360 - 1 - - - - - - 400 - 75 - - - Select... - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - 1 - - - YES - - - OtherViews - - - - - - YES - YES - - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Swing - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - BossaNova - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 3 - YES - YES - 1 - - NO - - - {989, 80} - - - - - - {{-3, 319}, {989, 80}} - - - - {0, 0} - - 67108864 - 0 - Title - - YES - 11 - 3100 - - - - 6 - System - labelColor - - - - - 0 - 3 - 0 - NO - - - - 274 - - - - 2066 - - - - 274 - {988, 328} - - - - VLSheetView - NSView - - - {{1, 1}, {969, 343}} - - - - - - 4 - YES - - - - 256 - {{954, 1}, {16, 343}} - - - NO - _doScroller: - - - _doScroller: - 1 - 0.25609759999999998 - - - - 256 - {{1, 328}, {969, 16}} - - - - YES - NO - _doScroller: - - 1 - - _doScroller: - 0.98076923076923073 - - - {{0, -17}, {971, 345}} - - - - 133298 - - - - 0.25 - 4 - 1 - - - - -2147483382 - - - - 274 - - - - 258 - {{10, 6}, {271, 22}} - - - - YES - - -1804599231 - 138413056 - - - - YES - - - - NO - 1 - - - - 257 - {{289, 4}, {19, 23}} - - - - YES - - 67108864 - 134217728 - √ - - YES - 13 - 2072 - - - -2038022144 - 32 - - - - 400 - 75 - - NO - - - - 257 - {{311, 4}, {19, 23}} - - - - YES - - 67108864 - 134217728 - X - - - -2038022144 - 32 - - - - 400 - 75 - - NO - - - {336, 37} - - - - - - {{627, 330}, {336, 37}} - - - - {0, 0} - - 67108864 - 0 - Field Editor - - - - - - 0 - 3 - 0 - NO - - - {971, 397} - - - - - {{0, 0}, {1440, 878}} - {890, 428} - {10000000000000, 10000000000000} - 128 - YES - - - 7 - 2 - {{515, 195}, {338, 127}} - 1886912512 - Window - - NSWindow - - - View - - - {213, 107} - - - 256 - - - - 256 - {{17, 90}, {208, 17}} - - YES - - 67108864 - 272629760 - UmVwZWF0IG1lYXN1cmVzIDEgdGhvdWdoIDE0Cg - - - - - - NO - 1 - - - - 256 - {{20, 60}, {27, 22}} - - YES - - -1804599231 - -1874852864 - 2 - - - - - - 0 - - - . - - ' - - 0 - 1 - NO - YES - 1 - EAAAAAAAAAAAAAAAAAAAAA - - - 0 - 1 - NO - YES - 1 - AgAAAAAAAAAAAAAAAAAAAA - - -0 - -∞ - - 0 - +∞ - - - 0 - -0 - - - - - - - - NaN - - - - - - . - ' - NO - YES - YES - - - YES - - - - NO - 1 - - - - 256 - {{52, 57}, {19, 27}} - - YES - - 786464 - 0 - - 2 - 2 - 16 - 1 - YES - - NO - - - - 256 - {{73, 65}, {114, 17}} - - YES - - 67108864 - 272629760 - times. - - - - - - NO - 1 - - - - 256 - {{14, 12}, {121, 32}} - - 1002 - YES - - 67108864 - 134217728 - Don't Repeat - - - 1002 - -2038284288 - 1 - - -  - 200 - 25 - - NO - - - - 256 - {{159, 12}, {82, 32}} - - 1001 - YES - - 67108864 - 134217728 - Cancel - - - 1001 - -2038284288 - 1 - - - Gw - 200 - 25 - - NO - - - - 256 - {{241, 12}, {83, 32}} - - 1000 - YES - - -2080374784 - 134217728 - Repeat - - - 1000 - -2038284288 - 1 - - - DQ - 200 - 25 - - NO - - - {338, 127} - - {{0, 0}, {1440, 878}} - {213, 129} - {10000000000000, 10000000000000} - YES - - - 7 - 2 - {{503, 135}, {372, 142}} - 1886912512 - Window - NSWindow - - View - - - {213, 107} - - - 256 - - - - 256 - {{17, 105}, {354, 17}} - - YES - - 67108864 - 272629760 - RW5kaW5nIGluIG1lYXN1cmVzIDEgdGhyb3VnaCAxMCBhcHBsaWVzIHRvIHJlcGVhdHM6Cg - - - - - - NO - 1 - - - - 256 - {{14, 12}, {128, 32}} - - 1002 - YES - - 67108864 - 134217728 - Delete Ending - - - 1002 - -2038284288 - 1 - - -  - 200 - 25 - - NO - - - - 256 - {{163, 12}, {82, 32}} - - 1001 - YES - - 67108864 - 134217728 - Cancel - - - 1001 - -2038284288 - 1 - - - Gw - 200 - 25 - - NO - - - - 256 - {{245, 12}, {113, 32}} - - 1000 - YES - - -2080374784 - 134217728 - Add Ending - - - 1000 - -2038284288 - 1 - - - DQ - 200 - 25 - - NO - - - - 256 - - - - 2304 - - - - 256 - {184, 19} - - YES - NO - YES - - - 256 - {184, 17} - - - - - - 256 - {{-26, 0}, {16, 17}} - - - - 1 - 20 - 20 - 20 - - 75497536 - 134219776 - 1 - - - 3 - MC4zMzMzMzI5OQA - - - 6 - System - headerTextColor - - - - - 67108864 - 0 - - - YES - 12 - 4883 - - - 1211912448 - 2 - - 549453824 - {18, 18} - - - - - - TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAADAAAAAwAAAAMAAAAD -AAAAAwAAAAMAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABE1NTW4ZmZm/29vb/9zc3P/ -c3Nz/3Jycv9ycnL/cnJy/3Jycv9vb2//ZWVl/yUlJZ8AAAAiAAAAAAAAAAAAAAAAAAAAAkNDQ5W3t7f/ -+fn5//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz/+fn5/8DAwP9UVFS7AAAAAgAAAAAAAAAB -AAAACJGRkf/c3Nz/8/Pz//T09P/19fX/9fX1//T09P/09PT/9PT0//T09P/09PT/8/Pz/97e3v+JiYn/ -AAAACAAAAAEAAAABAAAAEIGBgf/f39//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//u7u7/ -7u7u/9/f3/+SkpL/AAAAEAAAAAEAAAABAAAAFZGRkf/d3d3/7Ozs/+zs7P/t7e3/7e3t/+3t7f/t7e3/ -7Ozs/+7u7v/t7e3/7Ozs/9/f3/+QkJD/AAAAFAAAAAEAAAABAAAAGJ6env/b29v/6enp/+np6f/q6ur/ -6+vr/+rq6v/q6ur/6urq/+rq6v/q6ur/6Ojo/9jY2P+bm5v/AAAAGAAAAAEAAAABAAAAG6CgoP/T09P/ -2tra/9ra2v/b29v/29vb/9vb2//Z2dn/29vb/9nZ2f/a2tr/2tra/9HR0f+ioqL/AAAAGwAAAAEAAAAB -AAAAHKurq//a2tr/39/f/9/f3//g4OD/4ODg/+Dg4P/h4eH/39/f/9/f3//f39//4ODg/9fX1/+mpqb/ -AAAAHAAAAAEAAAACAAAAHrS0tP/j4+P/5ubm/+Xl5f/m5ub/5+fn/+fn5//n5+f/6enp/+fn5//n5+f/ -6Ojo/93d3f+tra3/AAAAHgAAAAIAAAACAAAAILi4uP/p6en/7e3t//Dw8P/w8PD/8PDw/+3t7f/t7e3/ -8fHx/+zs7P/v7+//7e3t/+bm5v+0tLT/AAAAIAAAAAIAAAABAAAAILu7u//v7+//9/f3//b29v/4+Pj/ -9vb2//b29v/29vb/9/f3//f39//39/f/9/f3//Dw8P+7u7v/AAAAIAAAAAEAAAABAAAAHY2Njej4+Pj/ -/////////////////////////////////////////////////v7+//n5+f+Tk5PoAAAAHQAAAAEAAAAB -AAAAEjo6Oq28vLz3/////////////////////////////////////////////////////7u7u/c/Pz+r -AAAAEgAAAAEAAAAAAAAACAAAAEEAAACZAAAAxgAAANMAAADVAAAA1gAAANQAAADWAAAA2AAAANgAAADT -AAAAxQAAAJkAAABBAAAACAAAAAAAAAAAAAAAAgAAAA0AAAAlAAAANgAAAEEAAABDAAAAQwAAAEMAAABE -AAAAQwAAAEQAAABBAAAANgAAACUAAAANAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAYAAAAG -AAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAAAwAAAAMAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAA+4AAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAPuGFw -cGwCAAAAbW50clJHQiBYWVogB9YADAAHABEAFQAbYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAPbWAAEAAAAA0y1hcHBsJNLJy134Mnx572GDPUg6gwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAA -AXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAYSbmRpbgAA -B+wAAAY+ZGVzYwAADiwAAABkZHNjbQAADpAAAADQbW1vZAAAD2AAAAAoY3BydAAAD4gAAAAtWFlaIAAA -AAAAAFt8AAA0xwAABrNYWVogAAAAAAAAc8UAALNEAAAe9FhZWiAAAAAAAAAnlAAAGBAAAK1+WFlaIAAA -AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1 -cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD -AQAAAgAAAYUDGgSmBjEHuQlGCtEMXA3sD28Q+BKDFBMVmhckGKsaNBu3HTwewyBHIcYjSCTEJkYnvyk5 -KrAsKC2aLw0wejHlM080szYZN3c41DovO4U82j4sP3hAwUIKQ1BEkEXORwtIQ0l7Sq9L4k0RTj9Pa1CV -Ub5S5VQLVTBWU1d1WJZZtlrWW/NdEV4vX0tgaGGDYp5juWTSZexnBWgeaTZqTWtlbHttkW6lb7lwzHHe -cu9z/3UNdht3J3gyeTt6Q3tKfE99UX5Tf1OAUYFNgkeDQIQ3hS2GIIcSiAOI8onfisuLtoyfjYeObo9T -kDeRGpH8kt6TvpSdlXuWWZc1mBGY7JnHmqGbepxTnSqeAp7Zn6+ghaFaoi6jAqPWpKmlfKZOpyCn8qjD -qZSqY6szrAOs0q2hrm+vPbALsNixprJzs0C0DLTYtaS2cLc7uAe40rmdume7Mrv8vMe9kb5avyO/7cC2 -wX7CR8MPw9fEn8Vnxi7G9ce8yILJSMoOytPLmMxdzSHN5c6pz2zQL9Dy0bXSd9M40/rUu9V81jzW/de8 -2HzZO9n72rrbeNw33PbdtN5z3zLf8eCx4XHiMuLz47XkeOU95gLmyeeS6FzpJ+n16sXrl+xs7UPuHO73 -79bwt/Gb8oLza/RX9UX2Nfco+Bz5E/oM+wb8APz7/fr++v//AAABWwLzBGwF7QdpCOMKVwvVDUsOyBA+ -EbcTLRSpFhsXkxkIGn8b8x1lHtUgSSG1IyQkjyX4J2AoxiorK4os6S5GL50w8zJGM5c04zYuN3Q4tzn1 -OzI8bD2hPtNABEEwQlpDf0SjRcVG40f/SRpKMktHTFtNbE58T4xQmVGmUrFTvVTGVc5W11ffWOZZ7lr0 -W/pdAV4GXwxgEmEYYh1jImQnZSxmMmc2aDppP2pDa0ZsSW1Lbk5vT3BQcVByT3NOdEx1SHZEdz94OXkx -eih7H3wUfQh9+37tf96AzoG9gquDl4SDhW2GVoc/iCaJDInyiteLuoyejYCOYY9CkCGRAJHekryTmZR1 -lVGWLJcGl+CYuZmSmmqbQpwZnPCdx56dn3OgSaEeofSiyaOepHKlR6YcpvCnxaiZqW6qQqsWq+uswK2U -rmivPbASsOaxu7KQs2W0OrUQteW2ureQuGa5PboTuuq7wLyXvW++R78fv/jA0sGswobDYcQ9xRnF9sbU -x7LIkslyylPLNcwYzPzN4c7Hz67QltF/0mnTVNRA1S7WHNcL1/vY7Nnf2tLbxty63bDept+c4JPhiuKB -43jkb+Vm5lznUehG6TrqLOse7A7s/O3o7tLvuvCf8YPyZPNC9B/0+fXP9qT3dvhG+RT54Pqp+3D8N/z9 -/cH+g/9D//8AAAEDAiwDPwRVBW0GigehCLkJzwrnDAINFw4tD0AQWBFtEoETkxSoFbsWzRfeGO8Z/xsN -HBsdKB4yHzkgQSFJIksjTiRQJU4mSidFKD0pNConKxgsCSz0Ld8uxy+tMJExczJTMzA0CjTjNbs2kDdk -ODg5BznWOqQ7cTw+PQc90D6ZP2FAKUDvQbVCe0NBRAVEykWPRlNHF0fcSKBJZEopSu5Lskx3TT1OAU7G -T4xQU1EYUd5SpVNsVDNU+lXBVolXUVgZWOFZqlpyWztcBFzNXZZeYF8qX/RgvmGJYlNjHmPqZLZlgmZO -Zxpn52i0aYFqT2sca+psuG2GblRvIm/xcL9xjnJbcylz93TFdZN2YHctd/l4xXmRel17J3vxfLt9hX5N -fxV/3YCkgWqCMIL1g7qEfoVChgWGx4eKiEuJDYnOio+LT4wPjM6Njo5Ojw2PzZCMkUySC5LLk4qUSpUK -lcuWjJdNmA6Y0JmTmlabGZvdnKGdZ54tnvSfu6CDoUyiFqLho6ykeaVHpham5qe3qIqpXqo0qwur5Ky/ -rZyufK9fsEOxK7IWswWz+LTvteu27LfzuQG6FbswvFO9fr6yv/HBOsKNw+zFWMbOyFXJ5suIzTnO99DE -0qLUj9aL2Jfas9zb3xXhXeOx5hLoger47XvwB/Kf9TP30vp7/TL//wAAbmRpbgAAAAAAAAY2AACXkQAA -WLgAAFVBAACMFQAAKFcAABaoAABQDQAAVDkAAvCjAAK1wgABqPUAAwEAAAIAAAABAAUACgARABkAIwAv -ADsASQBZAGkAewCOAKIAuADPAOcBAAEaATUBUgFvAY4BrgHPAfECFQI5Al8ChQKtAtYDAAMsA1gDhgO1 -A+QEFgRIBHwEsQTnBR4FVwWRBcwGCQZIBocGyAcLB08HlAfcCCQIbwi7CQkJWAmpCfwKUQqoCwELWwu3 -DBYMdgzZDT0NpA4MDncO4w9SD8MQNhCrESIRmxIWEpMTEhOTFBYUmxUiFasWNRbCF1EX4RhzGQcZnBo0 -Gs0baBwFHKQdRB3mHoofMB/YIIEhLSHaIoojOyPvJKUlXSYXJtQnkyhUKRkp3yqpK3UsRC0WLewuxC+f -MH4xYDJGMy80HDUMNgA2+DfzOPI59Tr7PAY9FD4mPztAVUFyQpJDt0TfRgpHOUhsSaJK3EwZTVlOnU/l -US9SfVPPVSRWfFfYWTdamVv/XWhe1WBEYbhjLmSnZiRnpWkoaq9sOG3Fb1Vw6XJ/dBh1tXdUePd6nXxG -ffF/oIFSgwiEwIZ8iDuJ/YvCjYuPV5EnkvqU0ZasmIqaa5xRnjqgJ6IXpAymBKgAqgCsBK4LsBeyJrQ4 -tk64aLqEvKO+xMDnwwvFMMdWyXvLn83Bz+HR/dQX1i3YPtpK3FHeVOBS4krkPuYt6Bfp/uvg7b/vm/F1 -80z1IPby+Mj6m/xr/jn//wAAAAIABQALABIAHAAmADIAQABPAGAAcgCFAJoAsADHAOAA+gEVATIBTwFu -AY8BsAHTAfcCHAJCAmoCkwK9AukDFQNDA3MDowPVBAgEPQRzBKoE4wUdBVkFlgXVBhUGVwabBuAHJwdv -B7oIBghUCKQI9glKCaEJ+QpTCrALDwtwC9MMOQyhDQwNeQ3oDloOzw9GD78QOxC6ETsRvxJFEs0TWBPl -FHUVBhWaFjEWyRdkGAAYnxk/GeIahxstG9YcgB0sHdoeih88H/AgpSFcIhYi0SOOJE0lDyXSJpgnXygp -KPUpxCqVK2gsPi0XLfIu0C+xMJUxfDJlM1I0QjU1Nis3JDggOSA6IzspPDM9QD5QP2RAe0GVQrND1ET4 -RiBHS0h6SaxK4UwaTVZOlU/YUR5SZ1O0VQRWV1etWQZaYlvBXSNeh1/vYVlixmQ1ZadnG2iSagtrh20E -boRwB3GLcxJ0m3Ymd7N5QnrTfGZ9/H+TgSuCxoRihgCHoIlAiuKMho4qj8+RdZMclMOWa5gUmb2bZp0P -nrigYaIKo7OlXKcFqK2qVqv+raWvTbD0spu0QrXpt4+5NrrdvIS+LL/UwX3DJ8TSxn/ILsney5HNR87/ -0LvSe9Q/1gfX1dmo24LdYt9K4TnjMOUv5zfpSutl7YrvufHx9DP2fvjN+yX9iP//AAAAAwAJABMAIAAw -AEIAVwBvAIkApgDFAOYBCgEwAVkBgwGwAd8CEQJFAnoCswLtAyoDaQOqA+4ENAR8BMcFFQVlBbcGDQZl -Br8HHQd+B+IISQizCSEJkgoGCn8K+wt7C/8Mhw0TDaQOOQ7SD3AQEhC4EWQSExLHE38UPBT9FcIWixdY -GCkY/RnWGrEbkRxzHVkeQh8tIBwhDiICIvoj9CTwJfAm8if2KP0qBysULCMtNC5IL18weDGUMrIz0zT1 -Nhs3QzhtOZk6xzv4PSs+YD+XQNBCDENKRIpFzUcSSFlJo0rvTD9NkU7mUD5RmVL4VFpVv1coWJVaBVt6 -XPJeb1/vYXRi/WSKZhtnsWlLauhsim4wb9lxh3M4dOx2pHheehx73H2ff2WBLIL2hMGGjohciiyL/Y3P -j6KRdZNIlR2W8ZjFmpqcbp5BoBSh5qO3pYenVakhquuss653sDex9LOttWG3D7i4ulu7972NvxvAosIh -w5jFCMZwx9HJKsp6y8LNBM5Az3TQoNHH0unUAtUX1ifXMNg12TXaMNso3BrdCt303tzfv+Ch4X7iWeMw -5Abk1+Wo5nXnQugJ6NLplupa6xzr3Oyc7VjuFe7P74jwQfD48a/yZPMY88z0fvUx9eD2kPdB9/P4pflU -+gT6s/tg/A78uv1k/g7+tf9a//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AABtbHVjAAAAAAAAAAUAAAAMZW5VUwAAABIAAABMZnJGUgAAAEIAAABeZGVERQAAABAAAACgamFKUAAA -AA4AAACwZXNFUwAAABIAAAC+AEMAbwBsAG8AcgAgAEwAQwBEAMkAYwByAGEAbgAgAOAAIABjAHIAaQBz -AHQAYQB1AHgAIABsAGkAcQB1AGkAZABlAHMAIABjAG8AdQBsAGUAdQByAEYAYQByAGIALQBMAEMARDCr -MOkw/AAgAEwAQwBEAEwAQwBEACAAYwBvAGwAbwBybW1vZAAAAAAAAAYQAACcXwAAAADAHWWAAAAAAAAA -AAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlIENvbXB1dGVyLCBJbmMuLCAyMDA1AAAAAA - - - - - - 3 - MCAwAA - - - - NSSwitch - - 400 - 75 - - YES - - - - 2 - 20 - 20 - 20 - - 75497536 - 134219776 - 2 - - - - - - 67108864 - 0 - - - - 1211912448 - 2 - - NSImage - NSSwitch - - - - 400 - 75 - - YES - - - - 4 - 20 - 20 - 20 - - 75497536 - 134219776 - 3 - - - 6 - System - headerColor - - - - - - 67108864 - 0 - - - - 1211912448 - 2 - - - - 400 - 75 - - YES - - - - 8 - 20 - 20 - 20 - - 75497536 - 134219776 - 4 - - - - - - 67108864 - 0 - - - - 1211912448 - 2 - - - - 400 - 75 - - YES - - - - 16 - 20 - 20 - 20 - - 75497536 - 134219776 - 5 - - - - - - 67108864 - 0 - - - - 1211912448 - 2 - - - - 400 - 75 - - YES - - - - 32 - 20 - 20 - 20 - - 75497536 - 134219776 - 6 - - - - - - 67108864 - 0 - - - - 1211912448 - 2 - - - - 400 - 75 - - YES - - - - 64 - 20 - 20 - 20 - - 75497536 - 134219776 - 7 - - - - - - 67108864 - 0 - - - - 1211912448 - 2 - - - - 400 - 75 - - YES - - - - 128 - 19.955570000000002 - 14.95557 - 20 - - 75497536 - 134219776 - 8 - - - - - - 67108864 - 0 - - - - 1211912448 - 2 - - - - 400 - 75 - - YES - - - - 3 - 2 - - 6 - System - controlBackgroundColor - - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - 306184192 - - - 4 - -1 - 0 - YES - 0 - 1 - - - {{1, 17}, {184, 19}} - - - - - 4 - YES - - - - -2147483392 - {{-100, -100}, {15, 37}} - - NO - _doScroller: - - - _doScroller: - 0.19473679999999999 - - - - -2147483392 - {{-100, -100}, {143, 15}} - - NO - _doScroller: - - 1 - - _doScroller: - 0.99047620000000003 - - - - 2304 - - - - {{1, 0}, {184, 17}} - - - - YES - - - {{95, 60}, {186, 37}} - - - 133122 - - - - - QSAAAEEgAABBmAAAQZgAAA - 0.25 - 4 - 1 - - - {372, 142} - - {{0, 0}, {1440, 878}} - {213, 129} - {10000000000000, 10000000000000} - YES - - - 7 - 2 - {{417, 204}, {537, 336}} - 1886912512 - Window - NSWindow - - View - - - {213, 107} - - - 256 - - - - 256 - {{334, 12}, {82, 32}} - - - 1001 - YES - - 67108864 - 134217728 - Cancel - - - 1001 - -2038284288 - 1 - - - Gw - 200 - 25 - - NO - - - - 256 - {{416, 12}, {113, 32}} - - 1000 - YES - - -2080374784 - 134217728 - OK - - - 1000 - -2038284288 - 1 - - - DQ - 200 - 25 - - NO - - - - 36 - - - - 274 - - - - 256 - {{109, 72}, {69, 17}} - - - YES - - 67108864 - 272629760 - Top: - - - - - - NO - 1 - - - - 256 - {{164, 66}, {65, 26}} - - - YES - - -2076180416 - 2048 - - - 109199360 - 1 - - - - - - 400 - 75 - - - 0 - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - - OtherViews - - - - - - 1 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 2 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 3 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 4 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 3 - YES - YES - 1 - - NO - - - - 256 - {{109, 46}, {62, 17}} - - - YES - - 67108864 - 272629760 - Qm90dG9tOgogCkxlZGdlciBMaW5lcw - - - - - - NO - 1 - - - - 256 - {{164, 40}, {65, 26}} - - - YES - - -2076180416 - 2048 - - - 109199360 - 1 - - - - - - 400 - 75 - - - 0 - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - - OtherViews - - - - - - 1 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 2 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 3 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 4 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 3 - YES - YES - 1 - - NO - - - - 256 - {{15, 72}, {92, 17}} - - - YES - - 67108864 - 272629760 - Ledger Lines - - - - - - NO - 1 - - - - 256 - {{15, 14}, {114, 17}} - - - YES - - 67108864 - 272629760 - Lyrics Stanzas: - - - - - - NO - 1 - - - - 256 - {{164, 8}, {65, 26}} - - - YES - - -2076180416 - 2048 - - - 109199360 - 1 - - - - - - 400 - 75 - - - 8 - - 1048576 - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - - OtherViews - - - - - 0 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 1 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 2 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 3 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 4 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 5 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 6 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 7 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - - 8 - 3 - YES - YES - 1 - - NO - - - {{1, 1}, {244, 100}} - - - - - {{17, 200}, {246, 116}} - - - {0, 0} - - 67108864 - 0 - Display Options - - - - - - 1 - 0 - 2 - NO - - - - 36 - - - - 274 - - - - 268 - {{156, 153}, {60, 26}} - - - YES - - 342884416 - 272630784 - 6 - - - YES - - - 5 - YES - - -1 - 0 - 1 - 2 - - - - - 274 - {13, 84} - - - YES - NO - YES - tableViewAction: - - - - 10 - 10 - 1000 - - 75497472 - 0 - - - - 3 - MC4zMzMzMzI5OQA - - - - - 338690112 - 268436480 - 2 - - - YES - - - - 3 - YES - - - - 3 - 2 - - - 19 - tableViewAction: - -765427712 - - - - 1 - 15 - 0 - YES - 0 - 1 - - - NO - 1 - - - - 268 - {{99, 158}, {54, 17}} - - - YES - - 67108928 - 71304192 - Lyrics: - - - - - - NO - 1 - - - - 268 - {{97, 214}, {54, 17}} - - - YES - - 67108928 - 272630784 - - - - - - - NO - 1 - - - - 268 - {{15, 185}, {69, 17}} - - - YES - - 67108928 - 272630784 - Font Sizes - - - - - - NO - 1 - - - - 268 - {{99, 185}, {54, 17}} - - - YES - - 67108928 - 71304192 - Chords: - - - - - - NO - 1 - - - - 268 - {{156, 181}, {60, 26}} - - - YES - - 342884416 - 272630784 - 6 - - - YES - - - 5 - YES - - 4 - 5 - 6 - 7 - - - - - 274 - {13, 84} - - - YES - NO - YES - tableViewAction: - - - - 10 - 10 - 1000 - - 75497472 - 0 - - - - 3 - MC4zMzMzMzI5OQA - - - - - 338690112 - 268436480 - 7 - - - YES - - - - 3 - YES - - - - 3 - 2 - - - 19 - tableViewAction: - -765427712 - - - - 1 - 15 - 0 - YES - 0 - 1 - - - NO - 1 - - - - 268 - {{76, 103}, {77, 17}} - - - YES - - 67108928 - 71304192 - Below Title: - - - - - - NO - 1 - - - - 268 - {{15, 130}, {55, 17}} - - - YES - - 67108928 - 272630784 - Padding - - - - - - NO - 1 - - - - 268 - {{120, 130}, {33, 17}} - - - YES - - 67108928 - 71304192 - Top: - - - - - - NO - 1 - - - - 268 - {{156, 126}, {60, 26}} - - - YES - - 342884416 - 272630784 - 6 - - - YES - - - 5 - YES - - 0 - 1 - 2 - 3 - 4 - - - - - 274 - {13, 105} - - - YES - NO - YES - tableViewAction: - - - - 10 - 10 - 1000 - - 75497472 - 0 - - - - 3 - MC4zMzMzMzI5OQA - - - - - 338690112 - 268436480 - 4 - - - YES - - - - 3 - YES - - - - 3 - 2 - - - 19 - tableViewAction: - -765427712 - - - - 1 - 15 - 0 - YES - 0 - 1 - - - NO - 1 - - - - 268 - {{156, 99}, {60, 26}} - - - YES - - 342884416 - 272630784 - 6 - - - YES - - - 5 - YES - - 0 - 1 - 2 - 3 - 4 - - - - - 274 - {13, 105} - - - YES - NO - YES - tableViewAction: - - - - 10 - 10 - 1000 - - 75497472 - 0 - - - - 3 - MC4zMzMzMzI5OQA - - - - - 338690112 - 268436480 - 4 - - - YES - - - - 3 - YES - - - - 3 - 2 - - - 19 - tableViewAction: - -765427712 - - - - 1 - 15 - 0 - YES - 0 - 1 - - - NO - 1 - - - - 268 - {{55, 75}, {98, 17}} - - - YES - - 67108928 - 71304192 - Between Lines: - - - - - - NO - 1 - - - - 268 - {{156, 71}, {60, 26}} - - - YES - - 342884416 - 272630784 - 6 - - - YES - - - 5 - YES - - 0 - 1 - 2 - 3 - 4 - - - - - 274 - {13, 105} - - - YES - NO - YES - tableViewAction: - - - - 10 - 10 - 1000 - - 75497472 - 0 - - - - 3 - MC4zMzMzMzI5OQA - - - - - 338690112 - 268436480 - 4 - - - YES - - - - 3 - YES - - - - 3 - 2 - - - 19 - tableViewAction: - -765427712 - - - - 1 - 15 - 0 - YES - 0 - 1 - - - NO - 1 - - - - 268 - {{59, 47}, {94, 17}} - - - YES - - 67108928 - 71304192 - Below Chords: - - - - - - NO - 1 - - - - 268 - {{156, 43}, {60, 26}} - - - YES - - 342884416 - 272630784 - 6 - - - YES - - - 5 - YES - - 0 - 1 - 2 - 3 - 4 - - - - - 274 - {13, 105} - - - YES - NO - YES - tableViewAction: - - - - 10 - 10 - 1000 - - 75497472 - 0 - - - - 3 - MC4zMzMzMzI5OQA - - - - - 338690112 - 268436480 - 4 - - - YES - - - - 3 - YES - - - - 3 - 2 - - - 19 - tableViewAction: - -765427712 - - - - 1 - 15 - 0 - YES - 0 - 1 - - - NO - 1 - - - - 268 - {{65, 19}, {88, 17}} - - - YES - - 67108928 - 71304192 - Above Lyrics: - - - - - - NO - 1 - - - - 268 - {{156, 15}, {60, 26}} - - - YES - - 342884416 - 272630784 - 6 - - - YES - - - 5 - YES - - 0 - 1 - 2 - 3 - 4 - - - - - 274 - {13, 105} - - - YES - NO - YES - tableViewAction: - - - - 10 - 10 - 1000 - - 75497472 - 0 - - - - 3 - MC4zMzMzMzI5OQA - - - - - 338690112 - 268436480 - 4 - - - YES - - - - 3 - YES - - - - 3 - 2 - - - 19 - tableViewAction: - -765427712 - - - - 1 - 15 - 0 - YES - 0 - 1 - - - NO - 1 - - - - 268 - {{156, 209}, {60, 26}} - - - YES - - 342884416 - 272630784 - 19.5 - - - YES - - - 5 - YES - - 16 - 18 - 20 - 22 - - - - - 274 - {13, 84} - - - YES - NO - YES - tableViewAction: - - - - 10 - 10 - 1000 - - 75497472 - 0 - - - - 3 - MC4zMzMzMzI5OQA - - - - - 338690112 - 268436480 - 22 - - - YES - - - - 3 - YES - - - - 3 - 2 - - - 19 - tableViewAction: - -765427712 - - - - 1 - 15 - 0 - YES - 0 - 1 - - - NO - 1 - - - - 268 - {{15, 214}, {69, 17}} - - - YES - - 67108928 - 272630784 - Staff Size - - - - - - NO - 1 - - - {{1, 1}, {231, 243}} - - - - - {{293, 56}, {233, 259}} - - - {0, 0} - - 67108864 - 0 - Print Options - - - - - - 1 - 0 - 2 - NO - - - {537, 336} - - - {{0, 0}, {1440, 878}} - {213, 129} - {10000000000000, 10000000000000} - YES - - - VLLogWindow - - - VLPDFWindow - - - NSApplication - - - YES - - - - - - - window - - - - 158 - - - - sheetView - - - - 100385 - - - - progressIndicator - - - - 100513 - - - - logWin - - - - 100519 - - - - pdfWin - - - - 100520 - - - - displaySheet - - - - 100526 - - - - printDocument: - - - - 100503 - - - - showLog: - - - - 100504 - - - - zoomIn: - - - - 100505 - - - - zoomOut: - - - - 100506 - - - - showOutput: - - - - 100508 - - - - editDisplayOptions: - - - - 100510 - - - - playStop: - - - - 100514 - - - - playMusic: - - - - 100515 - - - - playMusic: - - - - 100516 - - - - playMusic: - - - - 100533 - - - - delegate - - - - 17 - - - - setTime: - - - - 69 - - - - setKey: - - - - 70 - - - - setDivisions: - - - - 85 - - - - hideFieldEditor: - - - - 110 - - - - hideFieldEditor: - - - - 111 - - - - fFieldEditor - - - - 134 - - - - fRepeatSheet - - - - 208 - - - - fRepeatMsg - - - - 212 - - - - fEndingSheet - - - - 240 - - - - fEndingMsg - - - - 241 - - - - selectGroove: - - - - 260 - - - - fGrooveMenu - - - - 262 - - - - selectGroove: - - - - 265 - - - - endSheetWithButton: - - - - 331 - - - - endSheetWithButton: - - - - 332 - - - - endSheetWithButton: - - - - 333 - - - - endSheetWithButton: - - - - 334 - - - - endSheetWithButton: - - - - 335 - - - - endSheetWithButton: - - - - 336 - - - - endSheetWithButton: - - - - 337 - - - - endSheetWithButton: - - - - 338 - - - - fKeyMenu - - - - 100348 - - - - fTimeMenu - - - - 100349 - - - - fDivisionMenu - - - - 100350 - - - - selectText: - - - - 112 - - - - value: editTarget.stringValue - - - - - - value: editTarget.stringValue - value - editTarget.stringValue - 2 - - - 135 - - - - delegate - - - - 136 - - - - nextKeyView - - - - 100386 - - - - hidden: editTarget - - - - - - hidden: editTarget - hidden - editTarget - - NSValueTransformerName - NSIsNil - - 2 - - - 141 - - - - hidden2: editTarget.hidden - - - - - - hidden2: editTarget.hidden - hidden2 - editTarget.hidden - - - - - - - - 2 - - - 100528 - - - - value: document.songTitle - - - - - - value: document.songTitle - value - document.songTitle - 2 - - - 168 - - - - value: document.songComposer - - - - - - value: document.songComposer - value - document.songComposer - 2 - - - 169 - - - - value: document.songLyricist - - - - - - value: document.songLyricist - value - document.songLyricist - 2 - - - 170 - - - - value: document.songTempo - - - - - - value: document.songTempo - value - document.songTempo - 2 - - - 180 - - - - value: document.songTempo - - - - - - value: document.songTempo - value - document.songTempo - 2 - - - 179 - - - - value: document.repeatVolta - - - - - - value: document.repeatVolta - value - document.repeatVolta - 2 - - - 203 - - - - value: document.repeatVolta - - - - - - value: document.repeatVolta - value - document.repeatVolta - 2 - - - 204 - - - - dataSource - - - - 247 - - - - delegate - - - - 248 - - - - selectedIndex: sheetView.numTopLedgers - - - - - - selectedIndex: sheetView.numTopLedgers - selectedIndex - sheetView.numTopLedgers - 2 - - - 100523 - - - - selectedIndex: sheetView.numBotLedgers - - - - - - selectedIndex: sheetView.numBotLedgers - selectedIndex - sheetView.numBotLedgers - 2 - - - 100524 - - - - selectedIndex: sheetView.numStanzas - - - - - - selectedIndex: sheetView.numStanzas - selectedIndex - sheetView.numStanzas - 2 - - - 100525 - - - - value: document.chordSize - - - - - - value: document.chordSize - value - document.chordSize - 2 - - - 100381 - - - - value: document.lyricSize - - - - - - value: document.lyricSize - value - document.lyricSize - 2 - - - 100450 - - - - value: document.staffSize - - - - - - value: document.staffSize - value - document.staffSize - 2 - - - 100384 - - - - value: document.topPadding - - - - - - value: document.topPadding - value - document.topPadding - 2 - - - 100481 - - - - value: document.titlePadding - - - - - - value: document.titlePadding - value - document.titlePadding - 2 - - - 100482 - - - - value: document.staffPadding - - - - - - value: document.staffPadding - value - document.staffPadding - 2 - - - 100483 - - - - value: document.chordPadding - - - - - - value: document.chordPadding - value - document.chordPadding - 2 - - - 100484 - - - - value: document.lyricPadding - - - - - - value: document.lyricPadding - value - document.lyricPadding - 2 - - - 100485 - - - - sheetWin - - - - 100521 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - 5 - - - - - - - Sheet Music Window - - - 6 - - - - - - - - - - 102 - - - - - - - - - - 114 - - - - - - - - - - - - - - - - - - - - - 130 - - - - - - - - - - 22 - - - - - 196 - - - - - - Repeat - - - 197 - - - - - - - - - - - - - - 198 - - - - - - - - 199 - - - - - - - - 201 - - - - - - - - 202 - - - - - - - - 205 - - - - - - - - 206 - - - - - - - - 207 - - - - - - - - 216 - - - - - - Endings - - - 217 - - - - - - - - - - - - 218 - - - - - - - - 219 - - - - - - - - 220 - - - - - - - - 221 - - - - - - - - 222 - - - - - - - - - - - 223 - - - - - - - - - - - - - - - 224 - - - - - - - - 225 - - - - - - - - 233 - - - - - 226 - - - - - - - - 234 - - - - - 227 - - - - - - - - 235 - - - - - 228 - - - - - - - - 236 - - - - - 229 - - - - - - - - 237 - - - - - 230 - - - - - - - - 238 - - - - - 231 - - - - - - - - 239 - - - - - 266 - - - - - - Display - - - 267 - - - - - - - - - - - 268 - - - - - - - - 270 - - - - - - - - 100198 - - - - - 100199 - - - - - - - - 100201 - - - - - 100202 - - - - - 100205 - - - - - 100206 - - - - - 100207 - - - - - 100218 - - - - - 100219 - - - - - 100220 - - - - - 100221 - - - - - 100268 - - - - - 100270 - - - - - 100224 - - - - - 200 - - - - - 100340 - - - - - 100341 - - - - - 100342 - - - - - 100343 - - - - - 100344 - - - - - -3 - - - Application - - - 97 - - - - - - - - 100097 - - - - - 100 - - - - - - - - 100100 - - - - - 101 - - - - - - - - 100101 - - - - - 23 - - - - - - - - 100023 - - - - - - - - 24 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 25 - - - - - 26 - - - - - 27 - - - - - 29 - - - - - 30 - - - - - 31 - - - - - 32 - - - - - 33 - - - - - 34 - - - - - 35 - - - - - 36 - - - - - 37 - - - - - 38 - - - - - 39 - - - - - 40 - - - - - 43 - - - - - 44 - - - - - 45 - - - - - 46 - - - - - 47 - - - - - 48 - - - - - 61 - - - - - - - - 100061 - - - - - - - - 62 - - - - - - - - - - - - 63 - - - - - 64 - - - - - 65 - - - - - 66 - - - - - 67 - - - - - 73 - - - - - - - - 100073 - - - - - - - - 74 - - - - - - - - - - - - - 75 - - - - - 76 - - - - - 77 - - - - - 78 - - - - - 79 - - - - - 80 - - - - - 162 - - - - - - - - 100162 - - - - - 163 - - - - - - - - 100163 - - - - - 164 - - - - - - - - 100164 - - - - - 165 - - - - - - - - 100165 - - - - - 166 - - - - - - - - 100166 - - - - - 167 - - - - - - - - 100167 - - - - - 176 - - - - - - - - 100176 - - - - - 177 - - - - - - - - 100177 - - - - - 178 - - - - - - - - 100178 - - - - - 181 - - - - - - - - 100181 - - - - - 254 - - - - - - - - 100254 - - - - - - - - 255 - - - - - - - - - - - 256 - - - - - 257 - - - - - 258 - - - - - 259 - - - - - 100351 - - - - - - - - - - - - - - 305 - - - - - - - - 100305 - - - - - 290 - - - - - - - - 100290 - - - - - - - - 291 - - - - - - - - - - - - 292 - - - - - 293 - - - - - 294 - - - - - 295 - - - - - 303 - - - - - 296 - - - - - - - - 100296 - - - - - 306 - - - - - - - - 100306 - - - - - - - - 307 - - - - - - - - - - - - 308 - - - - - 309 - - - - - 310 - - - - - 311 - - - - - 312 - - - - - 269 - - - - - - - - 100269 - - - - - 313 - - - - - - - - 100313 - - - - - 314 - - - - - - - - 100314 - - - - - - - - 315 - - - - - - - - - - - - - - - - 316 - - - - - 317 - - - - - 318 - - - - - 319 - - - - - 320 - - - - - 321 - - - - - 322 - - - - - 323 - - - - - 324 - - - - - 100368 - - - - - - - - - - - - - - - - - - - - - - - - - - 100358 - - - - - - - - 100361 - - - - - 100359 - - - - - - - - 100360 - - - - - 100364 - - - - - - - - 100365 - - - - - 100354 - - - - - - - - 100355 - - - - - 100356 - - - - - - - - 100357 - - - - - 100352 - - - - - - - - 100353 - - - - - 100363 - - - - - - - - 100366 - - - - - 100362 - - - - - - - - 100367 - - - - - 100371 - - - - - 100416 - - - - - 100417 - - - - - 100419 - - - - - 100420 - - - - - 100421 - - - - - 100422 - - - - - 100423 - - - - - 100425 - - - - - 100426 - - - - - 100427 - - - - - 100452 - - - - - - - - 100453 - - - - - - - - 100454 - - - - - - - - 100455 - - - - - - - - 100456 - - - - - 100457 - - - - - 100458 - - - - - 100459 - - - - - 100463 - - - - - - - - 100464 - - - - - 100466 - - - - - - - - 100467 - - - - - - - - 100468 - - - - - 100469 - - - - - 100471 - - - - - - - - 100472 - - - - - - - - 100473 - - - - - 100474 - - - - - 100476 - - - - - - - - 100477 - - - - - - - - 100478 - - - - - 100479 - - - - - 100486 - - - - - - - - - - - - - - - - - - - - 100489 - - - - - 100490 - - - - - 100491 - - - - - 100493 - - - - - 100494 - - - - - 100495 - - - - - 100496 - - - - - 100499 - - - - - - - - 100497 - - - - - - - - 100498 - - - - - 100500 - - - - - - Toolbar Item - >> - - - 100501 - - - - - - - - 100502 - - - - - 100492 - - - - - 100509 - - - - - 100512 - - - - - - - - 100511 - - - - - 100517 - - - - - 100518 - - - PDF Window - - - 100529 - - - - - - - - 100530 - - - - - - - - 100531 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - 0 - 1 - 2 - 3 - 4 - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - 0 - 1 - 2 - 3 - 4 - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - 0 - 1 - 2 - 3 - 4 - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - 0 - 1 - 2 - 3 - 4 - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - 0 - 1 - 2 - 3 - 4 - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - VLToolbarButton - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - VLToolbarButton - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - VLToolbarButton - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{245, 314}, {543, 189}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{0, 337}, {971, 397}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 100533 - - - - - FirstResponder - - playMusic: - id - - - playMusic: - - playMusic: - id - - - - IBUserSource - - - - - VLLogWindow - NSWindowController - - log - id - - - log - - log - id - - - - IBProjectSource - ../Sources/VLLogWindow.h - - - - VLLogWindow - - printDocument: - id - - - printDocument: - - printDocument: - id - - - - IBProjectSource - ../Sources/VLLogWindow.mm - - - - VLPDFWindow - NSWindowController - - PDFView - NSWindowController - - - - pdfView - PDFView - - - sheetWin - NSWindowController - - - - IBProjectSource - ../Sources/VLPDFWindow.h - - - - VLPDFWindow - - id - id - - - - printDocument: - id - - - showWindow: - id - - - - IBProjectSource - ../Sources/VLPDFWindow.mm - - - - VLSheetView - NSView - - id - id - id - id - id - id - id - id - id - - - - endSheetWithButton: - id - - - hideFieldEditor: - id - - - selectGroove: - id - - - setDivisions: - id - - - setKey: - id - - - setTime: - id - - - transposeOctave: - id - - - zoomIn: - id - - - zoomOut: - id - - - - id - id - id - id - id - id - id - id - id - - - - fDivisionMenu - id - - - fEndingMsg - id - - - fEndingSheet - id - - - fFieldEditor - id - - - fGrooveMenu - id - - - fKeyMenu - id - - - fRepeatMsg - id - - - fRepeatSheet - id - - - fTimeMenu - id - - - - IBProjectSource - ../Sources/VLSheetView.h - - - - VLSheetView - - id - id - id - id - id - id - id - id - id - - - - endSheetWithButton: - id - - - hideFieldEditor: - id - - - selectGroove: - id - - - setDivisions: - id - - - setKey: - id - - - setTime: - id - - - transposeOctave: - id - - - zoomIn: - id - - - zoomOut: - id - - - - IBProjectSource - ../Sources/VLSheetView.mm - - - - VLSheetView - - id - id - id - id - id - id - id - id - id - id - - - - copy: - id - - - cut: - id - - - delete: - id - - - editRepeat: - id - - - editRepeatEnding: - id - - - insertBreak: - id - - - insertJumpToCoda: - id - - - insertMeasure: - id - - - insertStartCoda: - id - - - paste: - id - - - - IBProjectSource - ../Sources/VLSheetViewSelection.h - - - - VLSheetView - - id - id - id - id - id - id - id - id - id - id - id - - - - copy: - id - - - cut: - id - - - delete: - id - - - editRepeat: - id - - - editRepeatEnding: - id - - - insertBreak: - id - - - insertJumpToCoda: - id - - - insertMeasure: - id - - - insertStartCoda: - id - - - paste: - id - - - selectAll: - id - - - - IBProjectSource - ../Sources/VLSheetViewSelection.mm - - - - VLSheetWindow - NSWindowController - - id - id - id - id - id - id - id - id - - - - adjustTempo: - id - - - playMusic: - id - - - playStop: - id - - - showOutput: - id - - - stop: - id - - - togglePlayElements: - id - - - zoomIn: - id - - - zoomOut: - id - - - - NSWindow - VLLogWindow - VLPDFWindow - NSProgressIndicator - VLSheetView - - - - displaySheet - NSWindow - - - logWin - VLLogWindow - - - pdfWin - VLPDFWindow - - - progressIndicator - NSProgressIndicator - - - sheetView - VLSheetView - - - - IBProjectSource - ../Sources/VLSheetWindow.h - - - - VLSheetWindow - - id - id - id - id - id - id - id - id - id - id - - - - adjustTempo: - id - - - editDisplayOptions: - id - - - playMusic: - id - - - playStop: - id - - - showLog: - id - - - showOutput: - id - - - stop: - id - - - togglePlayElements: - id - - - zoomIn: - id - - - zoomOut: - id - - - - IBProjectSource - ../Sources/VLSheetWindow.mm - - - - VLToolbarButton - NSButton - - IBProjectSource - ../Sources/VLToolbarButton.h - - - - - 0 - IBCocoaFramework - NO - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - - - YES - 3 - - {12, 12} - {10, 2} - {15, 15} - {32, 32} - {512, 512} - {48, 48} - {512, 512} - {512, 512} - {512, 512} - {512, 512} - {512, 512} - {512, 512} - {512, 512} - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Title: + + + + + + + + + + + Composer: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Groove: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Repeat measures 1 though 14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ending in measures 1 through 10 applies to repeats: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bottom: + +Ledger Lines + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1 + 0 + 1 + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 4 + 5 + 6 + 7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + 2 + 3 + 4 + + + + + + + + + + + + + + + 0 + 1 + 2 + 3 + 4 + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + 2 + 3 + 4 + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + 2 + 3 + 4 + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + 2 + 3 + 4 + + + + + + + + + + + + + + + 16 + 18 + 20 + 22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Filters/VLMusicXMLType.writer b/Filters/VLMusicXMLType.writer index 612bfed..f5f374d 100755 --- a/Filters/VLMusicXMLType.writer +++ b/Filters/VLMusicXMLType.writer @@ -575,22 +575,15 @@ def _score return score end -NEW_REXML = REXML::VERSION > "3.1.7" - xml = REXML::Document.new xml.add REXML::XMLDecl.new('1.0', 'UTF-8') xml.add REXML::DocType.new(['score-partwise', 'PUBLIC', - '"-//Recordare//DTD MusicXML 1.1 Partwise//EN"', - NEW_REXML ? 'http://www.musicxml.org/dtds/partwise.dtd' : - '"http://www.musicxml.org/dtds/partwise.dtd"']) + '-//Recordare//DTD MusicXML 1.1 Partwise//EN', + 'http://www.musicxml.org/dtds/partwise.dtd']) xml.add_element(_score) -if NEW_REXML - formatter = REXML::Formatters::Pretty.new(2) - formatter.compact = true - formatter.write(xml, $stdout) -else - xml.write($stdout, 0) -end +formatter = REXML::Formatters::Pretty.new(2) +formatter.compact = true +formatter.write(xml, $stdout) # Local Variables: # mode:ruby diff --git a/Sources/VLDocument.mm b/Sources/VLDocument.mm index 88100b9..da75366 100644 --- a/Sources/VLDocument.mm +++ b/Sources/VLDocument.mm @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2005-2011 Matthias Neeracher +// Copyright © 2005-2018 Matthias Neeracher // #import "VLDocument.h" @@ -470,7 +470,7 @@ NewMusicSequence(&musicSequence); MusicSequenceFileLoad(musicSequence, (CFURLRef)[self fileURLWithExtension:@"mid"], - 0, 0); + kMusicSequenceFile_MIDIType, 0); size_t countIn = 0; if (playElements & kVLPlayCountIn) diff --git a/Sources/VLLilypondWriter.cpp b/Sources/VLLilypondWriter.cpp index 42c561c..2e8ba1a 100644 --- a/Sources/VLLilypondWriter.cpp +++ b/Sources/VLLilypondWriter.cpp @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2007-2011 Matthias Neeracher +// Copyright © 2007-2018 Matthias Neeracher // #include "VLLilypondWriter.h" @@ -41,7 +41,7 @@ void VLLilypondWriter::Visit(VLSong & song) fMelody += fSeenEnding ? "}}\n" : "}\n"; } -void VLLilypondWriter::VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas) +void VLLilypondWriter::VisitMeasure(uint32_t m, VLProperties & p, VLMeasure & meas) { char measNo[8]; if (!(m % 4)) @@ -166,8 +166,10 @@ void VLLilypondWriter::VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas fAccum.erase(trip, 15); while ((trip = fAccum.find(" ~ } \\times 2/3 { ")) != std::string::npos) fAccum.erase(trip+2, 17); - while ((trip = fAccum.find(" ~.")) != std::string::npos) - fAccum.erase(trip, 2); + while ((trip = fAccum.find("~.")) != std::string::npos) + fAccum.erase(trip, 1); + while ((trip = fAccum.find("~(.")) != std::string::npos) + fAccum.replace(trip, 3, ".("); if (fSong->fGoToCoda == m+1) fAccum += "\n" @@ -257,25 +259,43 @@ void VLLilypondWriter::VisitNote(VLLyricsNote & n) nm = "s"; } const char * space = fAccum.size() ? " " : ""; - const char * tie = n.fTied & VLNote::kTiedWithNext ? " ~" : ""; + const char * tie; + switch (n.fTied & (VLNote::kTiedWithNext|VLNote::kSlurWithNext|VLNote::kStartSlur|VLNote::kEndSlur)) { + case VLNote::kTiedWithNext|VLNote::kSlurWithNext|VLNote::kStartSlur: + tie = "("; + break; + case VLNote::kTiedWithNext|VLNote::kStartSlur: + tie = "~("; + break; + case VLNote::kTiedWithNext: + tie = "~"; + break; + case VLNote::kEndSlur: + tie = ")"; + break; + case VLNote::kTiedWithNext|VLNote::kSlurWithNext: + default: + tie = ""; + break; + } char duration[32]; - if (n.fTied == VLNote::kTiedWithPrev && n.fVisual == fPrevNote.fVisual+1 + if ((n.fTied & VLNote::kTiedWithPrev) && n.fVisual == fPrevNote.fVisual+1 && n.fPitch == fPrevNote.fPitch - ) + ) { strcpy(duration, "."); - else if (n.fVisual & VLNote::kTupletMask) - sprintf(duration, "%s\\times %d/%d { %s%d%s }", - space, VLNote::TupletDenom(n.fVisual), VLNote::TupletNum(n.fVisual), + } else if (n.fVisual & VLNote::kTupletMask) { + sprintf(duration, "%s\\times %d/%d { %s%d%s }", + space, VLNote::TupletDenom(n.fVisual), VLNote::TupletNum(n.fVisual), nm.c_str(), kValue[n.fVisual & VLNote::kNoteHeadMask], tie); - else - sprintf(duration, "%s%s%d%s", - space, nm.c_str(), kValue[n.fVisual & VLNote::kNoteHeadMask], tie); + } else { + sprintf(duration, "%s%s%d%s", + space, nm.c_str(), kValue[n.fVisual & VLNote::kNoteHeadMask], tie); + } + fAccum += duration; + fPrevNote = n; - fAccum += duration; - fPrevNote= n; - - if (n.fPitch != VLNote::kNoPitch && !(n.fTied & VLNote::kTiedWithPrev)) - for (size_t i=0; i(fStanza), n.fVisual, fAt}; MusicTrackNewUserEvent(fTrack, fNoteTime, reinterpret_cast(&event)); } @@ -109,7 +109,7 @@ void VLMIDIWriter::VisitNote(VLLyricsNote & n) void VLMIDIWriter::VisitChord(VLChord & c) { if (c.fPitch != VLNote::kNoPitch) { - VLMIDIUserEvent event = {12, 0, fStanza, 0, fAt}; + VLMIDIUserEvent event = {12, 0, static_cast(fStanza), 0, fAt}; MusicTrackNewUserEvent(fTrack, fChordTime, reinterpret_cast(&event)); } diff --git a/Sources/VLMIDIWriter.h b/Sources/VLMIDIWriter.h index 78d01ae..429a0f8 100644 --- a/Sources/VLMIDIWriter.h +++ b/Sources/VLMIDIWriter.h @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2008-2011 Matthias Neeracher +// Copyright © 2008-2018 Matthias Neeracher // #include "VLModel.h" @@ -35,10 +35,10 @@ public: VLMIDIWriter(MusicSequence music, size_t countIn) : fMusic(music), fCountIn(countIn) {} - virtual void Visit(VLSong & song); - virtual void VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas); - virtual void VisitNote(VLLyricsNote & n); - virtual void VisitChord(VLChord & c); + void Visit(VLSong & song) override; + void VisitMeasure(uint32_t m, VLProperties & p, VLMeasure & meas) override; + void VisitNote(VLLyricsNote & n) override; + void VisitChord(VLChord & c) override; private: MusicSequence fMusic; size_t fCountIn; diff --git a/Sources/VLMMAWriter.cpp b/Sources/VLMMAWriter.cpp index c8bb018..a774f5c 100644 --- a/Sources/VLMMAWriter.cpp +++ b/Sources/VLMMAWriter.cpp @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2007 Matthias Neeracher +// Copyright © 2007-2018 Matthias Neeracher // #include "VLMMAWriter.h" @@ -22,7 +22,7 @@ void VLMMAWriter::Visit(VLSong & song) VisitMeasures(song, true); } -void VLMMAWriter::VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas) +void VLMMAWriter::VisitMeasure(uint32_t m, VLProperties & p, VLMeasure & meas) { if (fPreview) if (meas.fPropIdx < fBeginSection || meas.fPropIdx >= fEndSection) diff --git a/Sources/VLMMAWriter.h b/Sources/VLMMAWriter.h index 5079719..ae9f301 100644 --- a/Sources/VLMMAWriter.h +++ b/Sources/VLMMAWriter.h @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2007 Matthias Neeracher +// Copyright © 2007-2018 Matthias Neeracher // #include "VLModel.h" @@ -16,10 +16,10 @@ public: : fPreview(preview), fBeginSection(beginSection), fEndSection(endSection) {} - virtual void Visit(VLSong & song); - virtual void VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas); - virtual void VisitNote(VLLyricsNote & n); - virtual void VisitChord(VLChord & c); + void Visit(VLSong & song) override; + void VisitMeasure(uint32_t m, VLProperties & p, VLMeasure & meas) override; + void VisitNote(VLLyricsNote & n) override; + void VisitChord(VLChord & c) override; const std::string & Measures() const { return fMeasures; } private: diff --git a/Sources/VLModel.cpp b/Sources/VLModel.cpp index 24a3933..64079c1 100644 --- a/Sources/VLModel.cpp +++ b/Sources/VLModel.cpp @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2005-2017 Matthias Neeracher +// Copyright © 2005-2018 Matthias Neeracher // #include "VLModel.h" @@ -107,11 +107,13 @@ VLNote::VLNote(VLFraction dur, int pitch, uint16_t visual) std::string VLNote::Name(uint16_t accidental) const { - if (uint16_t acc = (fVisual & kAccidentalsMask)) - if (acc == kWantNatural) + if (uint16_t acc = (fVisual & kAccidentalsMask)) { + if (acc == kWantNatural) { accidental |= acc; - else + } else { accidental = acc; + } + } return VLPitchName(fPitch, accidental); } @@ -603,6 +605,57 @@ void VLSong::DelChord(VLLocation at) fMeasures.pop_back(); } +VLSong::note_iterator::note_iterator(const VLMeasureList::iterator &meas, const VLNoteList::iterator ¬e) + : fMeasIter(meas), fNoteIter(note) +{ +} + +VLSong::note_iterator & +VLSong::note_iterator::operator--() +{ + if (fNoteIter == fMeasIter->fMelody.begin()) { + --fMeasIter; + fNoteIter = fMeasIter->fMelody.end(); + } + --fNoteIter; + return *this; +} + +VLSong::note_iterator & +VLSong::note_iterator::operator++() +{ + ++fNoteIter; + if (fNoteIter == fMeasIter->fMelody.end()) { + ++fMeasIter; + fNoteIter = fMeasIter->fMelody.begin(); + } + return *this; +} + +bool +VLSong::note_iterator::operator==(const note_iterator &other) +{ + return fMeasIter == other.fMeasIter && fNoteIter == other.fNoteIter; +} + +VLSong::note_iterator +VLSong::begin_note(size_t measure) +{ + return note_iterator(fMeasures.begin()+measure, fMeasures[measure].fMelody.begin()); +} + +VLSong::note_iterator +VLSong::end_note(size_t measure) +{ + return note_iterator(fMeasures.begin()+measure, fMeasures[measure].fMelody.end()); +} + +VLSong::note_iterator +VLSong::end_note() +{ + return end_note(fMeasures.size()-1); +} + VLLyricsNote VLSong::FindNote(VLLocation at) { VLNoteList::iterator i = fMeasures[at.fMeasure].fMelody.begin(); @@ -781,15 +834,19 @@ void VLSong::AddNote(VLLyricsNote note, VLLocation at) ++i; } i->fTied = 0; - if (note.fTied & VLNote::kTiedWithPrev) // kTiedWithNext is NEVER user set - if (at.fMeasure && i == fMeasures[at.fMeasure].fMelody.begin()) { - VLNoteList::iterator j = fMeasures[at.fMeasure-1].fMelody.end(); - --j; - if (j->fPitch == i->fPitch) { - j->fTied |= VLNote::kTiedWithNext; - i->fTied |= VLNote::kTiedWithPrev; - } - } + if (note.fTied & VLNote::kTiedWithPrev) {// kTiedWithNext is NEVER user set + auto j = i; + if (at.fAt != VLFraction(0) || at.fMeasure) { + if (at.fAt == VLFraction(0)) { + j = fMeasures[at.fMeasure-1].fMelody.end(); + } + --j; + if (note.fPitch != VLNote::kNoPitch && j->fPitch != VLNote::kNoPitch) { + j->fTied |= VLNote::kTiedWithNext; + i->fTied |= VLNote::kTiedWithPrev; + } + } + } } void VLSong::DelNote(VLLocation at) @@ -906,6 +963,97 @@ VLNote VLSong::ExtendNote(VLLocation at) return *i; } +VLLocation VLSong::TieNote(VLLocation at, bool tieWithPrev) +{ + VLNoteList::iterator i = fMeasures[at.fMeasure].fMelody.begin(); + VLNoteList::iterator end= fMeasures[at.fMeasure].fMelody.end(); + + if (i==end) + return VLLocation(); // Empty song, do nothing + + for (VLFraction t(0); i != end && t+i->fDuration <= at.fAt; ++i) + t += i->fDuration; + + if (i == end) + --i; + if (i->fPitch == VLNote::kNoPitch) + return VLLocation(); // Don't tie rests + + VLNoteList::iterator j=i; + auto startMeasure = at.fMeasure; + if (tieWithPrev) { + if (j != fMeasures[at.fMeasure].fMelody.begin()) { + --j; + // + // Extend across next note/rest + // + if (i->fPitch == j->fPitch) { + // Consolidate identical pitches + j->fDuration += i->fDuration; + fMeasures[at.fMeasure].fMelody.erase(i); + i = j; + } else { + i->fTied |= VLNote::kTiedWithPrev; + j->fTied |= VLNote::kTiedWithNext; + i->fLyrics.clear(); + } + } else if (at.fMeasure-- > 0) { + // + // Extend into previous measure + // + j = fMeasures[at.fMeasure].fMelody.end(); + --j; + if (j->fPitch != VLNote::kNoPitch) { // Don't tie with rests + i->fTied |= VLNote::kTiedWithPrev; + j->fTied |= VLNote::kTiedWithNext; + i->fLyrics.clear(); + } + } + } else { + ++j; + if (j != fMeasures[at.fMeasure].fMelody.end()) { + // + // Extend across next note/rest + // + if (i->fPitch == j->fPitch) { + // Consolidate identical pitches + i->fDuration += j->fDuration; + fMeasures[at.fMeasure].fMelody.erase(j); + } else { + i->fTied |= VLNote::kTiedWithNext; + j->fTied |= VLNote::kTiedWithPrev; + j->fLyrics.clear(); + } + } else if (++at.fMeasure < fMeasures.size()) { + // + // Extend into next measure + // + j = fMeasures[at.fMeasure].fMelody.begin(); + if (j->fPitch != VLNote::kNoPitch) { // Don't tie with rests + i->fTied |= VLNote::kTiedWithNext; + j->fTied |= VLNote::kTiedWithPrev; + j->fLyrics.clear(); + } + } + } + while (i->fTied & VLNote::kTiedWithPrev) { + if (i == fMeasures[startMeasure].fMelody.begin()) { + if (startMeasure) { + i = fMeasures[--startMeasure].fMelody.end(); + } else { + break; + } + } + --i; + } + at.fMeasure = startMeasure; + at.fAt = VLFraction(); + for (j = fMeasures[startMeasure].fMelody.begin(); j != i; ++j) { + at.fAt = at.fAt+j->fDuration; + } + return at; +} + bool VLSong::IsNonEmpty() const { for (size_t measure=0; measure= endMeasure - ) + ) { if (rp.fEndings[0].fEnd == endMeasure) { // // Exact match, just change times @@ -1569,6 +1714,7 @@ void VLSong::AddRepeat(size_t beginMeasure, size_t endMeasure, int times) break; } + } } VLRepeat rep; @@ -1795,13 +1941,15 @@ bool VLSong::DoesBeginEnding(size_t measure, bool * repeat, size_t * volta) cons size_t v = (1<begin_note(&measure-&fSong->fMeasures[0]); + bool seenNote = false; + do { + --predecessor; + if (predecessor->fPitch != decomp.front().fPitch) { + inSlur = true; + if (!seenNote) { + decomp.front().fTied |= VLNote::kSlurWithPrev; + } + break; + } + seenNote = true; + } while (predecessor->fTied & VLNote::kTiedWithPrev); + } + VLLyricsNote *firstInTie = nullptr; + VLLyricsNote *prevInTie = nullptr; + for (auto ¬e: decomp) { + if ((note.fTied & VLNote::kTiedWithPrev) && note.fPitch != prevPitch) { + if (prevInTie) { + prevInTie->fTied |= VLNote::kSlurWithNext; + } + note.fTied |= VLNote::kSlurWithPrev; + inSlur = true; + } + if (note.fTied & VLNote::kTiedWithNext) { + if (!inTie) { + firstInTie = ¬e; + inTie = true; + } + prevInTie = ¬e; + prevPitch = note.fPitch; + } else { + if (inSlur) { + if (firstInTie) { + firstInTie->fTied |= VLNote::kStartSlur; + } + note.fTied |= VLNote::kEndSlur; + } + inSlur = false; + inTie = false; + } + } + if (inTie) { + // Find out if measure-final tie contains slur + auto successor = fSong->begin_note(&measure-&fSong->fMeasures[0]+1); + if (successor->fPitch != prevPitch) { + prevInTie->fTied |= VLNote::kSlurWithNext; + } + while (!inSlur) { + if (successor->fPitch != prevPitch) { + inSlur = true; + } else if (!(successor->fTied & VLNote::kTiedWithNext)) { + break; + } else { + ++successor; + } + } + } + if (inSlur && firstInTie) { + firstInTie->fTied |= VLNote::kStartSlur; + } + n = decomp.begin(); e = decomp.end(); } else { diff --git a/Sources/VLModel.h b/Sources/VLModel.h index e9cc72c..4b71f4b 100644 --- a/Sources/VLModel.h +++ b/Sources/VLModel.h @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2005-2011 Matthias Neeracher +// Copyright © 2005-2018 Matthias Neeracher // #include @@ -159,14 +159,18 @@ struct VLNote { kOctave = 12 }; // - // We only allow ties BETWEEN measures. Within measures, we just store - // a combined note length. + // We only allow ties BETWEEN measures or different pitches. Within measures, we + // just store a combined note length. // - uint8_t fTied; // Tied with note in adjacent measure + uint8_t fTied; // Tied with adjacent note enum { kNotTied = 0, kTiedWithNext = 1, kTiedWithPrev = 2, + kSlurWithNext = 4, + kSlurWithPrev = 8, + kStartSlur = 16, + kEndSlur = 32, }; // // Hint at visual representation (Computed in DecomposeNotes) @@ -198,8 +202,8 @@ struct VLNote { kTupletMask = 0xFF00 }; - static int TupletNum(uint16_t visual) { return visual >> 12; } - static int TupletDenom(uint16_t visual) { return (visual >> 8) & 0x0F; } + static uint16_t TupletNum(uint16_t visual) { return visual >> 12; } + static uint16_t TupletDenom(uint16_t visual) { return (visual >> 8) & 0x0F; } static uint16_t Tuplet(int num, int denom) { return (num << 12) | (denom << 8); } VLNote(VLFraction dur=0, int pitch=kNoPitch, uint16_t visual=0); VLNote(std::string name); @@ -342,6 +346,8 @@ struct VLMeasure { bool IsEmpty() const; bool NoChords() const; bool CanSkipRests() const; + bool SlurAtStart() const; + bool SlurAtEnd() const; void DecomposeNotes(const VLProperties & prop, VLNoteList & decomposed) const; }; @@ -420,6 +426,26 @@ public: iterator begin() { return iterator(*this, false); } iterator end() { return iterator(*this, true); } + // Iterate over all notes in song + class note_iterator { + public: + note_iterator(const VLMeasureList::iterator &meas, const VLNoteList::iterator ¬e); + + VLLyricsNote &operator*() { return *fNoteIter; } + VLLyricsNote *operator->() { return &*fNoteIter; } + note_iterator &operator--(); + note_iterator &operator++(); + bool operator==(const note_iterator &other); + bool operator!=(const note_iterator &other) { return !(*this == other); } + private: + VLNoteList::iterator fNoteIter; + VLMeasureList::iterator fMeasIter; + }; + + note_iterator begin_note(size_t measure=0); + note_iterator end_note(size_t measure); + note_iterator end_note(); + VLLyricsNote FindNote(VLLocation at); bool PrevNote(VLLocation & at); bool NextNote(VLLocation & at); @@ -428,6 +454,7 @@ public: void DelChord(VLLocation at); void DelNote(VLLocation at); VLNote ExtendNote(VLLocation at); + VLLocation TieNote(VLLocation at, bool tieWithPrev); void AddRepeat(size_t beginMeasure, size_t endMeasure, int times); void DelRepeat(size_t beginMeasure, size_t endMeasure); void AddEnding(size_t beginMeasure, size_t endMeasure, size_t volta); @@ -493,10 +520,10 @@ class VLSongVisitor { public: virtual ~VLSongVisitor(); - virtual void Visit(VLSong & song) {} - virtual void VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas) {} - virtual void VisitNote(VLLyricsNote & n) {} - virtual void VisitChord(VLChord & c) {} + virtual void Visit(VLSong & song) {} + virtual void VisitMeasure(uint32_t m, VLProperties & p, VLMeasure & meas) {} + virtual void VisitNote(VLLyricsNote & n) {} + virtual void VisitChord(VLChord & c) {} protected: VLSongVisitor() {} @@ -504,6 +531,8 @@ protected: void VisitNotes(VLMeasure & measure, const VLProperties & prop, bool decomposed); void VisitChords(VLMeasure & measure); +private: + VLSong *fSong; }; #endif diff --git a/Sources/VLPDFView.mm b/Sources/VLPDFView.mm index 14abc4d..382abdc 100644 --- a/Sources/VLPDFView.mm +++ b/Sources/VLPDFView.mm @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2005-2007 Matthias Neeracher +// Copyright © 2005-2018 Matthias Neeracher // #import "VLPDFView.h" @@ -45,14 +45,14 @@ { // Display single page mode. if ([self displayMode] > kPDFDisplaySinglePageContinuous) - [self setDisplayMode: [self displayMode] - 2]; + [self setDisplayMode: static_cast([self displayMode] - 2)]; } - (IBAction) displayTwoUp: (id) sender { // Display two-up. if ([self displayMode] < kPDFDisplayTwoUp) - [self setDisplayMode: [self displayMode] + 2]; + [self setDisplayMode: static_cast([self displayMode] + 2)]; } - (IBAction) zoomToFit: (id) sender diff --git a/Sources/VLPListDocument.mm b/Sources/VLPListDocument.mm index a284760..7e4483f 100644 --- a/Sources/VLPListDocument.mm +++ b/Sources/VLPListDocument.mm @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2007-2011 Matthias Neeracher +// Copyright © 2007-2018 Matthias Neeracher // #import "VLPListDocument.h" @@ -26,11 +26,11 @@ public: VLPlistVisitor(NSMutableDictionary * plist, bool performanceOrder) : fPlist(plist), fPerfOrder(performanceOrder) {} - virtual void Visit(VLSong & song); + void Visit(VLSong & song) override; protected: - virtual void VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas); - virtual void VisitNote(VLLyricsNote & n); - virtual void VisitChord(VLChord & c); + void VisitMeasure(uint32_t m, VLProperties & p, VLMeasure & meas) override; + void VisitNote(VLLyricsNote & n) override; + void VisitChord(VLChord & c) override; NSArray * EncodeProperties(const std::vector & properties); NSDictionary * EncodeProperties(const VLProperties & properties); @@ -82,7 +82,7 @@ void VLPlistVisitor::Visit(VLSong & song) [fPlist setObject:fMeasures forKey:@"measures"]; } -void VLPlistVisitor::VisitMeasure(size_t m, VLProperties & p, VLMeasure & meas) +void VLPlistVisitor::VisitMeasure(uint32_t m, VLProperties & p, VLMeasure & meas) { fNotes = [NSMutableArray arrayWithCapacity:1]; fChords= [NSMutableArray arrayWithCapacity:1]; @@ -303,7 +303,7 @@ enum { kPotentialSwing16th }; -- (void)readMelody:(NSArray *)melody inMeasure:(size_t)measNo onsets:(int *)onsets lyrics:(uint8_t *)prevKind +- (void)readMelody:(NSArray *)melody inMeasure:(uint32_t)measNo onsets:(int *)onsets lyrics:(uint8_t *)prevKind { VLLocation at = {measNo, VLFraction(0)}; int lastOnset = 0; @@ -328,7 +328,7 @@ enum { [[ndict objectForKey:@"normalNotes"] intValue]); if ([[ndict objectForKey:@"tied"] intValue] & VLNote::kTiedWithPrev) { - if (at.fAt != VLFraction(0)) { + if (at.fAt != VLFraction(0) && note.fPitch == tiedNote.fPitch) { // // Extend preceding note // @@ -339,9 +339,9 @@ enum { goto advanceAt; } else { // - // Extend previous measure + // Slur or extend previous measure // - note.fTied |= VLNote::kTiedWithPrev; + note.fTied |= VLNote::kTiedWithPrev; } } else { for (NSEnumerator * le = [[ndict objectForKey:@"lyrics"] objectEnumerator]; @@ -402,7 +402,7 @@ advanceAt: } } -- (void)readChords:(NSArray *)chords inMeasure:(size_t)measNo +- (void)readChords:(NSArray *)chords inMeasure:(uint32_t)measNo { VLLocation at = {measNo, VLFraction(0)}; diff --git a/Sources/VLSheetView.h b/Sources/VLSheetView.h index 5052935..899934f 100644 --- a/Sources/VLSheetView.h +++ b/Sources/VLSheetView.h @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2005-2012 Matthias Neeracher +// Copyright © 2005-2018 Matthias Neeracher // #import @@ -109,6 +109,7 @@ const uint32_t kNoMeasure = (uint32_t)-1; IBOutlet id fKeyMenu; IBOutlet id fTimeMenu; IBOutlet id fDivisionMenu; + IBOutlet NSMenu *fNoteActionMenu; } @property (nonatomic) int numTopLedgers; diff --git a/Sources/VLSheetView.mm b/Sources/VLSheetView.mm index fafaf76..7f1793c 100644 --- a/Sources/VLSheetView.mm +++ b/Sources/VLSheetView.mm @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2005-2008 Matthias Neeracher +// Copyright © 2005-2018 Matthias Neeracher // #import "VLSheetView.h" @@ -804,6 +804,11 @@ const float kSemiFloor = -1.0f*kLineH; if ([event modifierFlags] & NSAlphaShiftKeyMask) return; // Keyboard mode, ignore mouse + if ([event modifierFlags] & NSControlKeyMask) { + [[NSCursor contextualMenuCursor] set]; + } else { + [[NSCursor arrowCursor] set]; + } bool hadCursor = fCursorRegion == kRegionNote; [self findRegionForEvent:event]; bool hasCursor = fCursorRegion == kRegionNote; @@ -830,17 +835,36 @@ const float kSemiFloor = -1.0f*kLineH; fCursorRegion = kRegionNowhere; [[self window] setAcceptsMouseMovedEvents:NO]; [self setNeedsDisplay:YES]; + [[NSCursor arrowCursor] set]; +} + +- (void) rightMouseDown:(NSEvent *)event +{ + [[self document] endSong]; + VLRegion region = [self findRegionForEvent:event]; + switch (region) { + case kRegionNote: + [NSMenu popUpContextMenu:fNoteActionMenu withEvent:event forView:self]; + break; + default: + break; + } } - (void) mouseDown:(NSEvent *)event { + if ([event modifierFlags] & NSControlKeyMask) { + [self rightMouseDown:event]; + return; + } + [[self document] endSong]; BOOL extend = ([event modifierFlags] & NSShiftKeyMask) != 0; VLRegion region = [self findRegionForEvent:event]; if (extend && [[self editTarget] canExtendSelection:region]) [[self editTarget] extendSelection:fCursorLocation]; - else + else switch (region) { case kRegionNote: [self setEditTarget:nil]; diff --git a/Sources/VLSheetViewChords.mm b/Sources/VLSheetViewChords.mm index 8e63eb9..1a44c82 100644 --- a/Sources/VLSheetViewChords.mm +++ b/Sources/VLSheetViewChords.mm @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2006-2017 Matthias Neeracher +// Copyright © 2006-2018 Matthias Neeracher // #import "VLSheetView.h" @@ -224,7 +224,7 @@ std::string NormalizeName(NSString* rawName) // Build new list // for (int m = 0; m= song->CountMeasures()) break; const VLMeasure measure = song->fMeasures[measIdx]; diff --git a/Sources/VLSheetViewLyrics.mm b/Sources/VLSheetViewLyrics.mm index 1ec58b3..a36b44f 100644 --- a/Sources/VLSheetViewLyrics.mm +++ b/Sources/VLSheetViewLyrics.mm @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2006-2007 Matthias Neeracher +// Copyright © 2006-2018 Matthias Neeracher // #import "VLSheetView.h" @@ -211,7 +211,7 @@ float VLCocoaFontHandler::Width(const char * utf8Text) // Build new list // for (int m = 0; m= song->CountMeasures()) break; const VLMeasure measure = song->fMeasures[measIdx]; diff --git a/Sources/VLSheetViewNotes.h b/Sources/VLSheetViewNotes.h index 7eb881e..9a2c188 100644 --- a/Sources/VLSheetViewNotes.h +++ b/Sources/VLSheetViewNotes.h @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2005-2011 Matthias Neeracher +// Copyright © 2005-2018 Matthias Neeracher // #import @@ -19,6 +19,11 @@ - (void) moveCursorToNextNote; - (void) moveCursorToPrevNote; +- (IBAction) tieNoteWithPrev:(id)sender; +- (IBAction) tieNoteWithNext:(id)sender; +- (IBAction) addRest:(id)sender; +- (IBAction) deleteNote:(id)sender; + @end // Local Variables: diff --git a/Sources/VLSheetViewNotes.mm b/Sources/VLSheetViewNotes.mm index 0ec795f..922d89d 100644 --- a/Sources/VLSheetViewNotes.mm +++ b/Sources/VLSheetViewNotes.mm @@ -5,7 +5,7 @@ // // (MN) Matthias Neeracher // -// Copyright © 2005-2011 Matthias Neeracher +// Copyright © 2005-2018 Matthias Neeracher // #import "VLSheetView.h" @@ -19,6 +19,43 @@ @implementation VLSheetView (Notes) +- (IBAction)tieNoteWithPrev:(id)sender +{ + if (fCursorLocation.fMeasure != kNoMeasure) { + [[self document] willChangeSong]; + [self song]->TieNote(fCursorLocation, true); + [[self document] didChangeSong]; + } +} + +- (IBAction)tieNoteWithNext:(id)sender +{ + if (fCursorLocation.fMeasure != kNoMeasure) { + [[self document] willChangeSong]; + [self song]->TieNote(fCursorLocation, false); + [[self document] didChangeSong]; + } +} + +- (IBAction)addRest:(id)sender +{ + if (fCursorLocation.fMeasure != kNoMeasure) { + VLLyricsNote note; + [[self document] willChangeSong]; + [self song]->AddNote(note, fCursorLocation); + [[self document] didChangeSong]; + } +} + +- (IBAction)deleteNote:(id)sender +{ + if (fCursorLocation.fMeasure != kNoMeasure) { + [[self document] willChangeSong]; + [self song]->DelNote(fCursorLocation); + [[self document] didChangeSong]; + } +} + - (void) addNoteAtCursor { if (fCursorLocation.fMeasure != kNoMeasure && fCursorVertPos != kCursorNoPitch) { @@ -349,7 +386,7 @@ for (int m = 0; m= song->CountMeasures()) break; const VLMeasure & measure = song->fMeasures[measIdx]; diff --git a/Sources/VLSoundOut.cpp b/Sources/VLSoundOut.cpp index a1ae84b..12f9bc8 100644 --- a/Sources/VLSoundOut.cpp +++ b/Sources/VLSoundOut.cpp @@ -132,8 +132,8 @@ void VLSoundScheduler::Schedule(VLSoundEvent * what, float when) what->Perform(); } -static std::auto_ptr sSoundOut; -static std::auto_ptr sSoundScheduler; +static std::unique_ptr sSoundOut; +static std::unique_ptr sSoundScheduler; VLSoundOut * VLSoundOut::Instance() { @@ -160,7 +160,7 @@ void VLSoundOut::PlayFile(CFDataRef file) MusicSequence music; NewMusicSequence(&music); - MusicSequenceFileLoadData(music, file, 0, 0); + MusicSequenceFileLoadData(music, file, kMusicSequenceFile_MIDIType, 0); PlaySequence(music); } @@ -517,7 +517,7 @@ void VLAUSoundOut::Play(const int8_t * note, size_t numNotes) const int8_t kNoteVelocity = 127; for (int i=0; i(note[i]), kNoteVelocity, 0, 1.0}; MusicTrackNewMIDINoteEvent(track, 0.0, &n); } diff --git a/TestData/.DS_Store b/TestData/.DS_Store deleted file mode 100644 index dfe7b45..0000000 Binary files a/TestData/.DS_Store and /dev/null differ diff --git a/VocalEasel.xcodeproj/project.pbxproj b/VocalEasel.xcodeproj/project.pbxproj index 5dbe470..a6f2d06 100644 --- a/VocalEasel.xcodeproj/project.pbxproj +++ b/VocalEasel.xcodeproj/project.pbxproj @@ -1642,6 +1642,8 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LIBRARY = "libc++"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1665,6 +1667,8 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LIBRARY = "libc++"; COPY_PHASE_STRIP = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -1686,6 +1690,8 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LIBRARY = "libc++"; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = Sources/VocalEasel_Prefix.pch; diff --git a/VocalEasel.xcodeproj/xcuserdata/neeri.xcuserdatad/xcschemes/VocalEasel.xcscheme b/VocalEasel.xcodeproj/xcuserdata/neeri.xcuserdatad/xcschemes/VocalEasel.xcscheme index 94c2bab..59001c4 100644 --- a/VocalEasel.xcodeproj/xcuserdata/neeri.xcuserdatad/xcschemes/VocalEasel.xcscheme +++ b/VocalEasel.xcodeproj/xcuserdata/neeri.xcuserdatad/xcschemes/VocalEasel.xcscheme @@ -22,8 +22,8 @@