Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        public ABCScore GetABCScore(String filename)
        {
            ABCScore score = new ABCScore();

            score.Header = GetHeader(filename);
            // score.Body = GetBody(score.Header.Key, filename);

            return(score);
        }
Esempio n. 3
0
        /*
         * 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);
        }