//////////////////////////////////////////////////////////////////////////////// // Copyright 2013 Michael Schmalle - Teoti Graphix, LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License // // Author: Michael Schmalle, Principal Architect // mschmalle at teotigraphix dot com //////////////////////////////////////////////////////////////////////////////// package com.teotigraphix.caustk.tone; import java.io.IOException; import java.io.StringReader; import com.google.gson.stream.JsonReader; /** * Various static methods used with the various Tone framework. */ public final class ToneUtils { public static int getComponentCount(Tone tone) { return tone.getComponentCount(); } /** * Returns the specific tone class using the <code>toneType</code> property * in the JSON string. * * @param data Valid serialized Tone data. * @throws IOException */ public static Class<? extends Tone> getToneClass(String data) throws IOException { ToneType type = readToneType(data); switch (type) { case Bassline: return BasslineTone.class; case Beatbox: return BeatboxTone.class; case EightBitSynth: return EightBitSynth.class; case FMSynth: return FMSynthTone.class; case Modular: return ModularTone.class; case Organ: return OrganTone.class; case PadSynth: return PadSynthTone.class; case PCMSynth: return PCMSynthTone.class; case SubSynth: return SubSynthTone.class; case Vocoder: return VocoderTone.class; } return null; } /** * Reads and returns the {@link ToneType} from the JSON data. * * @param data Valid serialized Tone data. * @throws IOException */ public static ToneType readToneType(String data) throws IOException { JsonReader reader = new JsonReader(new StringReader(data)); String type = null; try { reader.beginObject(); while (reader.hasNext()) { String name = reader.nextName(); if (name.equals("toneType")) { type = reader.nextString(); } else { reader.skipValue(); } } reader.endObject(); } finally { reader.close(); } if (type != null) return ToneType.valueOf(type); return null; } }