Package de.maramuse.soundcomp.misc

Source Code of de.maramuse.soundcomp.misc.SID6581

package de.maramuse.soundcomp.misc;

/*
* Copyright 2010 Jan Schmidt-Reinisch
*
* SoundComp - a sound processing library
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; in version 2.1
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*
*/
/**
* A complex process element emulating a complete SID6581 chip
*
* Note: the emulation will not be complete in that it does not enforce the limit of a controlling 6510 CPU,
* i.e. inputs may be changed faster than a 6510 could write to the SID's registers.
* Other than that, the SID should be emulated perfectly.
*/

import de.maramuse.soundcomp.process.NamedSource;
import de.maramuse.soundcomp.process.ParameterMap;
import de.maramuse.soundcomp.process.ProcessElement;
import de.maramuse.soundcomp.process.SourceStore;
import de.maramuse.soundcomp.process.StandardParameters;
import de.maramuse.soundcomp.process.Stateful;
import de.maramuse.soundcomp.process.TypeMismatchException;
import de.maramuse.soundcomp.process.UnknownConnectionException;
import de.maramuse.soundcomp.process.ValueType;
import de.maramuse.soundcomp.process.StandardParameters.Parameter;
import de.maramuse.soundcomp.util.GlobalParameters;
import de.maramuse.soundcomp.util.NativeObjects;
import de.maramuse.soundcomp.util.ReadOnlyMap;
import de.maramuse.soundcomp.util.ReadOnlyMapImpl;

public class SID6581 implements ProcessElement, Stateful {
  public long nativeSpace=-1;

  public SID6581() {
  NativeObjects.registerNativeObject(this);
  nSetSamplerate(nativeSpace, GlobalParameters.get().getSampleRate());
  }

  SID6581(boolean s) {
  }

  private final static ReadOnlyMapImpl<Integer, ValueType> destinationTypes=new ReadOnlyMapImpl<Integer, ValueType>();
  private final static ReadOnlyMapImpl<Integer, ValueType> sourceTypes=new ReadOnlyMapImpl<Integer, ValueType>();
  private final ReadOnlyMapImpl<Integer, SourceStore> sourceStoreMap=new ReadOnlyMapImpl<Integer, SourceStore>();
  private static ParameterMap inputsMap=new ParameterMap();
  private static ParameterMap outputsMap=new ParameterMap();
 
  static{
  inputsMap.put(StandardParameters.IN);
  inputsMap.put(StandardParameters.FREQUENCY1);
  inputsMap.put(StandardParameters.FREQUENCY2);
  inputsMap.put(StandardParameters.FREQUENCY3);
  inputsMap.put(StandardParameters.FREQUENCYF);
  inputsMap.put(StandardParameters.FILT1);
  inputsMap.put(StandardParameters.FILT2);
  inputsMap.put(StandardParameters.FILT3);
  inputsMap.put(StandardParameters.HP);
  inputsMap.put(StandardParameters.BP);
  inputsMap.put(StandardParameters.LP);
  inputsMap.put(StandardParameters.FILTEXT);
  inputsMap.put(StandardParameters.DUTYCYCLE1);
  inputsMap.put(StandardParameters.DUTYCYCLE2);
  inputsMap.put(StandardParameters.DUTYCYCLE3);
  inputsMap.put(StandardParameters.CLOCK);
  inputsMap.put(StandardParameters.SYNC1);
  inputsMap.put(StandardParameters.SYNC2);
  inputsMap.put(StandardParameters.SYNC3);
  inputsMap.put(StandardParameters.RING1);
  inputsMap.put(StandardParameters.RING2);
  inputsMap.put(StandardParameters.RING3);
  inputsMap.put(StandardParameters.GATE1);
  inputsMap.put(StandardParameters.GATE2);
  inputsMap.put(StandardParameters.GATE3);
  inputsMap.put(StandardParameters.TEST1);
  inputsMap.put(StandardParameters.TEST2);
  inputsMap.put(StandardParameters.TEST3);
  inputsMap.put(StandardParameters.TRIA1);
  inputsMap.put(StandardParameters.TRIA2);
  inputsMap.put(StandardParameters.TRIA3);
  inputsMap.put(StandardParameters.SAWT1);
  inputsMap.put(StandardParameters.SAWT2);
  inputsMap.put(StandardParameters.SAWT3);
  inputsMap.put(StandardParameters.NOIS1);
  inputsMap.put(StandardParameters.NOIS2);
  inputsMap.put(StandardParameters.NOIS3);
  inputsMap.put(StandardParameters.SQUA1);
  inputsMap.put(StandardParameters.SQUA2);
  inputsMap.put(StandardParameters.SQUA3);
  inputsMap.put(StandardParameters.A1);
  inputsMap.put(StandardParameters.A2);
  inputsMap.put(StandardParameters.A3);
  inputsMap.put(StandardParameters.D1);
  inputsMap.put(StandardParameters.D2);
  inputsMap.put(StandardParameters.D3);
  inputsMap.put(StandardParameters.S1);
  inputsMap.put(StandardParameters.S2);
  inputsMap.put(StandardParameters.S3);
  inputsMap.put(StandardParameters.R1);
  inputsMap.put(StandardParameters.R2);
  inputsMap.put(StandardParameters.R3);
  inputsMap.put(StandardParameters.VOL);
  inputsMap.put(StandardParameters.OSC3OFF);
  outputsMap.put(StandardParameters.OUT);
  outputsMap.put(StandardParameters.OSC3OUT);
  outputsMap.put(StandardParameters.ENV3OUT);
  }
  static{
  destinationTypes.put(StandardParameters.IN.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.FREQUENCY1.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.FREQUENCY2.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.FREQUENCY3.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.FREQUENCYF.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.DUTYCYCLE1.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.DUTYCYCLE2.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.DUTYCYCLE3.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.CLOCK.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.SYNC1.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.SYNC2.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.SYNC3.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.RING1.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.RING2.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.RING3.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.GATE1.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.GATE2.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.GATE3.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.TEST1.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.TEST2.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.TEST3.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.TRIA1.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.TRIA2.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.TRIA3.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.SAWT1.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.SAWT2.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.SAWT3.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.NOIS1.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.NOIS2.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.NOIS3.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.SQUA1.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.SQUA2.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.SQUA3.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.A1.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.A2.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.A3.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.D1.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.D2.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.D3.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.S1.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.S2.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.S3.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.R1.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.R2.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.R3.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.VOL.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.OSC3OFF.i, ValueType.STREAM);
  destinationTypes.put(StandardParameters.IN.i, ValueType.STREAM);
  sourceTypes.put(StandardParameters.OUT.i, ValueType.STREAM);
  sourceTypes.put(StandardParameters.OSC3OUT.i, ValueType.STREAM);
  sourceTypes.put(StandardParameters.ENV3OUT.i, ValueType.STREAM);
  sourceTypes.put(StandardParameters.HP.i, ValueType.STREAM);
  sourceTypes.put(StandardParameters.BP.i, ValueType.STREAM);
  sourceTypes.put(StandardParameters.LP.i, ValueType.STREAM);
  sourceTypes.put(StandardParameters.FILT1.i, ValueType.STREAM);
  sourceTypes.put(StandardParameters.FILT2.i, ValueType.STREAM);
  sourceTypes.put(StandardParameters.FILT3.i, ValueType.STREAM);
  }
  SourceStore input;
  String abstractName, instanceName;

