Android Open Source - Musicdroid Track






From Project

Back to project page Musicdroid.

License

The source code is released under:

GNU General Public License

If you think the Android project Musicdroid listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Musicdroid: An on-device music generator for Android
 * Copyright (C) 2010-2014 The Catrobat Team
 * (<http://developer.catrobat.org/credits>)
 *//www  . ja  va  2s.c o m
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * An additional term exception under section 7 of the GNU Affero
 * General Public License, version 3, is available at
 * http://developer.catrobat.org/license_additional_term
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.catrobat.musicdroid.pocketmusic.note;

import java.io.Serializable;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class Track implements Serializable {

    private static final long serialVersionUID = 7483021689872527955L;

    private MusicalInstrument instrument;
    private HashMap<Long, List<NoteEvent>> events;
    private MusicalKey key;
    private long lastTick;

    public Track(MusicalKey key, MusicalInstrument instrument) {
        this.events = new HashMap<Long, List<NoteEvent>>();
        this.instrument = instrument;
        this.key = key;
        this.lastTick = 0;
    }

    public Track(Track track) {
        this.events = new HashMap<Long, List<NoteEvent>>();
        this.instrument = track.getInstrument();
        this.key = track.getKey();
        this.lastTick = track.getLastTick();

        for (long tick : track.getSortedTicks()) {
            List<NoteEvent> noteEventList = new LinkedList<NoteEvent>();
            this.events.put(tick, noteEventList);

            for (NoteEvent noteEvent : track.getNoteEventsForTick(tick)) {
                noteEventList.add(new NoteEvent(noteEvent));
            }
        }
    }

    public MusicalInstrument getInstrument() {
        return instrument;
    }

    public MusicalKey getKey() {
        return key;
    }

    public void addNoteEvent(long tick, NoteEvent noteEvent) {
        List<NoteEvent> noteEventList = null;

        if (events.containsKey(tick)) {
            noteEventList = events.get(tick);
        } else {
            noteEventList = new LinkedList<NoteEvent>();
            events.put(tick, noteEventList);
        }

        if (false == noteEvent.isNoteOn()) {
            lastTick = tick;
        }

        noteEventList.add(noteEvent);
    }

    public List<NoteEvent> getNoteEventsForTick(long tick) {
        return events.get(tick);
    }

    public Set<Long> getSortedTicks() {
        return new TreeSet<Long>(events.keySet());
    }

    public int size() {
        int size = 0;

        for (List<NoteEvent> noteEventList : events.values()) {
            size += noteEventList.size();
        }

        return size;
    }

    public long getLastTick() {
        return lastTick;
    }

    public boolean empty() {
        return (0 == size());
    }

    @Override
    public boolean equals(Object obj) {
        if ((obj == null) || !(obj instanceof Track)) {
            return false;
        }

        Track track = (Track) obj;

        if (track.getInstrument() != getInstrument()) {
            return false;
        }

        Set<Long> ownTrackTicks = getSortedTicks();
        Set<Long> otherTrackTicks = track.getSortedTicks();

        if (otherTrackTicks.equals(ownTrackTicks)) {
            for (long tick : ownTrackTicks) {
                List<NoteEvent> ownNoteEventList = getNoteEventsForTick(tick);
                List<NoteEvent> otherNoteEventList = track.getNoteEventsForTick(tick);

                if (false == ownNoteEventList.equals(otherNoteEventList)) {
                    return false;
                }
            }

            return true;
        }

        return false;
    }

    @Override
    public String toString() {
        return "[Track] instrument=" + instrument + " key=" + key + " size=" + size();
    }
}




Java Source Code List

org.catrobat.musicdroid.pocketmusic.instrument.InstrumentActivity.java
org.catrobat.musicdroid.pocketmusic.instrument.noteSheet.NoteSheetViewFragment.java
org.catrobat.musicdroid.pocketmusic.instrument.noteSheet.NoteSheetView.java
org.catrobat.musicdroid.pocketmusic.instrument.piano.PianoActivity.java
org.catrobat.musicdroid.pocketmusic.instrument.piano.PianoViewFragment.java
org.catrobat.musicdroid.pocketmusic.instrument.tempo.AbstractTickProvider.java
org.catrobat.musicdroid.pocketmusic.instrument.tempo.SimpleTickProvider.java
org.catrobat.musicdroid.pocketmusic.note.MusicalInstrument.java
org.catrobat.musicdroid.pocketmusic.note.MusicalKey.java
org.catrobat.musicdroid.pocketmusic.note.NoteEvent.java
org.catrobat.musicdroid.pocketmusic.note.NoteLength.java
org.catrobat.musicdroid.pocketmusic.note.NoteName.java
org.catrobat.musicdroid.pocketmusic.note.Octave.java
org.catrobat.musicdroid.pocketmusic.note.Project.java
org.catrobat.musicdroid.pocketmusic.note.TrackMementoStack.java
org.catrobat.musicdroid.pocketmusic.note.Track.java
org.catrobat.musicdroid.pocketmusic.note.draw.NoteBodyDrawer.java
org.catrobat.musicdroid.pocketmusic.note.draw.NoteCrossDrawer.java
org.catrobat.musicdroid.pocketmusic.note.draw.NoteDrawer.java
org.catrobat.musicdroid.pocketmusic.note.draw.NotePositionInformation.java
org.catrobat.musicdroid.pocketmusic.note.draw.NoteSheetCanvas.java
org.catrobat.musicdroid.pocketmusic.note.draw.NoteSheetDrawPosition.java
org.catrobat.musicdroid.pocketmusic.note.draw.NoteSheetDrawer.java
org.catrobat.musicdroid.pocketmusic.note.draw.NoteStemDrawer.java
org.catrobat.musicdroid.pocketmusic.note.draw.SymbolDrawer.java
org.catrobat.musicdroid.pocketmusic.note.draw.TrackDrawer.java
org.catrobat.musicdroid.pocketmusic.note.midi.MidiException.java
org.catrobat.musicdroid.pocketmusic.note.midi.MidiPlayer.java
org.catrobat.musicdroid.pocketmusic.note.midi.MidiToProjectConverter.java
org.catrobat.musicdroid.pocketmusic.note.midi.NoteEventToMidiEventConverter.java
org.catrobat.musicdroid.pocketmusic.note.midi.ProjectToMidiConverter.java
org.catrobat.musicdroid.pocketmusic.note.symbol.BreakSymbol.java
org.catrobat.musicdroid.pocketmusic.note.symbol.NoteEventListToSymbolConverter.java
org.catrobat.musicdroid.pocketmusic.note.symbol.NoteSymbol.java
org.catrobat.musicdroid.pocketmusic.note.symbol.Symbol.java
org.catrobat.musicdroid.pocketmusic.note.symbol.TrackToSymbolsConverter.java
org.catrobat.musicdroid.pocketmusic.uitest.BaseActivityInstrumentationTestCase2.java
org.catrobat.musicdroid.pocketmusic.uitest.BaseInstrumentationTestCase.java
org.catrobat.musicdroid.pocketmusic.uitest.PianoActivityTest.java
org.catrobat.musicdroid.pocketmusic.uitest.instrument.piano.PianoActivityUiTest.java