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: