public void insertNewPartitureABC(string path, string login, int originalVersionId) { ABCParser parser = new ABCParser(); ABCScore newScore = parser.GetABCScore(path); partiture partiture = new partiture { pk_partiture_id = partituresTable.Count() + 1, work_number = newScore.Header.Reference.ToString(), title = newScore.Header.Titles.FirstOrDefault <string>(), tempo = newScore.Header.Tempo, meter = newScore.Header.Meter, note_length = newScore.Header.NoteLength, part_key = newScore.Header.Key, filepath = path, version_of = (originalVersionId > 0) ? originalVersionId : partituresTable.Count() + 1 }; if (newScore.Header.Composers.Count() > 0) { creators creators = new creators { pk_creators_id = creatorsTable.Count() + 1, composer = newScore.Header.Composers.FirstOrDefault(), poet = newScore.Header.Composers.FirstOrDefault(), authors_of = (partituresTable.Count() > 0) ? partituresTable.Count() + 1 : 1 }; creatorsTable.InsertOnSubmit(creators); } instruments instrument = new instruments { pk_instrument_id = instrumentsTable.Count() + 1, instrument_name = newScore.Header.Instrument.ToString(), fk_part_in = (partituresTable.Count() > 0) ? partituresTable.Count() + 1 : 1 }; instrumentsTable.InsertOnSubmit(instrument); software soft = new software { pk_software_id = softwareTable.Count() + 1, software_name = newScore.Header.Encoding.Software, encoding_date = newScore.Header.Encoding.EncodingDate, fk_used_for_encoding = (partituresTable.Count() > 0) ? partituresTable.Count() + 1 : 1 }; addedby added = new addedby { id = addedTable.Count() + 1, fk_user_id = GetUserIdByLogin(login), fk_partiture_id = (partituresTable.Count() > 0) ? partituresTable.Count() + 1 : 1, added_on = DateTime.Now }; partituresTable.InsertOnSubmit(partiture); softwareTable.InsertOnSubmit(soft); addedTable.InsertOnSubmit(added); db.SubmitChanges(); }
public ABCScore GetABCScore(String filename) { ABCScore score = new ABCScore(); score.Header = GetHeader(filename); // score.Body = GetBody(score.Header.Key, filename); return(score); }
/* * Converts score in ABC to equivalent in MusicXML * @param score -- score in ABC * @returns path -- path to score in MusicXML */ public static string Convert(ABCScore score) { string path = ""; XDocument result = new XDocument(); XElement root = new XElement("score-partwise"); XElement movementNumber = new XElement("movement-number", score.Header.Titles.First <string>()); XElement movementTitle = new XElement("movement-title", score.Header.Titles.First <string>()); root.Add(movementNumber); root.Add(movementTitle); XElement work = new XElement("work"); XElement worktitle = new XElement("work-title", score.Header.Titles.First <string>()); work.Add(worktitle); XElement identification = new XElement("identification"); foreach (string c in score.Header.Composers) { XElement creator = new XElement("creator", c); creator.Add(creator); identification.Add(creator); } XElement part = new XElement("part"); foreach (ABCMeasure measure in score.Body.Measures) { int i = 0; XElement xmlmeasure = new XElement("measure", new XAttribute("number", i)); foreach (Note note in measure.Notes) { XElement xmlnote = new XElement("note"); if (note.isChord) { xmlnote.Add(new XElement("chord")); } if (note.isRest) { xmlnote.Add(new XElement("rest")); XElement duration = new XElement("duration", note.Duration); XElement type = new XElement("type", note.Type); xmlnote.Add(duration, type); } else { XElement pitch = new XElement("pitch", new XElement("step", note.Pitch.Step), new XElement("alter", note.Pitch.Alter), new XElement("octave", note.Pitch.Octave)); XElement duration = new XElement("duration", note.Duration); XElement accidental = new XElement("accidental", note.Accidental); xmlnote.Add(pitch, duration, accidental); xmlmeasure.Add(xmlnote); } } i++; part.Add(xmlmeasure); } root.Add(work, identification, part); path = score.Header.Titles.FirstOrDefault <string>() + "converted.musicxml"; result.Save(path); return(path); }