/*
* Created on 16-dic-2005
*
* TODO To change the template for this generated file go to Window -
* Preferences - Java - Code Style - Code Templates
*/
package org.herac.tuxguitar.io.tg;
import org.apache.log4j.Logger;
import org.herac.tuxguitar.song.models.TGDuration;
import org.herac.tuxguitar.song.models.TGMeasureHeader;
import org.herac.tuxguitar.song.models.TGNoteEffect;
import org.herac.tuxguitar.song.models.TGSong;
/**
* @author julian
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class TGInputStream extends AbstractTuxGuitarInputStream {
/** The Logger for this class. */
public static final transient Logger LOG = Logger
.getLogger(TGInputStream.class);
@Override
protected TGSong read() {
TGSong song = new TGSong();
// leo el nombre
song.setName(readUnsignedByteString());
// leo el artista
song.setArtist(readUnsignedByteString());
// leo el album
song.setAlbum(readUnsignedByteString());
// leo el autor
song.setAuthor(readUnsignedByteString());
// leo la fecha
song.setDate(readUnsignedByteString());
// leo el copyright
song.setCopyright(readUnsignedByteString());
// leo el creador
song.setWriter(readUnsignedByteString());
// leo el transcriptor
song.setTranscriber(readUnsignedByteString());
// leo los comentarios
song.setComments(readIntegerString());
// leo la cantidad de measure headers
int headerCount = readShort();
// leo las pistas
TGMeasureHeader lastHeader = null;
long headerStart = TGDuration.QUARTER_TIME;
for (int i = 0; i < headerCount; i++) {
TGMeasureHeader header = readMeasureHeader(i + 1, headerStart, lastHeader);
song.addMeasureHeader(header);
headerStart += header.getLength();
lastHeader = header;
}
// leo la cantidad de pistas
int trackCount = readByte();
// leo las pistas
for (int i = 0; i < trackCount; i++) {
song.addTrack(readTrack(i + 1, song));
}
return song;
}
@Override
protected void readNoteEffect(TGNoteEffect effect) {
int header = readHeader(3);
// leo el bend
if (((header & EFFECT_BEND) != 0)) {
effect.setBend(readBendEffect());
}
// leo el tremolo bar
if (((header & EFFECT_TREMOLO_BAR) != 0)) {
effect.setTremoloBar(readTremoloBarEffect());
}
// leo el harmonic
if (((header & EFFECT_HARMONIC) != 0)) {
effect.setHarmonic(readHarmonicEffect());
}
// leo el grace
if (((header & EFFECT_GRACE) != 0)) {
effect.setGrace(readGraceEffect());
}
// leo el trill
if (((header & EFFECT_TRILL) != 0)) {
effect.setTrill(readTrillEffect());
}
// leo el tremolo picking
if (((header & EFFECT_TREMOLO_PICKING) != 0)) {
effect.setTremoloPicking(readTremoloPickingEffect());
}
// vibrato
effect.setVibrato(((header & EFFECT_VIBRATO) != 0));
// dead note
effect.setDeadNote(((header & EFFECT_DEAD) != 0));
// slide
effect.setSlide(((header & EFFECT_SLIDE) != 0));
// hammer-on/pull-off
effect.setHammer(((header & EFFECT_HAMMER) != 0));
// ghost note
effect.setGhostNote(((header & EFFECT_GHOST) != 0));
// accentuated note
effect.setAccentuatedNote(((header & EFFECT_ACCENTUATED) != 0));
// heavy accentuated note
effect.setHeavyAccentuatedNote(((header & EFFECT_HEAVY_ACCENTUATED) != 0));
// palm mute
effect.setPalmMute(((header & EFFECT_PALM_MUTE) != 0));
// staccato
effect.setStaccato(((header & EFFECT_STACCATO) != 0));
// tapping
effect.setTapping(((header & EFFECT_TAPPING) != 0));
// slapping
effect.setSlapping(((header & EFFECT_SLAPPING) != 0));
// popping
effect.setPopping(((header & EFFECT_POPPING) != 0));
// fade in
effect.setFadeIn(((header & EFFECT_FADE_IN) != 0));
// let ring
effect.setLetRing(((header & EFFECT_LET_RING) != 0));
}
}