com.softsynth.jmsl.jsyn
Class TransposingSamplePlayingInstrument
java.lang.Object
com.softsynth.jmsl.InstrumentAdapter
com.softsynth.jmsl.jsyn.SimpleSamplePlayingInstrument
com.softsynth.jmsl.jsyn.SimpleSamplePlayingInstrumentWithLoops
com.softsynth.jmsl.jsyn.TransposingSamplePlayingInstrument
- 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.write(sampleData);
sample.cuePoints = new java.util.Vector();
sample.cuePoints.addElement(new CuePoint(10, 1));
sample.cuePoints.addElement(new CuePoint(1000, 2));
ins.addSamplePitch(sample, 60);
- Author:
- Nick Didkovsky, didkovn@mail.rockefeller.edu (C) 2001 Nick Didkovsky, all rights
reserved.
- See Also:
TransposingSamplePlayingInstrumentWithAmplitudeMap
,
TransposingSampleSustainingInstrument
Method Summary |
void |
buildFromAttributes()
|
double |
calcRateForTransposition(double audioFrameRate,
double pitch,
double closestSampledPitch)
If you have a smaple tuned to closestSampledPitch, this method calculates the playback rate
to make that smaple sound at desired pitch. |
static void |
main(java.lang.String[] args)
|
double |
play(double playTime,
double timeStretch,
double[] dar)
If there is a sample loaded at dar[1], 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 |
TransposingSamplePlayingInstrument
public TransposingSamplePlayingInstrument()
TransposingSamplePlayingInstrument
public TransposingSamplePlayingInstrument(java.lang.String sampleDirectory)
- constructor. sample directory string must end in dir delimitter, ex "F:\samples\"
buildFromAttributes
public void buildFromAttributes()
- Specified by:
buildFromAttributes
in interface AttributeBuildable
- Overrides:
buildFromAttributes
in class SimpleSamplePlayingInstrument
play
public double play(double playTime,
double timeStretch,
double[] dar)
- Description copied from class:
SimpleSamplePlayingInstrument
- If there is a sample loaded at dar[1], bang it. No sustain, no transposition. Hold time is
not used to terminate sample early.
- Specified by:
play
in interface Instrument
- Overrides:
play
in class SimpleSamplePlayingInstrumentWithLoops
calcRateForTransposition
public double calcRateForTransposition(double audioFrameRate,
double pitch,
double closestSampledPitch)
- 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
- Parameters:
audioFrameRate
- pitch
- closestSampledPitch
-
- Returns:
- rate to play back sample tuned to closestSampledPitch to achieve pitch
main
public static void main(java.lang.String[] args)