Mozzi  alpha 0.01.1t
sound synthesis library for Arduino
 All Classes Functions Typedefs
Public Member Functions
Sample< NUM_TABLE_CELLS, UPDATE_RATE > Class Template Reference

Sample is like Oscil, it plays a wavetable. More...

List of all members.

Public Member Functions

 Sample (const char *TABLE_NAME)
 Constructor.
 Sample ()
 Constructor.
void setTable (const char *TABLE_NAME)
 Change the sound table which will be played by the Sample.
void setStart (unsigned int start)
 Sets the starting position in samples.
void start ()
 Resets the phase (the playhead) to the start position, which will be 0 unless set to another value with setStart();.
void start (unsigned int startpos)
 Sets the a new start position and sets the phase (the playhead) to that position.
void setEnd (unsigned int end)
 Sets the end position in samples from the beginning of the sound.
void rangeWholeSample ()
 Sets the start and end points to include the range of the whole sound table.
void setLoopingOn ()
 Turns looping on, with the whole sample length as the loop range.
void setLoopingOff ()
 Turns looping off.
char next ()
 Returns the sample at the current phase position, or 0 if looping is off and the phase overshoots the end of the sample.
void setFreq (unsigned int frequency)
 Returns the next sample given a phase modulation value.
void setFreq (float frequency)
 Set the sample frequency with a float.
void setFreq_Q24n8 (Q24n8 frequency)
 Set the frequency using Q24n8 fixed-point number format.
char atIndex (unsigned int index)
 Returns the sample at the given table index.
unsigned long phaseIncFromFreq (unsigned int frequency)
 phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies.
void setPhaseInc (unsigned long phaseinc_fractional)
 Set a specific phase increment.

Detailed Description

template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE>
class Sample< NUM_TABLE_CELLS, UPDATE_RATE >

Sample is like Oscil, it plays a wavetable.

However, Sample can be set to play once through only, with variable start and end points, or can loop, also with variable start and end points. It defaults to playing once through the whole sound table, from start to finish.

Template Parameters:
NUM_TABLE_CELLSThis is defined in the table ".h" file the Sample will be using. The sound table can be arbitrary length for Sample. It's important that NUM_TABLE_CELLS is either a literal number (eg. "8192") or a defined macro, rather than a const or int, for the Sample to run fast enough.
UPDATE_RATEThis will be AUDIO_RATE if the Sample is updated in updateAudio(), or CONTROL_RATE if it's updated each time updateControl() is called. It could also be a fraction of CONTROL_RATE if you are doing some kind of cyclic updating in updateControl(), for example, to spread out the processor load.

char2mozzi

Converting soundfiles for Mozzi. There is a python script called char2mozzi.py in the Mozzi/python folder. The script converts raw sound data saved from a program like Audacity. Instructions are in the char2mozzi.py file.

Definition at line 62 of file Sample.h.


Constructor & Destructor Documentation

template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE>
Sample< NUM_TABLE_CELLS, UPDATE_RATE >::Sample ( const char *  TABLE_NAME) [inline]

Constructor.

Parameters:
TABLE_NAMEthe name of the array the Sample will be using. This can be found in the table ".h" file if you are using a table made for Mozzi by the char2mozzi.py python script in Mozzi's python folder. Sound tables can be of arbitrary lengths for Sample().

Definition at line 73 of file Sample.h.

template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE>
Sample< NUM_TABLE_CELLS, UPDATE_RATE >::Sample ( ) [inline]

Constructor.

Declare a Sample with template TABLE_NUM_CELLS and UPDATE_RATE parameters, without specifying a particular wave table for it to play. The table can be set or changed on the fly with setTable().

Definition at line 85 of file Sample.h.


Member Function Documentation

template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE>
char Sample< NUM_TABLE_CELLS, UPDATE_RATE >::atIndex ( unsigned int  index) [inline]

Returns the sample at the given table index.

Parameters:
atIndextable index between 0 and the table size.The index rolls back around to 0 if it's larger than the table size.
Returns:
the sample at the given table index.

Definition at line 278 of file Sample.h.

template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE>
char Sample< NUM_TABLE_CELLS, UPDATE_RATE >::next ( ) [inline]

