From ff05955b007bda80eea5bb56bac5fc147f3b5721 Mon Sep 17 00:00:00 2001 From: Matthias Neeracher Date: Mon, 13 Nov 2006 04:26:09 +0000 Subject: [PATCH] Implement (Rudimentary) MIDI playing --- English.lproj/VLDocument.nib/classes.nib | 2 +- English.lproj/VLDocument.nib/info.nib | 2 +- English.lproj/VLDocument.nib/keyedobjects.nib | Bin 18426 -> 18891 bytes Sources/VLDocument.mm | 11 +++++++++++ Sources/VLSheetWindow.h | 1 + Sources/VLSheetWindow.mm | 5 +++++ Sources/VLSoundOut.cpp | 14 ++++++++++++++ Sources/VLSoundOut.h | 2 ++ 8 files changed, 35 insertions(+), 2 deletions(-) diff --git a/English.lproj/VLDocument.nib/classes.nib b/English.lproj/VLDocument.nib/classes.nib index 5bb4969..97ad09d 100644 --- a/English.lproj/VLDocument.nib/classes.nib +++ b/English.lproj/VLDocument.nib/classes.nib @@ -30,7 +30,7 @@ { CLASS = VLSheetWindow; LANGUAGE = ObjC; - OUTLETS = {logToolItem = id; outputToolItem = id; runToolItem = id; }; + OUTLETS = {logToolItem = id; outputToolItem = id; playToolItem = id; runToolItem = id; }; SUPERCLASS = NSWindowController; } ); diff --git a/English.lproj/VLDocument.nib/info.nib b/English.lproj/VLDocument.nib/info.nib index 9ce18dc..4cfe7ec 100644 --- a/English.lproj/VLDocument.nib/info.nib +++ b/English.lproj/VLDocument.nib/info.nib @@ -12,6 +12,6 @@ 5 IBSystem Version - 9A294 + 9A300 diff --git a/English.lproj/VLDocument.nib/keyedobjects.nib b/English.lproj/VLDocument.nib/keyedobjects.nib index bc635eb2ea367b2b984a93ca7132c9c6f9eecdac..bb4afc4de05e5f633ccdc7a178eb5c216bd0503a 100644 GIT binary patch literal 18891 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 literal 18426 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 + CFDataRef([NSData dataWithContentsOfURL: + [self fileURLWithExtension:@"mid"]])); +} + - (IBAction) showOutput:(id)sender { [[self pdfWin] showWindow:sender]; diff --git a/Sources/VLSheetWindow.h b/Sources/VLSheetWindow.h index ecfaca8..048ea02 100644 --- a/Sources/VLSheetWindow.h +++ b/Sources/VLSheetWindow.h @@ -27,6 +27,7 @@ IBOutlet id runToolItem; IBOutlet id outputToolItem; IBOutlet id logToolItem; + IBOutlet id playToolItem; } - (VLEditable *) editTarget; diff --git a/Sources/VLSheetWindow.mm b/Sources/VLSheetWindow.mm index cb31518..24c5993 100644 --- a/Sources/VLSheetWindow.mm +++ b/Sources/VLSheetWindow.mm @@ -46,6 +46,7 @@ static NSString* sInputToolbarIdentifier = @"Vocalese Sheet Window Toolbar Id static NSString* sOutputToolbarItemIdentifier = @"Output Toolbar Item Identifier"; static NSString* sLogToolbarItemIdentifier = @"Log Toolbar Item Identifier"; static NSString* sRunToolbarItemIdentifier = @"Run Toolbar Item Identifier"; +static NSString* sPlayToolbarItemIdentifier = @"Play Toolbar Item Identifier"; - (id)initWithWindow:(NSWindow *)window { @@ -87,6 +88,8 @@ static NSString* sRunToolbarItemIdentifier = @"Run Toolbar Item Identifier"; prototype = logToolItem; else if ([itemIdent isEqual: sRunToolbarItemIdentifier]) prototype = runToolItem; + else if ([itemIdent isEqual: sPlayToolbarItemIdentifier]) + prototype = playToolItem; if (prototype) { toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdent] autorelease]; @@ -106,6 +109,7 @@ static NSString* sRunToolbarItemIdentifier = @"Run Toolbar Item Identifier"; - (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar { return [NSArray arrayWithObjects: sRunToolbarItemIdentifier, + sPlayToolbarItemIdentifier, NSToolbarFlexibleSpaceItemIdentifier, sOutputToolbarItemIdentifier, sLogToolbarItemIdentifier, nil]; @@ -114,6 +118,7 @@ static NSString* sRunToolbarItemIdentifier = @"Run Toolbar Item Identifier"; - (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar { return [NSArray arrayWithObjects: sRunToolbarItemIdentifier, + sPlayToolbarItemIdentifier, sOutputToolbarItemIdentifier, sLogToolbarItemIdentifier, NSToolbarCustomizeToolbarItemIdentifier, diff --git a/Sources/VLSoundOut.cpp b/Sources/VLSoundOut.cpp index fa82c58..a49fe9a 100644 --- a/Sources/VLSoundOut.cpp +++ b/Sources/VLSoundOut.cpp @@ -21,6 +21,7 @@ public: virtual void PlayNote(const VLNote & note); virtual void PlayChord(const VLChord & chord); + virtual void PlayFile(CFDataRef file); virtual ~VLAUSoundOut(); @@ -169,3 +170,16 @@ void VLAUSoundOut::Play(const int8_t * note, size_t numNotes) PlaySequence(music); } + +void VLAUSoundOut::PlayFile(CFDataRef file) +{ + MusicSequence music; + MusicTrack track; + + NewMusicSequence(&music); + MusicSequenceNewTrack(music, &track); + MusicSequenceLoadSMFDataWithFlags(music, file, + kMusicSequenceLoadSMF_ChannelsToTracks); + PlaySequence(music); +} + diff --git a/Sources/VLSoundOut.h b/Sources/VLSoundOut.h index 99c8890..5b191a4 100644 --- a/Sources/VLSoundOut.h +++ b/Sources/VLSoundOut.h @@ -8,6 +8,7 @@ */ #include "VLModel.h" +#import class VLSoundEvent { protected: @@ -32,6 +33,7 @@ public: virtual void PlayNote(const VLNote & note) = 0; virtual void PlayChord(const VLChord & chord) = 0; + virtual void PlayFile(CFDataRef file) = 0; virtual ~VLSoundOut(); };