VocalEasel/Sources/VLMIDIDocument.mm

62 lines
1.6 KiB
Plaintext
Raw Normal View History

2006-11-12 11:37:36 +00:00
//
2007-04-27 06:41:34 +00:00
// File: VLMIDIDocument.mm - Export document in MIDI format
2006-11-12 11:37:36 +00:00
//
2007-04-27 06:41:34 +00:00
// Author(s):
//
// (MN) Matthias Neeracher
//
// Copyright <20> 2006-2011 Matthias Neeracher
2006-11-12 11:37:36 +00:00
//
#import "VLMIDIDocument.h"
2008-05-29 18:54:30 +00:00
#import "VLMIDIWriter.h"
#import "VLSheetWindow.h"
2006-11-12 11:37:36 +00:00
@implementation VLDocument (MIDI)
- (NSFileWrapper *)midiFileWrapperWithError:(NSError **)outError
{
NSBundle * mainBundle = [NSBundle mainBundle];
[self createTmpFileWithExtension:@"mma" ofType:VLMMAType];
2006-11-12 11:37:36 +00:00
NSURL * mmaURL = [self fileURLWithExtension:@"mma"];
2006-11-12 11:37:36 +00:00
NSString * launch =
[mainBundle pathForResource:@"mmaWrapper" ofType:@""
inDirectory:@"bin"];
NSArray * args = [NSArray arrayWithObject: [mmaURL path]];
NSTask * task = [self taskWithLaunchPath:launch arguments:args];
[[NSNotificationCenter defaultCenter]
addObserver:self selector:@selector(mmaDone:)
name:NSTaskDidTerminateNotification object:task];
[sheetWin startAnimation];
2006-11-12 11:37:36 +00:00
[task launch];
[task waitUntilExit];
[sheetWin stopAnimation];
2006-11-12 11:37:36 +00:00
int status = [task terminationStatus];
if (!status) {
return [[[NSFileWrapper alloc]
initWithPath:[[self fileURLWithExtension:@"mid"] path]]
autorelease];
} else {
if (outError)
*outError = [NSError errorWithDomain:NSCocoaErrorDomain
code:NSPersistentStoreSaveError
userInfo:nil];
return nil;
}
}
- (void)mmaDone:(NSNotification *)notification {
[[NSNotificationCenter defaultCenter] removeObserver: self
name:NSTaskDidTerminateNotification object:[notification object]];
if ([[notification object] terminationStatus])
[sheetWin showLogAndBeep];
}
2006-11-12 11:37:36 +00:00
@end