  @Override
  public ReadOnlyMap<Integer, ValueType> getDestinationTypes() {
  return destinationTypes;
  }

  @Override
  public void setSource(int connectionIndex, NamedSource source,
            int sourceIndex) throws UnknownConnectionException,
      TypeMismatchException {
  if(!source.getSourceTypes().containsKey(sourceIndex))
    throw new UnknownConnectionException("attempt to get invalid source's output for SID6581");
  if(!destinationTypes.containsKey(connectionIndex))
    throw new UnknownConnectionException("attempt to set unkown parameter for SID6581");
    sourceStoreMap.put(connectionIndex, new SourceStore(source, sourceIndex));
    nsetSource(nativeSpace, connectionIndex, source.getNativeSpace(), sourceIndex);
  }

  @Override
  public ReadOnlyMap<Integer, ValueType> getSourceTypes() {
  return sourceTypes;
  }

  private native double nsetSource(long _nativeSpace, int destIndex, long source, int sourceIndex);

  private native double ngetValue(long _nativeSpace, int sourceIndex);

  @Override
  public double getValue(int index) {
  return ngetValue(nativeSpace, index);
  }

  private native void nadvanceOutput(long _nativeSpace);

  @Override
  public void advanceOutput() {
  nadvanceOutput(nativeSpace);
  }

  private native void nadvanceState(long _nativeSpace);

  private native void nSetSamplerate(long _nativeSpace, double sampleRate);
 
  @Override
  public void advanceState() {
  nadvanceState(nativeSpace);
  }

  @Override
  public String getAbstractName() {
  return abstractName;
  }

  @Override
  public String getInstanceName() {
  return instanceName;
  }

  @Override
  public void setAbstractName(String abstractName) {
  this.abstractName=abstractName;
  }

  @Override
  public void setInstanceName(String instanceName) {
  this.instanceName=instanceName;
  }

  @Override
  public long getNativeSpace() {
  return nativeSpace;
  }

  @Override
  public ReadOnlyMap<Integer, SourceStore> getSourceMap() {
  return sourceStoreMap;
  }

  /**
   * @see de.maramuse.soundcomp.process.ProcessElement#clone()
   */
  @Override
  public SID6581 clone() {
  SID6581 c=new SID6581();
  c.abstractName=abstractName;
  return c;
  }

  /*
   * (non-Javadoc)
   *
   * @see de.maramuse.soundcomp.process.ProcessElement#outputsByName()
   */
  @Override
  public ReadOnlyMap<String, Parameter> outputsByName() {
  return outputsMap;
  }

  /*
   * (non-Javadoc)
   *
   * @see de.maramuse.soundcomp.process.ProcessElement#inputsByName()
   */
  @Override
  public ReadOnlyMap<String, Parameter> inputsByName() {
  return inputsMap;
  }
}
TOP

Related Classes of de.maramuse.soundcomp.misc.SID6581

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.