Returns the sample at the current phase position, or 0 if looping is off and the phase overshoots the end of the sample.

Updates the phase according to the current frequency.

Returns:
the next sample value from the table, or 0 if it's finished playing.
Todo:
in next(), incrementPhase() happens in a different position than for Oscil - check if it can be standardised

Definition at line 181 of file Sample.h.

template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE>
unsigned long Sample< NUM_TABLE_CELLS, UPDATE_RATE >::phaseIncFromFreq ( unsigned int  frequency) [inline]

phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies.

Instead of recalculating the phase increment for each frequency in between, you can just calculate the phase increment for each end frequency with phaseIncFromFreq(), then use a Line to interpolate on the fly and use setPhaseInc() to set the phase increment at each step. (Note: I should really profile this with the oscilloscope to see if it's worth the extra confusion!)

Parameters:
frequencyfor which you want to calculate a phase increment value.
Returns:
the phase increment value which will produce a given frequency.

Definition at line 295 of file Sample.h.

template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE>
void Sample< NUM_TABLE_CELLS, UPDATE_RATE >::setEnd ( unsigned int  end) [inline]

Sets the end position in samples from the beginning of the sound.

Parameters:
endposition in samples.

Definition at line 139 of file Sample.h.

template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE>
void Sample< NUM_TABLE_CELLS, UPDATE_RATE >::setFreq ( unsigned int  frequency) [inline]

Returns the next sample given a phase modulation value.

Parameters:
aphase modulation value given as a proportion of the wave. The phmod_proportion parameter is a Q15n16 fixed-point number where to fractional n16 part represents -1 to 1, modulating the phase by one whole table length in each direction.
Returns:
a sample from the table. Set the oscillator frequency with an unsigned int. This is faster than using a float, so it's useful when processor time is tight, but it can be tricky with low and high frequencies, depending on the size of the wavetable being used. If you're not getting the results you expect, try explicitly using a float, or try setFreq_Q24n8.
Parameters:
frequencyto play the wave table.

Definition at line 229 of file Sample.h.

template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE>
void Sample< NUM_TABLE_CELLS, UPDATE_RATE >::setFreq ( float  frequency) [inline]

Set the sample frequency with a float.

Using a float is the most reliable way to set frequencies, -Might- be slower than using an int but you need either this or setFreq_Q24n8 for fractional frequencies.

Parameters:
frequencyto play the wave table.

Definition at line 243 of file Sample.h.

template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE>
void Sample< NUM_TABLE_CELLS, UPDATE_RATE >::setFreq_Q24n8 ( Q24n8  frequency) [inline]

Set the frequency using Q24n8 fixed-point number format.

This might be faster than the float version for setting low frequencies such as 1.5 Hz, or other values which may not work well with your table size. Note: use with caution because it's prone to overflow with higher frequencies and larger table sizes. An Q24n8 representation of 1.5 is 384 (ie. 1.5 * 256).

Parameters:
frequencyin Q24n8 fixed-point number format.

Definition at line 261 of file Sample.h.

template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE>
void Sample< NUM_TABLE_CELLS, UPDATE_RATE >::setPhaseInc ( unsigned long  phaseinc_fractional) [inline]

Set a specific phase increment.

See phaseIncFromFreq().

Parameters:
phaseinc_fractionala phase increment value as calculated by phaseIncFromFreq().

Definition at line 305 of file Sample.h.

template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE>
void Sample< NUM_TABLE_CELLS, UPDATE_RATE >::setStart ( unsigned int  start) [inline]

Sets the starting position in samples.

Parameters:
offsetposition in samples.

Definition at line 106 of file Sample.h.

template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE>
void Sample< NUM_TABLE_CELLS, UPDATE_RATE >::setTable ( const char *  TABLE_NAME) [inline]

Change the sound table which will be played by the Sample.

Parameters:
TABLE_NAMEis the name of the array in the table ".h" file you're using.

Definition at line 96 of file Sample.h.

template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE>
void Sample< NUM_TABLE_CELLS, UPDATE_RATE >::start ( unsigned int  startpos) [inline]

Sets the a new start position and sets the phase (the playhead) to that position.

Parameters:
startposition in samples from the beginning of the sound.

Definition at line 128 of file Sample.h.


The documentation for this class was generated from the following file: