Class TransposingSampleSustainingInstrument

All Implemented Interfaces:
Editable, Instrument, Namable, OutputProvider, Transposable, AttributeBuildable, DirectorySettable, HandleSpecialXMLTag

public class TransposingSampleSustainingInstrument
extends SimpleSamplePlayingInstrumentWithLoops
Deprecated.
use the pure Java JSyn2 package instead
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).


Difference from TransposingSamplePlayingInstrument: Uses two sampleReaders to crossfade loops to achieve smooth sustain. Your loop points don't have to start/end on zeroes, as the crossfade should kill pops. Default crossfade time is 50ms
IMPORTANT: Loop portion must be greater than 2 x crossfade duration!!! Do not use this ins with samples with very short sustain loops. Use TransposingSamplePlayingInstrument instead for samples with very short loops, or increase lengh of loop (for ex. the trumpet.aiff sample which ships with JSyn's Wire has a loop region which is too short to use with TransposingSampleSustainingInstrument but sounds fine with TransposingSamplePlayingInstrument).

Transposes up or down to reach those pitches which do not have samples mapped to them. Pitches may be fractional. Uses instrument's Tuning to transpose (new to build 5/8/05).


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().

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(14000, 2));    // must be longer than xfade window
        ins.addSamplePitch(sample, 60);
Author:
Nick Didkovsky, nick@didkovsky.com (C) 2001 Nick Didkovsky, all rights reserved.
See Also:
jmsltestsuite.TransposingSampleSustainingInstrumentWithAmplitudeMap, TransposingSamplePlayingInstrument
  • Constructor Details

    • TransposingSampleSustainingInstrument

      public TransposingSampleSustainingInstrument()
      Deprecated.
    • TransposingSampleSustainingInstrument

      public TransposingSampleSustainingInstrument​(java.lang.String sampleDirectory)
      Deprecated.
      constructor. sample directory string must end in dir delimitter, ex "F:\samples\"
  • Method Details