Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

jm.audio.synth
Class WaveTable  view WaveTable download WaveTable.java

java.lang.Object
  extended byjm.audio.AudioObject
      extended byjm.audio.synth.WaveTable
All Implemented Interfaces:
jm.constants.Alignments, jm.constants.DrumMap, jm.constants.Durations, jm.constants.Dynamics, jm.constants.Frequencies, jm.JMC, jm.constants.Noises, jm.constants.Panning, jm.constants.Pitches, jm.constants.ProgramChanges, jm.constants.RhythmValues, jm.constants.Scales, jm.constants.Tunings, jm.constants.Volumes, jm.constants.Waveforms

public class WaveTable
extends jm.audio.AudioObject

Wavetable lookup creates an efficient means for resampling data into any frequency. It is particularly useful for holding simple wave information such as sinewaves and is often used as an oscillator.
This WaveTable implementation can accept either one or two inputs. Two inputs expects that amplitude is the left input and frequency is the right input. One input allows the user to specify whether the input is for amplitude or frequency by setting the aoDestination variable((0)amplitude (1)frequency.
A WaveTable can use fixed variables for both amplitude and frequency. The default is to use a default amplitude of 1.0 and a frequency based upon the value of the build methods Note.pitch(). These fixed variables are amp(amplitude) and frq(frequency) and both have set methods. NOTE (please do not add more constructors to set amp and frq but leave them as set methods).
The frqRatio variable is used to produce a frequency which is a ratio against the current notesFrq (the build methods note.getPitch()) variable setting.
It is common to use WaveTables as oscillators and even more common for these oscillators to based on simple wave forms. Simple wave forms in jMusic can be retrieved using static method calls to the Oscillator class.

Version:
1.0,Sun Feb 25 18:42:52 2001

Field Summary
private  float amp
          Value to use as a fixed amplitude for the waveTable.
static int AMPLITUDE
          constant for use with aoDestination
private  int aoDestination
          If we have one audio object input is at amp(0) or freq(1) ?
static int FREQUENCY
          constant for use with aoDestination
private  float frq
          Value to use as a fixed frequency for the waveTable.
private  float frqRatio
          Frequency ratio allows an incoming note's pitch to be adjusted to a fixed ratio amount
static int MONO
          constant for use with channels
private  float phase
          what is the phase of the wavetable to start at
private  float si
          how many samples to we skip while passing through the wavetable
static int STEREO
          constant for use with channels
private  float[] waveTable
          this contains the wavetable data as samples
 
Fields inherited from class jm.audio.AudioObject
channels, currentNote, currentNoteStartTime, finished, inputs, inst, name, next, numOfSamples, previous, sampleRate
 
Fields inherited from interface jm.JMC
DEBUG, DYNAMIC, EIGHT_BIT, KEY_SIG_EVT, NO_DENOMINATOR, NO_INSTRUMENT, NO_KEY_QUALITY, NO_KEY_SIGNATURE, NO_NUMERATOR, OCTAPHONIC, PAN, PITCH, PROG_EVT, QUADRAPHONIC, RHYTHM, SIXTEEN_BIT, TEMP_EVT, THIRTY_TWO_BIT, TIME_SIG_EVT, VERBOSE
 
Fields inherited from interface jm.constants.Durations
C, CD, CDD, CROTCHET, CROTCHET_TRIPLET, CT, DC, DDC, DDEN, DDHN, DDM, DDQ, DDQN, DEMI_SEMI_QUAVER, DEMI_SEMI_QUAVER_TRIPLET, DEN, DHN, DM, DOTTED_CROTCHET, DOTTED_EIGHTH_NOTE, DOTTED_HALF_NOTE, DOTTED_MINIM, DOTTED_QUARTER_NOTE, DOTTED_QUAVER, DOTTED_SEMI_QUAVER, DOTTED_SIXTEENTH_NOTE, DOUBLE_DOTTED_CROTCHET, DOUBLE_DOTTED_EIGHTH_NOTE, DOUBLE_DOTTED_HALF_NOTE, DOUBLE_DOTTED_MINIM, DOUBLE_DOTTED_QUARTER_NOTE, DOUBLE_DOTTED_QUAVER, DQ, DQN, DSN, DSQ, DSQT, EIGHTH_NOTE, EIGHTH_NOTE_TRIPLET, EN, ENT, HALF_NOTE, HALF_NOTE_TRIPLET, HN, HNT, M, MD, MDD, MINIM, MINIM_TRIPLET, MT, Q, QD, QDD, QN, QNT, QT, QUARTER_NOTE, QUARTER_NOTE_TRIPLET, QUAVER, QUAVER_TRIPLET, SB, SEMI_QUAVER, SEMI_QUAVER_TRIPLET, SEMIBREVE, SIXTEENTH_NOTE, SIXTEENTH_NOTE_TRIPLET, SN, SNT, SQ, SQD, SQT, THIRTYSECOND_NOTE, THIRTYSECOND_NOTE_TRIPLET, TN, TNT, TSN, TSNT, WHOLE_NOTE, WN
 
Fields inherited from interface jm.constants.Pitches
a0, A0, a1, A1, a2, A2, a3, A3, a4, A4, a5, A5, a6, A6, a7, A7, a8, A8, af0, AF0, af1, AF1, af2, AF2, af3, AF3, af4, AF4, af5, AF5, af6, AF6, af7, AF7, af8, AF8, afn1, AFN1, an1, AN1, as0, AS0, as1, AS1, as2, AS2, as3, AS3, as4, AS4, as5, AS5, as6, AS6, as7, AS7, as8, AS8, asn1, ASN1, b0, B0, b1, B1, b2, B2, b3, B3, b4, B4, b5, B5, b6, B6, b7, B7, b8, B8, bf0, BF0, bf1, BF1, bf2, BF2, bf3, BF3, bf4, BF4, bf5, BF5, bf6, BF6, bf7, BF7, bf8, BF8, bfn1, BFN1, bn1, BN1, bs0, BS0, bs1, BS1, bs2, BS2, bs3, BS3, bs4, BS4, bs5, BS5, bs6, BS6, bs7, BS7, bs8, BS8, bsn1, BSN1, c0, C0, c1, C1, c2, C2, c3, C3, c4, C4, c5, C5, c6, C6, c7, C7, c8, C8, c9, C9, cf0, CF0, cf1, CF1, cf2, CF2, cf3, CF3, cf4, CF4, cf5, CF5, cf6, CF6, cf7, CF7, cf8, CF8, cf9, CF9, cn1, CN1, cs0, CS0, cs1, CS1, cs2, CS2, cs3, CS3, cs4, CS4, cs5, CS5, cs6, CS6, cs7, CS7, cs8, CS8, cs9, CS9, csn1, CSN1, d0, D0, d1, D1, d2, D2, d3, D3, d4, D4, d5, D5, d6, D6, d7, D7, d8, D8, d9, D9, df0, DF0, df1, DF1, df2, DF2, df3, DF3, df4, DF4, df5, DF5, df6, DF6, df7, DF7, df8, DF8, df9, DF9, dfn1, DFN1, dn1, DN1, ds0, DS0, ds1, DS1, ds2, DS2, ds3, DS3, ds4, DS4, ds5, DS5, ds6, DS6, ds7, DS7, ds8, DS8, ds9, DS9, dsn1, DSN1, e0, E0, e1, E1, e2, E2, e3, E3, e4, E4, e5, E5, e6, E6, e7, E7, e8, E8, e9, E9, ef0, EF0, ef1, EF1, ef2, EF2, ef3, EF3, ef4, EF4, ef5, EF5, ef6, EF6, ef7, EF7, ef8, EF8, ef9, EF9, efn1, EFN1, en1, EN1, es0, ES0, es1, ES1, es2, ES2, es3, ES3, es4, ES4, es5, ES5, es6, ES6, es7, ES7, es8, ES8, es9, ES9, esn1, ESN1, f0, F0, f1, F1, f2, F2, f3, F3, f4, F4, f5, F5, f6, F6, f7, F7, f8, F8, f9, F9, ff0, FF0, ff1, FF1, ff2, FF2, ff3, FF3, ff4, FF4, ff5, FF5, ff6, FF6, ff7, FF7, ff8, FF8, ff9, FF9, ffn1, FFN1, fn1, FN1, fs0, FS0, fs1, FS1, fs2, FS2, fs3, FS3, fs4, FS4, fs5, FS5, fs6, FS6, fs7, FS7, fs8, FS8, fs9, FS9, fsn1, FSN1, g0, G0, g1, G1, g2, G2, g3, G3, g4, G4, g5, G5, g6, G6, g7, G7, g8, G8, g9, G9, gf0, GF0, gf1, GF1, gf2, GF2, gf3, GF3, gf4, GF4, gf5, GF5, gf6, GF6, gf7, GF7, gf8, GF8, gf9, GF9, gfn1, GFN1, gn1, GN1, gs0, GS0, gs1, GS1, gs2, GS2, gs3, GS3, gs4, GS4, gs5, GS5, gs6, GS6, gs7, GS7, gs8, GS8, gsn1, GSN1, REST
 
Fields inherited from interface jm.constants.Frequencies
FRQ
 
Fields inherited from interface jm.constants.Tunings
EQUAL, JUST, MEAN, PYTHAGOREAN
 
Fields inherited from interface jm.constants.Volumes
F, FF, FFF, FORTE, FORTISSIMO, MEZZO_FORTE, MEZZO_PIANO, MF, MP, P, PIANISSIMO, PP, PPP, SILENT
 
Fields inherited from interface jm.constants.Panning
PAN_CENTER, PAN_CENTRE, PAN_LEFT, PAN_RIGHT
 
Fields inherited from interface jm.constants.ProgramChanges
AAH, ABASS, AC_GUITAR, ACCORDION, ACOUSTIC_BASS, ACOUSTIC_GRAND, ACOUSTIC_GUITAR, AGOGO, AHHS, ALTO, ALTO_SAX, ALTO_SAXOPHONE, APPLAUSE, ATMOSPHERE, BAG_PIPES, BAGPIPE, BAGPIPES, BANDNEON, BANJO, BARI, BARI_SAX, BARITONE, BARITONE_SAX, BARITONE_SAXOPHONE, BASS, BASSOON, BELL, BELLS, BIRD, BOTTLE, BOTTLE_BLOW, BOWED_GLASS, BRASS, BREATH, BREATHNOISE, BRIGHT_ACOUSTIC, BRIGHTNESS, CALLOPE, CELESTA, CELESTE, CELLO, CGUITAR, CHARANG, CHIFFER, CHIFFER_LEAD, CHOIR, CHURCH_ORGAN, CLAR, CLARINET, CLAV, CLAVINET, CLEAN_GUITAR, CONCERTINA, CONTRA_BASS, CONTRABASS, CRYSTAL, CYMBAL, DGUITAR, DIST_GUITAR, DISTORTED_GUITAR, DOUBLE_BASS, DROPS, DRUM, DX_EPIANO, EBASS, ECHO, ECHO_DROP, ECHO_DROPS, ECHOS, EL_BASS, EL_GUITAR, ELECTRIC_BASS, ELECTRIC_GRAND, ELECTRIC_GUITAR, ELECTRIC_ORGAN, ELECTRIC_PIANO, ELPIANO, ENGLISH_HORN, EPIANO, EPIANO2, FANTASIA, FBASS, FIDDLE, FINGERED_BASS, FLUTE, FRENCH_HORN, FRET, FRET_NOISE, FRETLESS, FRETLESS_BASS, FRETNOISE, FRETS, GLOCK, GLOCKENSPIEL, GMSAW_WAVE, GMSQUARE_WAVE, GOBLIN, GT_HARMONICS, GUITAR, GUITAR_HARMONICS, HALO, HALO_PAD, HAMMOND_ORGAN, HARMONICA, HARMONICS, HARP, HARPSICHORD, HELICOPTER, HONKYTONK, HONKYTONK_PIANO, HORN, ICE_RAIN, ICERAIN, JAZZ_GUITAR, JAZZ_ORGAN, JGUITAR, KALIMBA, KOTO, MARIMBA, METAL_PAD, MGUITAR, MUSIC_BOX, MUTED_GUITAR, MUTED_TRUMPET, NGUITAR, NYLON_GUITAR, OBOE, OCARINA, OGUITAR, OOH, OOHS, ORCHESTRA_HIT, ORGAN, ORGAN2, ORGAN3, OVERDRIVE_GUITAR, PAD, PAN_FLUTE, PANFLUTE, PBASS, PHONE, PIANO, PIANO_ACCORDION, PIC, PICC, PICCOLO, PICKED_BASS, PIPE_ORGAN, PIPES, PITZ, PIZZ, PIZZICATO_STRINGS, POLY_SYNTH, POLYSYNTH, PSTRINGS, RAIN, RECORDER, REED_ORGAN, REVERSE_CYMBAL, RHODES, SAW, SAWTOOTH, SAX, SAXOPHONE, SBASS, SEA, SEASHORE, SFX, SGUITAR, SHAKUHACHI, SHAMISEN, SHANNAI, SITAR, SLAP, SLAP_BASS, SLOW_STRINGS, SOLO_VOX, SOP, SOPRANO, SOPRANO_SAX, SOPRANO_SAXOPHONE, SOUNDEFFECTS, SOUNDFX, SOUNDTRACK, SPACE_VOICE, SQUARE, STAR_THEME, STEEL_DRUM, STEEL_DRUMS, STEEL_GUITAR, STEELDRUM, STEELDRUMS, STR, STREAM, STRINGS, SWEEP, SWEEP_PAD, SYN_CALLIOPE, SYN_STRINGS, SYNTH_BASS, SYNTH_BRASS, SYNTH_CALLIOPE, SYNTH_DRUM, SYNTH_DRUMS, SYNTH_STRINGS, SYNVOX, TAIKO, TELEPHONE, TENOR, TENOR_SAX, TENOR_SAXOPHONE, THUMB_PIANO, THUNDER, TIMP, TIMPANI, TINKLE_BELL, TOM, TOM_TOM, TOM_TOMS, TOMS, TREMOLO, TREMOLO_STRINGS, TROMBONE, TRUMPET, TUBA, TUBULAR_BELL, TUBULAR_BELLS, VIBES, VIBRAPHONE, VIOLA, VIOLIN, VIOLIN_CELLO, VOICE, VOX, WARM_PAD, WHISTLE, WIND, WOODBLOCK, WOODBLOCKS, XYLOPHONE
 
Fields inherited from interface jm.constants.DrumMap
ACOUSTIC_BASS_DRUM, ACOUSTIC_SNARE, BASS_DRUM_1, CABASA, CHINESE_CYMBAL, CLAVES, CLOSED_HI_HAT, COWBELL, CRASH_CYMBAL_1, CRASH_CYMBAL_2, ELECTRIC_SNARE, HAND_CLAP, HI_BONGO, HI_MID_TOM, HI_WOOD_BLOCK, HIGH_AGOGO, HIGH_FLOOR_TOM, HIGH_TIMBALE, HIGH_TOM, LONG_GUIRO, LONG_WHISTLE, LOW_AGOGO, LOW_BONGO, LOW_CONGA, LOW_FLOOR_TOM, LOW_MID_TOM, LOW_TIMBALE, LOW_TOM, LOW_WOOD_BLOCK, MARACAS, MUTE_CUICA, MUTE_HI_CONGA, MUTE_TRIANGLE, OPEN_CUICA, OPEN_HI_CONGA, OPEN_HI_HAT, OPEN_TRIANGLE, PEDAL_HI_HAT, RIDE_BELL, RIDE_CYMBAL_1, RIDE_CYMBAL_2, SHORT_GUIRO, SHORT_WHISTLE, SIDE_STICK, SPLASH_CYMBAL, TAMBOURINE, VIBRASLAP
 
Fields inherited from interface jm.constants.Scales
AEOLIAN_SCALE, BLUES_SCALE, CHROMATIC_SCALE, DIATONIC_MINOR_SCALE, DORIAN_SCALE, HARMONIC_MINOR_SCALE, INDIAN_SCALE, LYDIAN_SCALE, MAJOR_SCALE, MELODIC_MINOR_SCALE, MINOR_SCALE, MIXOLYDIAN_SCALE, NATURAL_MINOR_SCALE, PENTATONIC_SCALE, TURKISH_SCALE
 
Fields inherited from interface jm.constants.Waveforms
COSINE_WAVE, PULSE_WAVE, SABERSAW_WAVE, SAWDOWN_WAVE, SAWTOOTH_WAVE, SINE_WAVE, SQUARE_WAVE, TRIANGLE_WAVE
 
Fields inherited from interface jm.constants.Noises
BROWN_NOISE, FRACTAL_NOISE, SMOOTH_NOISE, STEP_NOISE, WHITE_NOISE
 
Fields inherited from interface jm.constants.Alignments
AFTER, BEFORE, CENTER_ALIGN, CENTER_ON_END, CENTER_ON_START, CENTRE_ALIGN, CENTRE_ON_END, CENTRE_ON_START, END_ON_CENTER, END_ON_CENTRE, END_TOGETHER, START_ON_CENTER, START_ON_CENTRE, START_TOGETHER
 
Constructor Summary
WaveTable(jm.audio.AudioObject[] ao, float[] waveTable)
          This constructor sets the WaveTable to act as a processor object taking in two inputs.
WaveTable(jm.audio.AudioObject ao, float[] waveTable, int aoDestination)
          This constructor sets the WaveTable to act as a processor object taking in one input.
WaveTable(jm.audio.Instrument inst, int sampleRate, float[] waveTable, int channels)
          This constructor sets this wavetable up as a generator object meaning that it will pass sample information down the chain based on its wave table data.
Set WaveTable with some initial values including the sampling rate and the samples to use for this wave table
WaveTable(jm.audio.Instrument inst, int sampleRate, float[] waveTable, int channels, int aoDestination, float val)
          This constructor sets the WaveTable to act as a generator object taking in one input.
 
Method Summary
 void build()
          The build method can be overriden by Audio Objects to provide any extra initialization that may be required before the Audio Object can be used for each new note that needs rendering.
 void setAmp(float amp)
          Set the fixed amp of this wavetable
 void setFrq(float frq)
          Set the fixed Frequecy of this wavetable
 void setFrqRatio(float frqRatio)
          Sets the frequency ratio to alter a notes pitch by
protected  void setSI(float frequency)
          Returns the sampling increment which is used to nextWork out how many samples in the wavetable skip on each pass.
 int work(float[] buffer)
          Moves through the WaveTable array (noramally forwards but sometimes backwards) by increments set by si (sample increment value).
 
Methods inherited from class jm.audio.AudioObject
buildNext, getChannels, getSampleRate, newNote, nextWork
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

waveTable

private float[] waveTable
this contains the wavetable data as samples


si

private float si
how many samples to we skip while passing through the wavetable


phase

private float phase
what is the phase of the wavetable to start at


aoDestination

private int aoDestination
If we have one audio object input is at amp(0) or freq(1) ?


amp

private float amp
Value to use as a fixed amplitude for the waveTable.


frq

private float frq
Value to use as a fixed frequency for the waveTable.


frqRatio

private float frqRatio
Frequency ratio allows an incoming note's pitch to be adjusted to a fixed ratio amount


AMPLITUDE

public static final int AMPLITUDE
constant for use with aoDestination

See Also:
Constant Field Values

FREQUENCY

public static final int FREQUENCY
constant for use with aoDestination

See Also:
Constant Field Values

MONO

public static final int MONO
constant for use with channels

See Also:
Constant Field Values

STEREO

public static final int STEREO
constant for use with channels

See Also:
Constant Field Values
Constructor Detail

WaveTable

public WaveTable(jm.audio.AudioObject[] ao,
                 float[] waveTable)
          throws jm.audio.AOException
This constructor sets the WaveTable to act as a processor object taking in two inputs. Input one is defined as amplitude and input two is defined as frequency.


WaveTable

public WaveTable(jm.audio.AudioObject ao,
                 float[] waveTable,
                 int aoDestination)
This constructor sets the WaveTable to act as a processor object taking in one input. That input can be either amplitude(0) or frequency(1) and is defined by the aoDestination variable (int).


WaveTable

public WaveTable(jm.audio.Instrument inst,
                 int sampleRate,
                 float[] waveTable,
                 int channels,
                 int aoDestination,
                 float val)
This constructor sets the WaveTable to act as a generator object taking in one input. That input can be either amplitude(0) or frequency(1) and is defined by the aoDestination variable (int).


WaveTable

public WaveTable(jm.audio.Instrument inst,
                 int sampleRate,
                 float[] waveTable,
                 int channels)
This constructor sets this wavetable up as a generator object meaning that it will pass sample information down the chain based on its wave table data.
Set WaveTable with some initial values including the sampling rate and the samples to use for this wave table

Method Detail

work

public int work(float[] buffer)
         throws jm.audio.AOException
Moves through the WaveTable array (noramally forwards but sometimes backwards) by increments set by si (sample increment value). This nextWork method can take one or two inputs which are either amplitude, frequency or both (a single input can be assigned to either frequency or amplitude by assigning the aoDestination value to either (0)Amp or (1)Frq in the appropriate constructor. A WaveTable that takes two inputs expects the first input to be amplitude and the second input to be frequency.


build

public void build()
Description copied from class: jm.audio.AudioObject
The build method can be overriden by Audio Objects to provide any extra initialization that may be required before the Audio Object can be used for each new note that needs rendering. The AudioObject parameters currentNote, currentNoteStartTime and numOfSamples will provide any note specific information that the build method may need to utilise.


setAmp

public void setAmp(float amp)
Set the fixed amp of this wavetable


setFrq

public void setFrq(float frq)
Set the fixed Frequecy of this wavetable


setFrqRatio

public void setFrqRatio(float frqRatio)
Sets the frequency ratio to alter a notes pitch by


setSI

protected void setSI(float frequency)
Returns the sampling increment which is used to nextWork out how many samples in the wavetable skip on each pass.