- All Implemented Interfaces:
- Editable, Instrument, Namable, OutputProvider, Transposable, AttributeBuildable, DirectorySettable, HandleSpecialXMLTag
- Direct Known Subclasses:
- CelloSampleIns, TransposingSamplePlayingInstrumentWithAmplitudeMap
public class TransposingSamplePlayingInstrument
- extends SimpleSamplePlayingInstrumentWithLoops
A JMSL Instrument that loads a sequence of monophonic SynthSamples. If there are gaps in the
chromatic scale, a sample will be stretched up or down from the closest sample. While we
recommend no more than a minor third between your samples for "believable" transposition, this is
no longer enforced as of JMSL v103. Also new to v103, pitches may be fractional.
Each sample must have exactly two cue points: loop start and release start (where release start ==
loop end). Sustains by simply looping until release time. For smoother sustain, see
TransposingSampleSustainingInstrument which uses crossfades for smooth sustaining.
This instrument loops an integer number of times (ie does not break out of loop early in order to
get exact duration). This avoids a glitch when the period of a pitched instrument is shortened by
the jump from sustain loop to release portion.
IMPORTANT: For Applets, the root sample directory passed to the constructor is ignored and
CODEBASE is used instead!!!! So your samples should be in your applet's CODEBASE. The use of
subfolders is ok, just make everything relative to CODEBASE. So for example, if locally you have
a root sample directory called F:/JMSLScoreWork/JMSLScoreSamples/ relative to which all your
samples are located, and inside it is violin/C60.wav, then your applet's CODEBASE, which might be
a folder called "classes", should contain violin/C60.wav
This version adds new feature of being able to map pitches to different samples based on
performance data, by overriding getAlternativeSampleIndex(). See examples in jmsltestsuite
New to build 20060408,this class supports new methods loadSample(SynthSample sample, int noteIndex) for dynamically created samples.
Note that you MUST set your own cue points for your sample data (see below):
SynthSample sample = new SynthSample(sampleData.length);
sample.cuePoints = new java.util.Vector();
sample.cuePoints.addElement(new CuePoint(10, 1));
sample.cuePoints.addElement(new CuePoint(1000, 2));
- Nick Didkovsky, email@example.com (C) 2001 Nick Didkovsky, all rights
- See Also:
If you have a smaple tuned to closestSampledPitch, this method calculates the playback rate
to make that smaple sound at desired pitch.
If there is a sample loaded at dar, bang it.
|Methods inherited from class com.softsynth.jmsl.jsyn.SimpleSamplePlayingInstrument
addEditListener, addSamplePitch, addSamplePitch, close, edit, getAlternativeSampleIndex, getDirectory, getEditEnabled, getNumChannels, getNumOutputs, getOutput, getOutput, getPitches, getSampleFilename, getSynthSamples, getTuning, getVoices, handleSpecialTag, notifyEditListeners, off, on, open, reload, removeEditListener, setDirectory, setEditEnabled, setNumChannels, setTuning, testSampleDirectory, writeSpecialXMLTags
|Methods inherited from class com.softsynth.jmsl.InstrumentAdapter
getDimensionNameSpace, getInterpreter, getMixerClassName, getMusicDevice, getName, getTransposition, noteOff, noteOn, noteOnFor, setDimensionNameSpace, setInterpreter, setMixerClassName, setMusicDevice, setName, setTransposition, toString, update
|Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
public TransposingSamplePlayingInstrument(java.lang.String sampleDirectory)
- constructor. sample directory string must end in dir delimitter, ex "F:\samples\"
public void buildFromAttributes()
- Specified by:
buildFromAttributes in interface
buildFromAttributes in class
public double play(double playTime,
- Description copied from class:
- If there is a sample loaded at dar, bang it. No sustain, no transposition. Hold time is
not used to terminate sample early.
- Specified by:
play in interface
play in class
public double calcRateForTransposition(double audioFrameRate,
- If you have a smaple tuned to closestSampledPitch, this method calculates the playback rate
to make that smaple sound at desired pitch. If this instrument has a Tuning, this method will
use it else it will use 12tet
- rate to play back sample tuned to closestSampledPitch to achieve pitch
public static void main(java.lang.String args)