From 11d4a650765720c73789651570e8edc59f237b61 Mon Sep 17 00:00:00 2001 From: Matthias Neeracher Date: Sat, 27 Aug 2011 18:06:28 +0200 Subject: [PATCH] Factor out pitch naming/parsing, unit test works --- Sources/VLModel.h | 39 ++- Sources/VLPitchName.cpp | 122 ++++++++ Sources/VLPitchName.h | 31 ++ Tests/TVLPitchNames/TVLPitchNames-Info.plist | 22 ++ Tests/TVLPitchNames/TVLPitchNames-Prefix.pch | 7 + Tests/TVLPitchNames/TVLPitchNames.h | 13 + Tests/TVLPitchNames/TVLPitchNames.mm | 139 +++++++++ .../TVLPitchNames/en.lproj/InfoPlist.strings | 2 + Tests/TVLStringAccidentals.h | 19 ++ Tests/TVLStringAccidentals.mm | 40 +++ VocalEasel.xcodeproj/project.pbxproj | 282 ++++++++++++++---- .../contents.xcworkspacedata | 7 + 12 files changed, 647 insertions(+), 76 deletions(-) create mode 100644 Sources/VLPitchName.cpp create mode 100644 Sources/VLPitchName.h create mode 100644 Tests/TVLPitchNames/TVLPitchNames-Info.plist create mode 100644 Tests/TVLPitchNames/TVLPitchNames-Prefix.pch create mode 100644 Tests/TVLPitchNames/TVLPitchNames.h create mode 100644 Tests/TVLPitchNames/TVLPitchNames.mm create mode 100644 Tests/TVLPitchNames/en.lproj/InfoPlist.strings create mode 100644 Tests/TVLStringAccidentals.h create mode 100644 Tests/TVLStringAccidentals.mm create mode 100644 VocalEasel.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/Sources/VLModel.h b/Sources/VLModel.h index 046633f..0c068c7 100644 --- a/Sources/VLModel.h +++ b/Sources/VLModel.h @@ -13,10 +13,6 @@ #include #include -const int kVLSharpChar = 0x266F; -const int kVLFlatChar = 0x266D; -#define kVLSharpStr "\xE2\x99\xAF" -#define kVLFlatStr "\xE2\x99\xAD" struct VLFract { uint16_t fNum; // Numerator @@ -135,20 +131,31 @@ struct VLNote { // // Hint at visual representation (Computed in DecomposeNotes) // - uint8_t fVisual; + uint16_t fVisual; enum { - kWhole = 0, - kHalf = 1, - kQuarter = 2, - kEighth = 3, - k16th = 4, - k32nd = 5, + kWhole = 0, + kHalf = 1, + kQuarter = 2, + kEighth = 3, + k16th = 4, + k32nd = 5, - kNoteHead = 0x07, - kWantSharp = 0x20, - kWantFlat = 0x40, - kAccidentals= 0x60, - kTriplet = 0x80 + kNoteHeadMask = 0x0007, + + kWantSharp = 0x10, + kWant2Sharp = 0x20, + kPreferSharps = 0x30, // kWantSharp | kWant2Sharp + kWantFlat = 0x40, + kWant2Flat = 0x80, + kPreferFlats = 0xC0, // kWantFlat | kWant2Flat + kWantNatural = 0x50, // kWantSharp | kWantFlat + kNaturalOrSharp = 0x70, // kPreferSharps| kWantFlat + kNaturalOrFlat = 0xD0, // kPreferFlats | kWantSharp + + kAccidentalsMask= 0x00F0, + + kTriplet = 0x300, + kTupletMask = 0x0F00 }; VLNote(VLFraction dur=0, int pitch=kNoPitch); VLNote(std::string name); diff --git a/Sources/VLPitchName.cpp b/Sources/VLPitchName.cpp new file mode 100644 index 0000000..b6c391d --- /dev/null +++ b/Sources/VLPitchName.cpp @@ -0,0 +1,122 @@ +// +// File: VLPitchName.cpp - Translate between (MIDI) pitches and their UTF-8 representation +// +// Author(s): +// +// (MN) Matthias Neeracher +// +// Copyright © 2011 Matthias Neeracher +// + +#include "VLPitchName.h" +#include "VLModel.h" + +const char * kVLSharpStr = "\xE2\x99\xAF"; +const char * kVLFlatStr = "\xE2\x99\xAD"; +const char * kVL2SharpStr = "\xF0\x9D\x84\xAA"; +const char * kVL2FlatStr = "\xF0\x9D\x84\xAB"; +const char * kVLNaturalStr = "\xE2\x99\xAE"; + +static const char kScale[] = "C D EF G A B"; +static const char * kFancyAccidental[] = +{ + kVL2SharpStr, kVLSharpStr, "", kVLFlatStr, kVL2FlatStr +}; +const int8_t kAccidentalBase = 2; + +std::string VLPitchName(int8_t pitch, uint16_t accidental) +{ + if (pitch == VLNote::kNoPitch) + return "r"; + int8_t adjust; + accidental &= VLNote::kAccidentalsMask; + switch (accidental) { + case VLNote::kWant2Flat: + adjust = 2; + break; + case VLNote::kWantFlat: + adjust = 1; + break; + case VLNote::kWantSharp: + adjust = -1; + break; + case VLNote::kWant2Sharp: + adjust = -2; + break; + default: + adjust = 0; + break; + } + pitch += adjust; + pitch %= 12; + // + // Will either succeed immediately, or after one adjustment + // + if (kScale[pitch] == ' ') + if (adjust < 0 || (accidental & VLNote::kPreferFlats) == VLNote::kPreferFlats) { + ++adjust; + pitch = (pitch+1)%12; + } else { + --adjust; + pitch = (pitch+11)%12; + } + std::string name = std::string(1, kScale[pitch]); + if (adjust) + return name+kFancyAccidental[adjust+kAccidentalBase]; + else if ((accidental & VLNote::kWantNatural) == VLNote::kWantNatural) + return name+kVLNaturalStr; + else + return name; +} + +static bool TestAccidental(uint16_t acc, int8_t adjust, std::string & str, size_t at, + const char * fancyStr, const char * asciiString, + int8_t & pitch, uint16_t * accidental) +{ + size_t sz = str.size()-at; + size_t fancySz = strlen(fancyStr); + if (sz >= fancySz && !memcmp(fancyStr, &str[at], fancySz)) { + pitch += adjust; + *accidental = acc; + str.erase(at, fancySz); + return true; + } + size_t asciiSz = strlen(asciiString); + if (!asciiSz || sz < asciiSz) + return false; + + for (size_t cmp = at; *asciiString; ) + if (std::toupper(str[cmp++]) != *asciiString++) + return false; + pitch += adjust; + *accidental = acc; + str.erase(at, asciiSz); + return true; +} + +int8_t VLParsePitch(std::string & str, size_t at, uint16_t * accidental) +{ + int8_t pitch = VLNote::kNoPitch; + // + // Determine key + // + if (const char * key = strchr(kScale, std::toupper(str[at]))) { + pitch = key-kScale+VLNote::kMiddleC; + } else if (str[at] == 'r' || str[at] == 's') { + str.erase(at, 1); // Rest + return VLNote::kNoPitch; + } else + return kPitchError; + str.erase(at, 1); + // + // Look for accidentals + // + TestAccidental(VLNote::kWant2Flat, -2, str, at, kVL2FlatStr, "BB", pitch, accidental) || + TestAccidental(VLNote::kWantFlat, -1, str, at, kVLFlatStr, "B", pitch, accidental) || + TestAccidental(VLNote::kWantNatural, 0, str, at, kVLNaturalStr, "", pitch, accidental) || + TestAccidental(VLNote::kWant2Sharp, 2, str, at, kVL2SharpStr, "##", pitch, accidental) || + TestAccidental(VLNote::kWantSharp, 1, str, at, kVLSharpStr, "#", pitch, accidental) || + (*accidental = 0); + + return pitch; +} diff --git a/Sources/VLPitchName.h b/Sources/VLPitchName.h new file mode 100644 index 0000000..3557009 --- /dev/null +++ b/Sources/VLPitchName.h @@ -0,0 +1,31 @@ +// +// File: VLPitchName.h - Translate between (MIDI) pitches and their UTF-8 representation +// +// Author(s): +// +// (MN) Matthias Neeracher +// +// Copyright © 2011 Matthias Neeracher +// + +#include +#include + +const int kVLSharpChar = 0x266F; +const int kVLFlatChar = 0x266D; +extern const char * kVLSharpStr; +extern const char * kVLFlatStr; +extern const char * kVL2SharpStr; +extern const char * kVL2FlatStr; +extern const char * kVLNaturalStr; + +// +// UTF-8 representation of pitch +// +std::string VLPitchName(int8_t pitch, uint16_t accidental); + +// +// Parse pitch, erase from string +// +enum { kPitchError = -1 }; +int8_t VLParsePitch(std::string & str, size_t at, uint16_t * accidental); diff --git a/Tests/TVLPitchNames/TVLPitchNames-Info.plist b/Tests/TVLPitchNames/TVLPitchNames-Info.plist new file mode 100644 index 0000000..0e7509b --- /dev/null +++ b/Tests/TVLPitchNames/TVLPitchNames-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + org.aereperennius.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Tests/TVLPitchNames/TVLPitchNames-Prefix.pch b/Tests/TVLPitchNames/TVLPitchNames-Prefix.pch new file mode 100644 index 0000000..8f8fd93 --- /dev/null +++ b/Tests/TVLPitchNames/TVLPitchNames-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'TVLPitchNames' target in the 'TVLPitchNames' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Tests/TVLPitchNames/TVLPitchNames.h b/Tests/TVLPitchNames/TVLPitchNames.h new file mode 100644 index 0000000..ef60695 --- /dev/null +++ b/Tests/TVLPitchNames/TVLPitchNames.h @@ -0,0 +1,13 @@ +// +// TVLPitchNames.h +// TVLPitchNames +// +// Created by Matthias Neeracher on 8/27/11. +// Copyright 2011 Matthias Neeracher +// + +#import + +@interface TVLPitchNames : SenTestCase + +@end diff --git a/Tests/TVLPitchNames/TVLPitchNames.mm b/Tests/TVLPitchNames/TVLPitchNames.mm new file mode 100644 index 0000000..4eba0e6 --- /dev/null +++ b/Tests/TVLPitchNames/TVLPitchNames.mm @@ -0,0 +1,139 @@ +// +// TVLPitchNames.m +// TVLPitchNames +// +// Created by Matthias Neeracher on 8/27/11. +// Copyright 2011 Matthias Neeracher +// + +#import "TVLPitchNames.h" +#import "TVLStringAccidentals.h" +#import "VLPitchName.h" +#import "VLModel.h" + +@implementation TVLPitchNames + +- (void)setUp +{ + [super setUp]; +} + +- (void)tearDown +{ + [super tearDown]; +} + +#define TestPitchName(expected, pitch, accidental) \ + STAssertEqualObjects(expected, \ + [NSString stringWithUTF8String:VLPitchName(pitch, accidental).c_str()], \ + @"VLPitchName(%d, %d)", pitch, accidental); + +- (void)testPitchName +{ + // + // These pitches should cover all cases + // + const int8_t kC = VLNote::kMiddleC; // Beginning of octave, 1 step below, 2 above + const int8_t kCis = VLNote::kMiddleC+1; // 1&2 steps below, 1 above + const int8_t kD = VLNote::kMiddleC+2; // 2 steps below, 2 above + const int8_t kBes = VLNote::kMiddleC+10; // 1 step below, 1&2 above + const int8_t kB = VLNote::kMiddleC+11; // End of octave, 2 steps below, 1 above + const int8_t kF = VLNote::kMiddleC+5; // Test name only + const int8_t kG = VLNote::kMiddleC+7; // Test name only + + TestPitchName(@"C", kC, 0); + TestPitchName([@"C" natural], kC, VLNote::kWantNatural); + TestPitchName(@"C", kC, VLNote::kPreferSharps); + TestPitchName(@"C", kC, VLNote::kPreferFlats); + TestPitchName([@"B" sharp], kC, VLNote::kWantSharp); + TestPitchName(@"C", kC, VLNote::kWantFlat); + TestPitchName([@"B" sharp], kC, VLNote::kWant2Sharp); + TestPitchName([@"D" doubleFlat], kC, VLNote::kWant2Flat); + TestPitchName([@"C" natural], kC, VLNote::kNaturalOrSharp); + TestPitchName([@"C" natural], kC, VLNote::kNaturalOrFlat); + + TestPitchName([@"C" sharp], kCis, 0); + TestPitchName([@"C" sharp], kCis, VLNote::kWantNatural); + TestPitchName([@"C" sharp], kCis, VLNote::kPreferSharps); + TestPitchName([@"D" flat], kCis, VLNote::kPreferFlats); + TestPitchName([@"C" sharp], kCis, VLNote::kWantSharp); + TestPitchName([@"D" flat], kCis, VLNote::kWantFlat); + TestPitchName([@"B" doubleSharp], kCis, VLNote::kWant2Sharp); + TestPitchName([@"D" flat], kCis, VLNote::kWant2Flat); + TestPitchName([@"C" sharp], kCis, VLNote::kNaturalOrSharp); + TestPitchName([@"D" flat], kCis, VLNote::kNaturalOrFlat); + + TestPitchName(@"D", kD, 0); + TestPitchName([@"D" natural], kD, VLNote::kWantNatural); + TestPitchName(@"D", kD, VLNote::kPreferSharps); + TestPitchName(@"D", kD, VLNote::kPreferFlats); + TestPitchName(@"D", kD, VLNote::kWantSharp); + TestPitchName(@"D", kD, VLNote::kWantFlat); + TestPitchName([@"C" doubleSharp], kD, VLNote::kWant2Sharp); + TestPitchName([@"E" doubleFlat], kD, VLNote::kWant2Flat); + + TestPitchName(@"F", kF, 0); + TestPitchName(@"G", kG, 0); + + TestPitchName([@"A" sharp], kBes, 0); + TestPitchName([@"A" sharp], kBes, VLNote::kWantNatural); + TestPitchName([@"A" sharp], kBes, VLNote::kPreferSharps); + TestPitchName([@"B" flat], kBes, VLNote::kPreferFlats); + TestPitchName([@"A" sharp], kBes, VLNote::kWantSharp); + TestPitchName([@"B" flat], kBes, VLNote::kWantFlat); + TestPitchName([@"A" sharp], kBes, VLNote::kWant2Sharp); + TestPitchName([@"C" doubleFlat], kBes, VLNote::kWant2Flat); + TestPitchName([@"A" sharp], kBes, VLNote::kNaturalOrSharp); + TestPitchName([@"B" flat], kBes, VLNote::kNaturalOrFlat); + + TestPitchName(@"B", kB, 0); + TestPitchName([@"B" natural], kB, VLNote::kWantNatural); + TestPitchName(@"B", kB, VLNote::kPreferSharps); + TestPitchName(@"B", kB, VLNote::kPreferFlats); + TestPitchName(@"B", kB, VLNote::kWantSharp); + TestPitchName([@"C" flat], kB, VLNote::kWantFlat); + TestPitchName([@"A" doubleSharp], kB, VLNote::kWant2Sharp); + TestPitchName([@"C" flat], kB, VLNote::kWant2Flat); + TestPitchName([@"B" natural], kB, VLNote::kNaturalOrSharp); + TestPitchName([@"B" natural], kB, VLNote::kNaturalOrFlat); +} + +#define TestParsePitchAtOffset(pitch, accidental, str, at) \ + { std::string cppStr = [str UTF8String]; uint16_t acc; \ + STAssertEquals(pitch, (int)VLParsePitch(cppStr, at, &acc),@"VLParsePitch(%@, %lu)", str, at); \ + STAssertEquals((uint16_t)accidental, acc, @"VLParsePitch(%@, %lu) [accidental]", str, at); \ + STAssertEquals((size_t)at, cppStr.size(), @"VLParsePitch(%@, %lu) [cleanup]", str, at); \ + } while (0) + +#define TestParsePitch(pitch, accidental, str) TestParsePitchAtOffset(pitch,accidental,str,0) + +- (void)testParsePitch +{ + const int kBes = VLNote::kMiddleC-2; + const int kCes = VLNote::kMiddleC-1; + const int kC = VLNote::kMiddleC; + const int kCis = VLNote::kMiddleC+1; + const int kD = VLNote::kMiddleC+2; + const int kE = VLNote::kMiddleC+4; + const int kF = VLNote::kMiddleC+5; + const int kB = VLNote::kMiddleC+11; + + TestParsePitch(kC, 0, @"C"); + TestParsePitch(kC, VLNote::kWantNatural, [@"C" natural]); + TestParsePitch(kCes, VLNote::kWantFlat, [@"C" flat]); + TestParsePitch(kCes, VLNote::kWantFlat, @"cb"); + TestParsePitch(kCis, VLNote::kWantSharp, [@"C" sharp]); + TestParsePitch(kCis, VLNote::kWantSharp, @"C#"); + TestParsePitch(kBes, VLNote::kWant2Flat, [@"C" doubleFlat]); + TestParsePitch(kBes, VLNote::kWant2Flat, @"CbB"); + TestParsePitch(kD, VLNote::kWant2Sharp, [@"C" doubleSharp]); + TestParsePitch(kD, VLNote::kWant2Sharp, @"C##"); + + TestParsePitchAtOffset(kE, 0, @"xE", 1); + TestParsePitchAtOffset(kE, VLNote::kWantFlat, [@"xF" flat], 1); + TestParsePitchAtOffset(kF, VLNote::kWant2Flat, @"CGBb", 1); + TestParsePitchAtOffset(kB, VLNote::kWant2Sharp, [@"gA" doubleSharp],1); + TestParsePitchAtOffset(kB, 0, @"C/B", 2); +} + +@end diff --git a/Tests/TVLPitchNames/en.lproj/InfoPlist.strings b/Tests/TVLPitchNames/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/Tests/TVLPitchNames/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Tests/TVLStringAccidentals.h b/Tests/TVLStringAccidentals.h new file mode 100644 index 0000000..ca19941 --- /dev/null +++ b/Tests/TVLStringAccidentals.h @@ -0,0 +1,19 @@ +// +// TVLStringAccidentals.h +// VocalEasel +// +// Created by Matthias Neeracher on 8/27/11. +// Copyright 2011 Apple Computer. All rights reserved. +// + +#import + +@interface NSString (TVLStringAccidentals) + +- (NSString *)sharp; +- (NSString *)flat; +- (NSString *)natural; +- (NSString *)doubleSharp; +- (NSString *)doubleFlat; + +@end diff --git a/Tests/TVLStringAccidentals.mm b/Tests/TVLStringAccidentals.mm new file mode 100644 index 0000000..cc3633f --- /dev/null +++ b/Tests/TVLStringAccidentals.mm @@ -0,0 +1,40 @@ +// +// TVLStringAccidentals.mm +// VocalEasel +// +// Created by Matthias Neeracher on 8/27/11. +// Copyright 2011 Apple Computer. All rights reserved. +// + +#import "TVLStringAccidentals.h" +#import "VLPitchName.h" + +@implementation NSString (TVLStringAccidentals) + +- (NSString *)sharp +{ + return [self stringByAppendingString:[NSString stringWithUTF8String:kVLSharpStr]]; +} + +- (NSString *)flat +{ + return [self stringByAppendingString:[NSString stringWithUTF8String:kVLFlatStr]]; + +} + +- (NSString *)natural +{ + return [self stringByAppendingString:[NSString stringWithUTF8String:kVLNaturalStr]]; +} + +- (NSString *)doubleSharp +{ + return [self stringByAppendingString:[NSString stringWithUTF8String:kVL2SharpStr]]; +} + +- (NSString *)doubleFlat +{ + return [self stringByAppendingString:[NSString stringWithUTF8String:kVL2FlatStr]]; +} + +@end diff --git a/VocalEasel.xcodeproj/project.pbxproj b/VocalEasel.xcodeproj/project.pbxproj index 4c19751..2fb28eb 100644 --- a/VocalEasel.xcodeproj/project.pbxproj +++ b/VocalEasel.xcodeproj/project.pbxproj @@ -11,7 +11,6 @@ 8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165FFE840EACC02AAC07 /* InfoPlist.strings */; }; 8D15AC310486D014006FF6A4 /* VLDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4ACFDCFA73011CA2CEA /* VLDocument.mm */; settings = {ATTRIBUTES = (); }; }; 8D15AC320486D014006FF6A4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4B0FDCFA73011CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; - 8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */; }; 95003B4B0D4B9A5D00C9849C /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 95003B3F0D4B9A5D00C9849C /* MainMenu.xib */; }; 95003B4C0D4B9A5D00C9849C /* VLDocument.xib in Resources */ = {isa = PBXBuildFile; fileRef = 95003B410D4B9A5D00C9849C /* VLDocument.xib */; }; 95003B4D0D4B9A5D00C9849C /* VLGroove.xib in Resources */ = {isa = PBXBuildFile; fileRef = 95003B430D4B9A5D00C9849C /* VLGroove.xib */; }; @@ -26,18 +25,14 @@ 95009B7F0B0EDC7900EB33A4 /* CAAudioFileFormats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95009B240B0ECF9000EB33A4 /* CAAudioFileFormats.cpp */; }; 95009B800B0EDC7B00EB33A4 /* CADebugMacros.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95009B4E0B0ED0BB00EB33A4 /* CADebugMacros.cpp */; }; 95009B810B0EDC7D00EB33A4 /* CAStreamBasicDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95009B260B0ECF9000EB33A4 /* CAStreamBasicDescription.cpp */; }; - 95009B830B0EDCD800EB33A4 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95009B820B0EDCD800EB33A4 /* CoreFoundation.framework */; }; 95049CF30BDC32EB0015EE6E /* installLilypond.scpt in Resources */ = {isa = PBXBuildFile; fileRef = 95049CF20BDC32CD0015EE6E /* installLilypond.scpt */; }; 95049D020BDC436A0015EE6E /* installPython.scpt in Resources */ = {isa = PBXBuildFile; fileRef = 95049D010BDC43510015EE6E /* installPython.scpt */; }; 95140E3C0C944F7F00966576 /* org.lilypond.lilypond-source.reader in Copy Filters */ = {isa = PBXBuildFile; fileRef = 95140E3B0C944F7F00966576 /* org.lilypond.lilypond-source.reader */; }; 9524DAFB0BE569C50002AC03 /* Help in Resources */ = {isa = PBXBuildFile; fileRef = 9524DAF70BE569C50002AC03 /* Help */; }; - 9524DB390BE5CA070002AC03 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9524DB380BE5CA070002AC03 /* Carbon.framework */; }; 95297F310C9ADA33007EFD6B /* VLBIABType.reader in Copy Filters */ = {isa = PBXBuildFile; fileRef = 95297F300C9ADA33007EFD6B /* VLBIABType.reader */; }; 952CBB9C095FD1CA00434E43 /* VLSoundOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952CBB9A095FD1CA00434E43 /* VLSoundOut.cpp */; }; 952CBB9D095FD1CA00434E43 /* VLSoundOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952CBB9A095FD1CA00434E43 /* VLSoundOut.cpp */; }; 952CBB9F095FD1D900434E43 /* TVLSoundOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952CBB9E095FD1D900434E43 /* TVLSoundOut.cpp */; }; - 952CBBB4095FD34F00434E43 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 952CBBB2095FD34F00434E43 /* AudioToolbox.framework */; }; - 952CBBB5095FD34F00434E43 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 952CBBB3095FD34F00434E43 /* AudioUnit.framework */; }; 952CBBB6095FD37300434E43 /* VLModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955E58E4095658AB0045FDA5 /* VLModel.cpp */; }; 952DCD78096BBB11001C2316 /* VLSheetViewChords.mm in Sources */ = {isa = PBXBuildFile; fileRef = 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */; }; 9530A7020BD9E16700635FEC /* display.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 9530A7010BD9E16700635FEC /* display.tiff */; }; @@ -60,8 +55,6 @@ 95795CE70C88B25D00E4A21F /* VLMusicXMLType.reader in Copy Filters */ = {isa = PBXBuildFile; fileRef = 95795CE50C88B25D00E4A21F /* VLMusicXMLType.reader */; }; 9588363C0C6F9C7D004B4162 /* VLPListDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9588363B0C6F9C7D004B4162 /* VLPListDocument.mm */; }; 9588365C0C6FABBA004B4162 /* VLDebugFlags.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9588365A0C6FABBA004B4162 /* VLDebugFlags.cpp */; }; - 95932B91096527700008B0DB /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 952CBBB3095FD34F00434E43 /* AudioUnit.framework */; }; - 95932B92096527710008B0DB /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 952CBBB2095FD34F00434E43 /* AudioToolbox.framework */; }; 9593E4E80AE0ED1F00035816 /* vlsong.icns in Resources */ = {isa = PBXBuildFile; fileRef = 9593E4E60AE0ED1F00035816 /* vlsong.icns */; }; 9593E4E90AE0ED1F00035816 /* vlapp.icns in Resources */ = {isa = PBXBuildFile; fileRef = 9593E4E70AE0ED1F00035816 /* vlapp.icns */; }; 959408AD096922EA007CCCF8 /* TVLEdit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 959408AC096922EA007CCCF8 /* TVLEdit.cpp */; }; @@ -75,9 +68,9 @@ 959A3A290DE78BCD00EF207B /* toend.icns in Resources */ = {isa = PBXBuildFile; fileRef = 959A3A250DE78BCD00EF207B /* toend.icns */; }; 959A3A6E0DE8CB5B00EF207B /* VLMIDIWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 959A3A6C0DE8CB5B00EF207B /* VLMIDIWriter.cpp */; }; 959B77C20DE3139F004432E0 /* installLame.scpt in Resources */ = {isa = PBXBuildFile; fileRef = 958139C20DE2FBE4003C00B4 /* installLame.scpt */; }; - 95A1C37C0AF1D4370076597D /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95A1C37B0AF1D4370076597D /* Quartz.framework */; }; 95A1C3860AF2ACE20076597D /* VLSheetWindow.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95A1C3850AF2ACE20076597D /* VLSheetWindow.mm */; }; 95A55C540BD5E5770068A203 /* VLPDFDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95A55C530BD5E5770068A203 /* VLPDFDocument.mm */; }; + 95AC700014094108007EA050 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95AC6FFF14094107007EA050 /* Cocoa.framework */; }; 95B3E1A70960E58B000E9C0D /* Music in Resources */ = {isa = PBXBuildFile; fileRef = 95B3E1980960E58B000E9C0D /* Music */; }; 95B66658096BCA1F00FE18C9 /* VLSheetViewNotes.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95B66657096BCA1F00FE18C9 /* VLSheetViewNotes.mm */; }; 95BDA15909540BF1009F9D65 /* VLSheetView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95BDA15809540BF1009F9D65 /* VLSheetView.mm */; }; @@ -87,6 +80,13 @@ 95C461FE0B04432700649F92 /* MMA in Copy MMA Library */ = {isa = PBXBuildFile; fileRef = 95C461DD0B04430F00649F92 /* MMA */; }; 95C462000B04472E00649F92 /* mmaWrapper in Copy Tools */ = {isa = PBXBuildFile; fileRef = 95C461FF0B04472900649F92 /* mmaWrapper */; }; 95C462830B045CB700649F92 /* lilyWrapper in Copy Tools */ = {isa = PBXBuildFile; fileRef = 95C4627A0B045C8E00649F92 /* lilyWrapper */; }; + 95CFA83814091B7800D0DB0D /* VLPitchName.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95CFA83714091B7800D0DB0D /* VLPitchName.cpp */; }; + 95CFA8491409291500D0DB0D /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95CFA8481409291500D0DB0D /* SenTestingKit.framework */; }; + 95CFA8511409291500D0DB0D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 95CFA84F1409291500D0DB0D /* InfoPlist.strings */; }; + 95CFA8531409291500D0DB0D /* TVLPitchNames.h in Resources */ = {isa = PBXBuildFile; fileRef = 95CFA8521409291500D0DB0D /* TVLPitchNames.h */; }; + 95CFA8551409291500D0DB0D /* TVLPitchNames.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95CFA8541409291500D0DB0D /* TVLPitchNames.mm */; }; + 95CFA85B140930CD00D0DB0D /* VLPitchName.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95CFA83714091B7800D0DB0D /* VLPitchName.cpp */; }; + 95CFA85F1409356900D0DB0D /* TVLStringAccidentals.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95CFA85D1409355D00D0DB0D /* TVLStringAccidentals.mm */; }; 95D0597A0D1E6B0D00E28FAE /* VLLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95D059780D1E6B0D00E28FAE /* VLLayout.cpp */; }; 95D0C2FC0B785D020061080E /* rebuildGrooves in Copy Tools */ = {isa = PBXBuildFile; fileRef = 95D0C2FB0B785D020061080E /* rebuildGrooves */; }; 95E04DA70AEB486E006F30A0 /* TVLLilypond.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95E04DA60AEB486E006F30A0 /* TVLLilypond.mm */; }; @@ -94,7 +94,6 @@ 95E04DA90AEB487A006F30A0 /* VLLilypondDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 953722660AE9F0E100B6E483 /* VLLilypondDocument.mm */; }; 95E04DAA0AEB487E006F30A0 /* VLModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955E58E4095658AB0045FDA5 /* VLModel.cpp */; }; 95E04DAB0AEB4886006F30A0 /* VLXMLDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95F5F50E0ADCC433003980B2 /* VLXMLDocument.mm */; }; - 95E04DC70AEB4B57006F30A0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */; }; 95E04DCE0AEB4D9B006F30A0 /* Templates in Resources */ = {isa = PBXBuildFile; fileRef = 95E04DCA0AEB4D9B006F30A0 /* Templates */; }; 95E299C00B2006F5001977D2 /* VLSheetViewLyrics.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95E299BE0B2006F5001977D2 /* VLSheetViewLyrics.mm */; }; 95EDA5AB0B06DE47004D8D6E /* VLMIDIDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95EDA5A90B06DE46004D8D6E /* VLMIDIDocument.mm */; }; @@ -164,14 +163,10 @@ /* Begin PBXFileReference section */ 089C1660FE840EACC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; - 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; - 13E42FBA07B3F13500E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; 2A37F4ACFDCFA73011CA2CEA /* VLDocument.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLDocument.mm; path = Sources/VLDocument.mm; sourceTree = ""; }; 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLDocument.h; path = Sources/VLDocument.h; sourceTree = ""; }; 2A37F4B0FDCFA73011CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Sources/main.m; sourceTree = ""; }; 2A37F4BAFDCFA73011CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/Credits.rtf; sourceTree = ""; }; - 2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; - 2A37F4C5FDCFA73011CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 32DBCF750370BD2300C91783 /* Vocalese_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vocalese_Prefix.pch; path = Sources/Vocalese_Prefix.pch; sourceTree = ""; }; 8D15AC360486D014006FF6A4 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Resources/Info.plist; sourceTree = ""; }; 8D15AC370486D014006FF6A4 /* VocalEasel.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VocalEasel.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -191,19 +186,15 @@ 95009B4F0B0ED0BB00EB33A4 /* CADebugMacros.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = CADebugMacros.h; path = Sources/CoreAudioSDK/CADebugMacros.h; sourceTree = ""; }; 95009B620B0ED18700EB33A4 /* CAConditionalMacros.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = CAConditionalMacros.h; path = Sources/CoreAudioSDK/CAConditionalMacros.h; sourceTree = ""; }; 95009B630B0ED18700EB33A4 /* CAMath.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = CAMath.h; path = Sources/CoreAudioSDK/CAMath.h; sourceTree = ""; }; - 95009B820B0EDCD800EB33A4 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; 95049CF20BDC32CD0015EE6E /* installLilypond.scpt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = file; name = installLilypond.scpt; path = Resources/installLilypond.scpt; sourceTree = ""; }; 95049D010BDC43510015EE6E /* installPython.scpt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = file; name = installPython.scpt; path = Resources/installPython.scpt; sourceTree = ""; }; 95140E3B0C944F7F00966576 /* org.lilypond.lilypond-source.reader */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = "org.lilypond.lilypond-source.reader"; sourceTree = ""; }; 9524DAF70BE569C50002AC03 /* Help */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Help; path = Resources/Help; sourceTree = ""; }; - 9524DB380BE5CA070002AC03 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; 95297F300C9ADA33007EFD6B /* VLBIABType.reader */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = VLBIABType.reader; sourceTree = ""; }; 952CBB98095FD19D00434E43 /* TVLSoundOut */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = TVLSoundOut; sourceTree = BUILT_PRODUCTS_DIR; }; 952CBB9A095FD1CA00434E43 /* VLSoundOut.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = VLSoundOut.cpp; path = Sources/VLSoundOut.cpp; sourceTree = ""; }; 952CBB9B095FD1CA00434E43 /* VLSoundOut.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLSoundOut.h; path = Sources/VLSoundOut.h; sourceTree = ""; }; 952CBB9E095FD1D900434E43 /* TVLSoundOut.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = TVLSoundOut.cpp; path = Tests/TVLSoundOut.cpp; sourceTree = ""; }; - 952CBBB2095FD34F00434E43 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; - 952CBBB3095FD34F00434E43 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = ""; }; 952DCD76096BBB11001C2316 /* VLSheetViewChords.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLSheetViewChords.h; path = Sources/VLSheetViewChords.h; sourceTree = ""; }; 952DCD77096BBB11001C2316 /* VLSheetViewChords.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = VLSheetViewChords.mm; path = Sources/VLSheetViewChords.mm; sourceTree = ""; }; 9530A7010BD9E16700635FEC /* display.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = display.tiff; path = Resources/display.tiff; sourceTree = ""; }; @@ -255,11 +246,11 @@ 959A3A250DE78BCD00EF207B /* toend.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = toend.icns; path = Resources/toend.icns; sourceTree = ""; }; 959A3A6C0DE8CB5B00EF207B /* VLMIDIWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VLMIDIWriter.cpp; path = Sources/VLMIDIWriter.cpp; sourceTree = ""; }; 959A3A6D0DE8CB5B00EF207B /* VLMIDIWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLMIDIWriter.h; path = Sources/VLMIDIWriter.h; sourceTree = ""; }; - 95A1C37B0AF1D4370076597D /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = /System/Library/Frameworks/Quartz.framework; sourceTree = ""; }; 95A1C3840AF2ACE20076597D /* VLSheetWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLSheetWindow.h; path = Sources/VLSheetWindow.h; sourceTree = ""; }; 95A1C3850AF2ACE20076597D /* VLSheetWindow.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = VLSheetWindow.mm; path = Sources/VLSheetWindow.mm; sourceTree = ""; }; 95A55C520BD5E5760068A203 /* VLPDFDocument.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLPDFDocument.h; path = Sources/VLPDFDocument.h; sourceTree = ""; }; 95A55C530BD5E5770068A203 /* VLPDFDocument.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = VLPDFDocument.mm; path = Sources/VLPDFDocument.mm; sourceTree = ""; }; + 95AC6FFF14094107007EA050 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; 95B3E1980960E58B000E9C0D /* Music */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Music; path = Resources/Music; sourceTree = ""; }; 95B66653096BC6A100FE18C9 /* VLSheetViewInternal.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = VLSheetViewInternal.h; path = Sources/VLSheetViewInternal.h; sourceTree = ""; }; 95B66656096BCA1F00FE18C9 /* VLSheetViewNotes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLSheetViewNotes.h; path = Sources/VLSheetViewNotes.h; sourceTree = ""; }; @@ -272,6 +263,17 @@ 95C461DD0B04430F00649F92 /* MMA */ = {isa = PBXFileReference; lastKnownFileType = folder; name = MMA; path = mma/MMA; sourceTree = ""; }; 95C461FF0B04472900649F92 /* mmaWrapper */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; name = mmaWrapper; path = Tools/mmaWrapper; sourceTree = ""; }; 95C4627A0B045C8E00649F92 /* lilyWrapper */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; name = lilyWrapper; path = Tools/lilyWrapper; sourceTree = ""; }; + 95CFA83714091B7800D0DB0D /* VLPitchName.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VLPitchName.cpp; path = Sources/VLPitchName.cpp; sourceTree = ""; }; + 95CFA83914091B9000D0DB0D /* VLPitchName.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLPitchName.h; path = Sources/VLPitchName.h; sourceTree = ""; }; + 95CFA8471409291500D0DB0D /* TVLPitchNames.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TVLPitchNames.octest; sourceTree = BUILT_PRODUCTS_DIR; }; + 95CFA8481409291500D0DB0D /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; + 95CFA84E1409291500D0DB0D /* TVLPitchNames-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = "TVLPitchNames-Info.plist"; path = "Tests/TVLPitchNames/TVLPitchNames-Info.plist"; sourceTree = ""; }; + 95CFA8501409291500D0DB0D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 95CFA8521409291500D0DB0D /* TVLPitchNames.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TVLPitchNames.h; path = Tests/TVLPitchNames/TVLPitchNames.h; sourceTree = SOURCE_ROOT; }; + 95CFA8541409291500D0DB0D /* TVLPitchNames.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = TVLPitchNames.mm; path = Tests/TVLPitchNames/TVLPitchNames.mm; sourceTree = SOURCE_ROOT; }; + 95CFA8561409291500D0DB0D /* TVLPitchNames-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "TVLPitchNames-Prefix.pch"; path = "Tests/TVLPitchNames/TVLPitchNames-Prefix.pch"; sourceTree = ""; }; + 95CFA85C1409355D00D0DB0D /* TVLStringAccidentals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TVLStringAccidentals.h; path = Tests/TVLStringAccidentals.h; sourceTree = ""; }; + 95CFA85D1409355D00D0DB0D /* TVLStringAccidentals.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = TVLStringAccidentals.mm; path = Tests/TVLStringAccidentals.mm; sourceTree = ""; }; 95D059780D1E6B0D00E28FAE /* VLLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VLLayout.cpp; path = Sources/VLLayout.cpp; sourceTree = ""; }; 95D059790D1E6B0D00E28FAE /* VLLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLLayout.h; path = Sources/VLLayout.h; sourceTree = ""; }; 95D0C2FB0B785D020061080E /* rebuildGrooves */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; fileEncoding = 4; name = rebuildGrooves; path = Tools/rebuildGrooves; sourceTree = ""; }; @@ -308,11 +310,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8D15AC340486D014006FF6A4 /* Cocoa.framework in Frameworks */, - 95932B91096527700008B0DB /* AudioUnit.framework in Frameworks */, - 95932B92096527710008B0DB /* AudioToolbox.framework in Frameworks */, - 95A1C37C0AF1D4370076597D /* Quartz.framework in Frameworks */, - 9524DB390BE5CA070002AC03 /* Carbon.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -320,9 +317,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 952CBBB4095FD34F00434E43 /* AudioToolbox.framework in Frameworks */, - 952CBBB5095FD34F00434E43 /* AudioUnit.framework in Frameworks */, - 95009B830B0EDCD800EB33A4 /* CoreFoundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -340,40 +334,25 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 95CFA8431409291500D0DB0D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95AC700014094108007EA050 /* Cocoa.framework in Frameworks */, + 95CFA8491409291500D0DB0D /* SenTestingKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 95E04D9E0AEB4837006F30A0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 95E04DC70AEB4B57006F30A0 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1058C7A6FEA54F5311CA2CBB /* Linked Frameworks */ = { - isa = PBXGroup; - children = ( - 9524DB380BE5CA070002AC03 /* Carbon.framework */, - 95009B820B0EDCD800EB33A4 /* CoreFoundation.framework */, - 95A1C37B0AF1D4370076597D /* Quartz.framework */, - 1058C7A7FEA54F5311CA2CBB /* Cocoa.framework */, - 952CBBB2095FD34F00434E43 /* AudioToolbox.framework */, - 952CBBB3095FD34F00434E43 /* AudioUnit.framework */, - ); - name = "Linked Frameworks"; - sourceTree = ""; - }; - 1058C7A8FEA54F5311CA2CBB /* Other Frameworks */ = { - isa = PBXGroup; - children = ( - 2A37F4C4FDCFA73011CA2CEA /* AppKit.framework */, - 13E42FBA07B3F13500E4EEF1 /* CoreData.framework */, - 2A37F4C5FDCFA73011CA2CEA /* Foundation.framework */, - ); - name = "Other Frameworks"; - sourceTree = ""; - }; 19C28FB0FE9D524F11CA2CBB /* Products */ = { isa = PBXGroup; children = ( @@ -382,6 +361,7 @@ 952CBB98095FD19D00434E43 /* TVLSoundOut */, 959408A0096922CA007CCCF8 /* TVLEdit */, 95E04DA00AEB4837006F30A0 /* TVLLilypond */, + 95CFA8471409291500D0DB0D /* TVLPitchNames.octest */, ); name = Products; sourceTree = ""; @@ -464,8 +444,8 @@ 2A37F4C3FDCFA73011CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( - 1058C7A6FEA54F5311CA2CBB /* Linked Frameworks */, - 1058C7A8FEA54F5311CA2CBB /* Other Frameworks */, + 95AC6FFF14094107007EA050 /* Cocoa.framework */, + 95CFA8481409291500D0DB0D /* SenTestingKit.framework */, ); name = Frameworks; sourceTree = ""; @@ -490,10 +470,13 @@ 955E59560957C0C50045FDA5 /* Tests */ = { isa = PBXGroup; children = ( + 95CFA84C1409291500D0DB0D /* TVLPitchNames */, 95E04DA60AEB486E006F30A0 /* TVLLilypond.mm */, 959408AC096922EA007CCCF8 /* TVLEdit.cpp */, 952CBB9E095FD1D900434E43 /* TVLSoundOut.cpp */, 955E59600957C1400045FDA5 /* TVLChord.cpp */, + 95CFA85C1409355D00D0DB0D /* TVLStringAccidentals.h */, + 95CFA85D1409355D00D0DB0D /* TVLStringAccidentals.mm */, ); name = Tests; sourceTree = ""; @@ -523,6 +506,10 @@ 95CFA8321408885300D0DB0D /* Model */ = { isa = PBXGroup; children = ( + 955E58E3095658AB0045FDA5 /* VLModel.h */, + 955E58E4095658AB0045FDA5 /* VLModel.cpp */, + 95CFA83914091B9000D0DB0D /* VLPitchName.h */, + 95CFA83714091B7800D0DB0D /* VLPitchName.cpp */, 959A3A6D0DE8CB5B00EF207B /* VLMIDIWriter.h */, 959A3A6C0DE8CB5B00EF207B /* VLMIDIWriter.cpp */, 9531F34D0DE2B4CD004F78C2 /* VLAIFFDocument.h */, @@ -543,8 +530,6 @@ 95F820AA0AF884A30010963D /* VLMMADocument.mm */, 2A37F4AEFDCFA73011CA2CEA /* VLDocument.h */, 2A37F4ACFDCFA73011CA2CEA /* VLDocument.mm */, - 955E58E3095658AB0045FDA5 /* VLModel.h */, - 955E58E4095658AB0045FDA5 /* VLModel.cpp */, 95F5F50D0ADCC433003980B2 /* VLXMLDocument.h */, 95F5F50E0ADCC433003980B2 /* VLXMLDocument.mm */, 953722650AE9F0E100B6E483 /* VLLilypondDocument.h */, @@ -618,6 +603,26 @@ name = Misc; sourceTree = ""; }; + 95CFA84C1409291500D0DB0D /* TVLPitchNames */ = { + isa = PBXGroup; + children = ( + 95CFA8521409291500D0DB0D /* TVLPitchNames.h */, + 95CFA8541409291500D0DB0D /* TVLPitchNames.mm */, + 95CFA84D1409291500D0DB0D /* Supporting Files */, + ); + path = TVLPitchNames; + sourceTree = ""; + }; + 95CFA84D1409291500D0DB0D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 95CFA84E1409291500D0DB0D /* TVLPitchNames-Info.plist */, + 95CFA84F1409291500D0DB0D /* InfoPlist.strings */, + 95CFA8561409291500D0DB0D /* TVLPitchNames-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; 95EF92110C786B2C0093E5F4 /* Filters */ = { isa = PBXGroup; children = ( @@ -705,6 +710,24 @@ productReference = 959408A0096922CA007CCCF8 /* TVLEdit */; productType = "com.apple.product-type.tool"; }; + 95CFA8461409291500D0DB0D /* TVLPitchNames */ = { + isa = PBXNativeTarget; + buildConfigurationList = 95CFA8571409291500D0DB0D /* Build configuration list for PBXNativeTarget "TVLPitchNames" */; + buildPhases = ( + 95CFA8421409291500D0DB0D /* Sources */, + 95CFA8431409291500D0DB0D /* Frameworks */, + 95CFA8441409291500D0DB0D /* Resources */, + 95CFA8451409291500D0DB0D /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = TVLPitchNames; + productName = TVLPitchNames; + productReference = 95CFA8471409291500D0DB0D /* TVLPitchNames.octest */; + productType = "com.apple.product-type.bundle"; + }; 95E04D9F0AEB4837006F30A0 /* TVLLilypond */ = { isa = PBXNativeTarget; buildConfigurationList = 95E04DA20AEB485A006F30A0 /* Build configuration list for PBXNativeTarget "TVLLilypond" */; @@ -738,6 +761,7 @@ Japanese, French, German, + en, ); mainGroup = 2A37F4AAFDCFA73011CA2CEA /* Vocalese */; projectDirPath = ""; @@ -748,6 +772,7 @@ 952CBB97095FD19D00434E43 /* TVLSoundOut */, 9594089F096922CA007CCCF8 /* TVLEdit */, 95E04D9F0AEB4837006F30A0 /* TVLLilypond */, + 95CFA8461409291500D0DB0D /* TVLPitchNames */, ); }; /* End PBXProject section */ @@ -789,6 +814,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 95CFA8441409291500D0DB0D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 95CFA8511409291500D0DB0D /* InfoPlist.strings in Resources */, + 95CFA8531409291500D0DB0D /* TVLPitchNames.h in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -805,6 +839,19 @@ shellPath = /bin/sh; shellScript = "\"$BUILT_PRODUCTS_DIR\"/VocalEasel.app/Contents/Resources/bin/mmaWrapper -g\n\"$SRCROOT\"/Tools/rebuildGrooves \"$BUILT_PRODUCTS_DIR\"/VocalEasel.app/Contents/Resources/share/mma/lib \"$BUILT_PRODUCTS_DIR\"/VocalEasel.app/Contents/Resources/Grooves.plist\n"; }; + 95CFA8451409291500D0DB0D /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n"; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -848,6 +895,7 @@ 9531F3510DE2B4CD004F78C2 /* VLAIFFDocument.mm in Sources */, 9531F3520DE2B4CD004F78C2 /* VLMP3Document.mm in Sources */, 959A3A6E0DE8CB5B00EF207B /* VLMIDIWriter.cpp in Sources */, + 95CFA83814091B7800D0DB0D /* VLPitchName.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -883,6 +931,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 95CFA8421409291500D0DB0D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 95CFA8551409291500D0DB0D /* TVLPitchNames.mm in Sources */, + 95CFA85B140930CD00D0DB0D /* VLPitchName.cpp in Sources */, + 95CFA85F1409356900D0DB0D /* TVLStringAccidentals.mm in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 95E04D9D0AEB4837006F30A0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -962,12 +1020,104 @@ name = VLPDFWindow.xib; sourceTree = ""; }; + 95CFA84F1409291500D0DB0D /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 95CFA8501409291500D0DB0D /* en */, + ); + name = InfoPlist.strings; + path = Tests/TVLPitchNames; + sourceTree = SOURCE_ROOT; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 95CFA8581409291500D0DB0D /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tests/TVLPitchNames/TVLPitchNames-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = "Tests/TVLPitchNames/TVLPitchNames-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.7; + WRAPPER_EXTENSION = octest; + }; + name = Development; + }; + 95CFA8591409291500D0DB0D /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tests/TVLPitchNames/TVLPitchNames-Prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = "Tests/TVLPitchNames/TVLPitchNames-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.7; + WRAPPER_EXTENSION = octest; + }; + name = Deployment; + }; + 95CFA85A1409291500D0DB0D /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tests/TVLPitchNames/TVLPitchNames-Prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = "Tests/TVLPitchNames/TVLPitchNames-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx10.7; + WRAPPER_EXTENSION = octest; + }; + name = Default; + }; 95D7BF750AA699C600D5E02C /* Development */ = { isa = XCBuildConfiguration; buildSettings = { + MACOSX_DEPLOYMENT_TARGET = 10.7; SDKROOT = macosx10.6; USER_HEADER_SEARCH_PATHS = "Sources/**"; }; @@ -976,6 +1126,7 @@ 95D7BF760AA699C600D5E02C /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { + MACOSX_DEPLOYMENT_TARGET = 10.7; SDKROOT = macosx10.6; }; name = Deployment; @@ -983,6 +1134,7 @@ 95D7BF770AA699C600D5E02C /* Default */ = { isa = XCBuildConfiguration; buildSettings = { + MACOSX_DEPLOYMENT_TARGET = 10.7; SDKROOT = macosx10.6; }; name = Default; @@ -1303,6 +1455,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 95CFA8571409291500D0DB0D /* Build configuration list for PBXNativeTarget "TVLPitchNames" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 95CFA8581409291500D0DB0D /* Development */, + 95CFA8591409291500D0DB0D /* Deployment */, + 95CFA85A1409291500D0DB0D /* Default */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Development; + }; 95D7BF740AA699C600D5E02C /* Build configuration list for PBXProject "VocalEasel" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -1311,7 +1473,7 @@ 95D7BF770AA699C600D5E02C /* Default */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Default; + defaultConfigurationName = Development; }; 95D7BF780AA699C600D5E02C /* Build configuration list for PBXNativeTarget "VocalEasel" */ = { isa = XCConfigurationList; @@ -1321,7 +1483,7 @@ 95D7BF7B0AA699C600D5E02C /* Default */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Default; + defaultConfigurationName = Development; }; 95D7BF7C0AA699C600D5E02C /* Build configuration list for PBXNativeTarget "TVLChord" */ = { isa = XCConfigurationList; @@ -1331,7 +1493,7 @@ 95D7BF7F0AA699C600D5E02C /* Default */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Default; + defaultConfigurationName = Development; }; 95D7BF800AA699C600D5E02C /* Build configuration list for PBXNativeTarget "TVLSoundOut" */ = { isa = XCConfigurationList; @@ -1341,7 +1503,7 @@ 95D7BF830AA699C600D5E02C /* Default */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Default; + defaultConfigurationName = Development; }; 95D7BF840AA699C600D5E02C /* Build configuration list for PBXNativeTarget "TVLEdit" */ = { isa = XCConfigurationList; @@ -1351,7 +1513,7 @@ 95D7BF870AA699C600D5E02C /* Default */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Default; + defaultConfigurationName = Development; }; 95E04DA20AEB485A006F30A0 /* Build configuration list for PBXNativeTarget "TVLLilypond" */ = { isa = XCConfigurationList; @@ -1361,7 +1523,7 @@ 95E04DA50AEB485A006F30A0 /* Default */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Default; + defaultConfigurationName = Development; }; /* End XCConfigurationList section */ }; diff --git a/VocalEasel.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/VocalEasel.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..4e64956 --- /dev/null +++ b/VocalEasel.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + +