package com.xenoage.zong.musicxml.types;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import com.xenoage.utils.annotations.MaybeNull;
import com.xenoage.utils.annotations.NonNull;
import com.xenoage.utils.xml.XmlReader;
import com.xenoage.utils.xml.XmlWriter;
import com.xenoage.zong.musicxml.util.IncompleteMusicXML;
/**
* MusicXML midi-instrument.
*
* @author Andreas Wenger
*/
@IncompleteMusicXML(missing = "midi-name,midi-bank,midi-unpitched,elevation")
@AllArgsConstructor @Getter @Setter
public final class MxlMidiInstrument {
public static final String elemName = "midi-instrument";
@MaybeNull private Integer midiChannel;
@MaybeNull private Integer midiProgram;
@MaybeNull private Float volume;
@MaybeNull private Float pan;
@NonNull public final String id;
@NonNull public static MxlMidiInstrument read(XmlReader reader) {
//attributes
String id = reader.getAttribute("id");
//elements
Integer midiChannel = null;
Integer midiProgram = null;
Float volume = null;
Float pan = null;
while (reader.openNextChildElement()) {
String n = reader.getElementName();
switch (n) {
case "midi-channel":
midiChannel = reader.getTextIntNotNull();
break;
case "midi-program":
midiProgram = reader.getTextIntNotNull();
break;
case "volume":
volume = reader.getTextFloatNotNull();
break;
case "pan":
pan = reader.getTextFloatNotNull();
break;
}
reader.closeElement();
}
return new MxlMidiInstrument(midiChannel, midiProgram, volume, pan, id);
}
public void write(XmlWriter writer) {
writer.writeElementStart(elemName);
writer.writeAttribute("id", id);
writer.writeElementText("midi-channel", midiChannel);
writer.writeElementText("midi-program", midiProgram);
writer.writeElementText("volume", volume);
writer.writeElementText("pan", pan);
writer.writeElementEnd();
}
}