// // File: VLMMADocument.mm - Export document in MMA format // // Author(s): // // (MN) Matthias Neeracher // // Copyright © 2006-2007 Matthias Neeracher // #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] + "\n\n" + "Solo Voice AltoSax\n" + "Solo Volume fff\n"; 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); mmaFile += buf; song->fMeasures[m].MMAChords(mmas, prop, i==song->begin()); mmaFile += mmas; song->fMeasures[m].MMANotes(mmas, prop, song->TiedDuration(m+1)); 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