VocalEasel/Sources/VLMMADocument.mm

63 lines
1.6 KiB
Plaintext
Raw Normal View History

2006-11-04 08:15:34 +00:00
//
// VLMMADocument.mm
2006-11-04 08:15:34 +00:00
// Vocalese
//
// Created by Matthias Neeracher on 10/20/06.
// Copyright 2006 __MyCompanyName__. All rights reserved.
//
#import "VLMMADocument.h"
@implementation VLDocument (MMA)
- (NSData *)mmaDataWithError:(NSError **)outError
{
char buf[32];
NSBundle * bndl = [NSBundle mainBundle];
const VLProperties & prop = song->fProperties.front();
std::string mmaFile = std::string("// Generated by VocalEasel ")
+ (const char *)[[bndl objectForInfoDictionaryKey:@"CFBundleVersion"]
UTF8String]
2007-01-02 07:07:39 +00:00
+ "\n\n"
+ "Solo Voice AltoSax\n"
+ "Solo Volume fff\n";
2006-11-04 08:15:34 +00:00
sprintf(buf, "Tempo %d\n", [songTempo intValue]);
mmaFile += buf;
sprintf(buf, "Groove %s\n", [songGroove UTF8String]);
mmaFile += buf;
sprintf(buf, "KeySig %d%c\n", labs(prop.fKey), prop.fKey>=0 ? '#' : '&');
mmaFile += buf;
mmaFile += '\n';
std::string mmas;
size_t meas = 0;
VLSong::iterator end = song->end();
for (VLSong::iterator i=song->begin(); i!=end; ++i) {
size_t m = *i;
sprintf(buf, "%-5d", ++meas);
2006-11-04 08:15:34 +00:00
mmaFile += buf;
2007-04-23 05:46:37 +00:00
song->fMeasures[m].MMAChords(mmas, prop, i==song->begin());
2006-11-04 08:15:34 +00:00
mmaFile += mmas;
song->fMeasures[m].MMANotes(mmas, prop, song->TiedDuration(m+1));
2006-11-04 08:15:34 +00:00
mmaFile += "\t{ " + mmas + " }\n";
}
return [[NSString stringWithUTF8String:mmaFile.c_str()]
dataUsingEncoding:NSUTF8StringEncoding];
}
- (NSFileWrapper *)mmaFileWrapperWithError:(NSError **)outError
{
NSData * data = [self mmaDataWithError:outError];
if (!data)
return nil;
else
return [[[NSFileWrapper alloc]
initRegularFileWithContents:data]
autorelease];
}
@end