/// <summary>
/// The create.
/// </summary>
/// <param name="sequence">
/// The sequence.
/// </param>
/// <param name="sequenceStream">
/// The sequence stream.
/// </param>
/// <exception cref="Exception">
/// Thrown if congeneric tracks count not equals 1 (track is not monophonic).
/// </exception>
public void Create(CommonSequence sequence, Stream sequenceStream)
{
string stringSequence = FileHelper.ReadSequenceFromStream(sequenceStream);
var doc = new XmlDocument();
doc.LoadXml(stringSequence);
var parser = new MusicXmlParser();
parser.Execute(doc);
ScoreTrack tempTrack = parser.ScoreModel;
if (tempTrack.CongenericScoreTracks.Count != 1)
{
throw new Exception("Track contains more then one or zero congeneric score tracks (parts).");
}
MatterRepository.CreateOrExtractExistingMatterForSequence(sequence);
BaseChain notesSequence = ConvertCongenericScoreTrackToNotesBaseChain(tempTrack.CongenericScoreTracks[0]);
long[] notesAlphabet = ElementRepository.GetOrCreateNotesInDb(notesSequence.Alphabet);
sequence.Notation = Notation.Notes;
Create(sequence, notesAlphabet, notesSequence.Building);
BaseChain measuresSequence = ConvertCongenericScoreTrackToMeasuresBaseChain(tempTrack.CongenericScoreTracks[0]);
long[] measuresAlphabet = MeasureRepository.GetOrCreateMeasuresInDb(measuresSequence.Alphabet);
sequence.Notation = Notation.Measures;
sequence.Id = default;
Create(sequence, measuresAlphabet, measuresSequence.Building);
sequence.Notation = Notation.FormalMotifs;
var pauseTreatments = EnumExtensions.ToArray <PauseTreatment>().Where(pt => pt != PauseTreatment.NotApplicable);
foreach (PauseTreatment pauseTreatment in pauseTreatments)
{
BaseChain fmotifsSequence = ConvertCongenericScoreTrackToFormalMotifsBaseChain(tempTrack.CongenericScoreTracks[0], pauseTreatment, false);
long[] fmotifsAlphabet = FmotifRepository.GetOrCreateFmotifsInDb(fmotifsSequence.Alphabet);
sequence.Id = default;
Create(sequence, fmotifsAlphabet, fmotifsSequence.Building, pauseTreatment, false);
fmotifsSequence = ConvertCongenericScoreTrackToFormalMotifsBaseChain(tempTrack.CongenericScoreTracks[0], pauseTreatment, true);
fmotifsAlphabet = FmotifRepository.GetOrCreateFmotifsInDb(fmotifsSequence.Alphabet);
sequence.Id = default;
Create(sequence, fmotifsAlphabet, fmotifsSequence.Building, pauseTreatment, true);
}
}