f@0: /*
f@0: Cross-Modal DAW Prototype - Prototype of a simple Cross-Modal Digital Audio Workstation.
f@0:
f@0: Copyright (C) 2015 Queen Mary University of London (http://depic.eecs.qmul.ac.uk/)
f@0:
f@0: This program is free software: you can redistribute it and/or modify
f@0: it under the terms of the GNU General Public License as published by
f@0: the Free Software Foundation, either version 3 of the License, or
f@0: (at your option) any later version.
f@0:
f@0: This program is distributed in the hope that it will be useful,
f@0: but WITHOUT ANY WARRANTY; without even the implied warranty of
f@0: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f@0: GNU General Public License for more details.
f@0:
f@0: You should have received a copy of the GNU General Public License
f@0: along with this program. If not, see .
f@0: */
f@0: package uk.ac.qmul.eecs.depic.daw;
f@0:
f@0: import uk.ac.qmul.eecs.depic.patterns.MathUtils;
f@0: import uk.ac.qmul.eecs.depic.patterns.Range;
f@0:
f@1: /**
f@1: *
f@2: * A Chunk is a set of contiguous audio samples. It is used in the visual representation of a sound wave where only the maximum
f@1: * and minimum values of all the samples are taken into account. In the sound wave a chuck would be drawn as a vertical
f@1: * line at a specific x position, all the contiguous chunks make the sound wave as usually drawn.
f@1: *
f@1: */
f@0: public class Chunk extends Range {
f@0: public static final Chunk SILENCE = new Chunk((short)0,(short)0);
f@0: private float normalizedStart;
f@0: private float normalizedEnd;
f@0:
f@0: public Chunk(Chunk chunk1, Chunk chunk2) {
f@0: super(chunk1, chunk2);
f@0:
f@0: normalizedStart = Math.min(chunk1.getNormStart(), chunk2.getNormStart());
f@0: normalizedEnd = Math.max(chunk1.getNormEnd(), chunk2.getNormEnd());
f@0: }
f@0:
f@0: public Chunk(Short s1, Short s2) {
f@0: normalizedStart = (s1-Short.MIN_VALUE)/(float)domain();
f@0: normalizedEnd = (s2-Short.MIN_VALUE)/(float)domain();
f@0:
f@0: MathUtils.Scale scale = new MathUtils.Scale(0.0f, 1.0f, -1.0f, 1.0f);
f@0: start = scale.linear(normalizedStart);
f@0: end = scale.linear(normalizedEnd);
f@0: }
f@0:
f@0: public static int domain() {
f@0: return Short.MAX_VALUE - Short.MIN_VALUE;
f@0: }
f@0:
f@0: public float getNormStart(){
f@0: return normalizedStart;
f@0: }
f@0:
f@0: public float getNormEnd(){
f@0: return normalizedEnd;
f@0: }
f@0:
f@0: @Override
f@0: public String toString(){
f@0: return "Chunk - range:["+getStart()+","+getEnd()+"] normalized range ["+getNormStart()+","+getNormEnd()+"]" ;
f@0: }
f@0: }
f@0:
f@0: