##A Web Audio library
Pizzicato aims to simplify the way you create and manipulate sounds via the Web Audio API. Take a look at the demo site here.
You can use bower to get Pizzicato
bower install pizzicato
Or checkout the project, install dependencies with
npm install
And then run tests and build with
gulp test
Or to build without tests:
gulp scripts
Include Pizzicato in your site
<script src="./Pizzicato.js"></script>
Create a sound
var sawtoothWave = new Pizzicato.Sound({
source: 'wave',
options {
type: 'sawtooth'
}
});
Add effects
var delay = new Pizzicato.Effects.Delay();
sawtoothWave.addEffect(delay);
Play it!
sawtoothWave.play();
Typically, the description
object contains a string source
and an object options
.
For example, this objects describes a sine waveform with a frequency of 440:
{
source: 'wave',
options: {
type: 'sine',
frequency: 440
}
}
Sounds can be created from a variety of sources.
### Sounds from a wave To create a sound from an oscillator with a certain waveform, use the ```source: wave``` in your description. Additionally, the following optional parameters are possible inside the ```options``` object: * ```type``` _(Optional; ```sine```, ```square```, ```triangle``` or ```sawtooth```, defaults to ```sine```)_: Specifies the type of waveform. * ```frequency``` _(Optional; defaults to 440)_: Indicates the frequency of the wave (i.e., a 440 value will yield an A note). * ```volume``` _(Optional; min: 0, max: 1, defaults to 1)_: Loudness of the sound. * ```sustain``` _(Optional; defaults to 0.4)_: Value in seconds that indicates the fade-out time when the sound is stopped. * ```attack``` _(Optional; defaults to 0.4)_: Value in seconds that indicates the fade-in time when the sound is played.var sound = new Pizzicato.Sound({
source: 'wave',
options: { type: 'sawtooth', frequency: 440 }
});
Creating a Pizzicato Sound with an empty constructor will create a sound with a sine wave and a frequency of 440.
var sound = new Pizzicato.Sound();
var sound = new Pizzicato.Sound({
source: 'file',
options: { path: './audio/sound.wav' }
}, function() {
console.log('sound file loaded!');
});
It is possible to pass several paths to fallback in case of error:
var sound = new Pizzicato.Sound({
source: 'file',
options: { path: ['./audio/sound-special-format.wav', './audio/sound.wav'] }
}, function() {
console.log('sound file loaded!');
});
Alternatively, you can also simply pass a string to the constructor with the path of the sound file.
var sound = new Pizzicato.Sound('./audio/sound.wav', function() {...});
Check the supported audio files that can be played with Pizzicato.
### Sounds from the user input It is also possible to use the sound input from the computer. This is usually the microphone, but it could also be a line-in input. To use this, add ```source: input``` in your description. The following optional parameters are possible inside ```options``` object: * ```volume``` _(Optional; min: 0, max: 1, defaults to 1)_: Loudness of the sound. * ```sustain``` _(Optional; defaults to 0)_: Value in seconds that indicates the fade-out time once the sound is stopped. * ```attack``` _(Optional; defaults to 0.4)_: Value in seconds that indicates the fade-in time when the sound is played.var voice = new Pizzicato.Sound({
source: 'input',
options: { volume: 0.8 }
});
For example:
var whiteNoise = Pizzicato.Sound({
type: 'script',
options: {
audioFunction: function(e) {
var output = e.outputBuffer.getChannelData(0);
for (var i = 0; i < e.outputBuffer.length; i++)
output[i] = Math.random();
}
}
});
Example:
var delay = new Pizzicato.Effects.Delay({
feedback: 0.8,
time: 0.22,
mix: 0.75
});
sound.addEffect(delay);
sound.play();
Example:
var distortion = new Pizzicato.Effects.Delay({
gain: 0.4
});
sound.addEffect(delay);
sound.play();
Example:
var flanger = new Pizzicato.Effects.Flanger({
time: 0.45,
speed: 0.2,
depth: 0.1,
feedback: 0.1,
mix: 0.5
});
sound.addEffect(flanger);
sound.play();
The following options are available when creating a compressor effect:
threshold
(min: -100, max: 0, defaults to -24) The decibel value above which the compression will start taking effect.knee
(min: 0, max: 40, defaults to 30) A value representing the range above the threshold where the curve smoothly transitions to the "ratio" portion.attack
(min: 0, max: 1, defaults to 0.003) How soon the compressor starts to compress the dynamics after the threshold is exceeded. Short values will result in a fast response to sudden, loud sounds, but will make the changes in volume more obvious to listeners.release
(min: 0, max: 1, defaults to 0.025) How soon the compressor starts to release the volume level back to normal after the level drops below the threshold.ratio
(min: 1, max: 20, defaults to 12) The amount of compression applied to the audio once it passes the threshold level. The higher the Ratio the more the loud parts of the audio will be compressed.
Example:
var compressor = new Pizzicato.Effects.Delay({
threshold: -20,
knee: 22,
attack: 0.05,
release: 0.05,
ratio: 18
});
sound.addEffect(compressor);
sound.play();
frequency
(min: 10, max: 22050, defaults to 350): The cutoff frequency of the low-pass filter.peak
(min: 0.0001, max: 1000, defaults to 1): Indicates how peaked the frequency is around the cutoff frequency. The greater the value is, the greater is the peak.
Example:
var lowPassFilter = new Pizzicato.Effects.LowPassFilter({
frequency: 400,
peak: 10
});
sound.addEffect(lowPassFilter);
sound.play();
frequency
(min: 10, max: 22050, defaults to 350): The cutoff frequency of the high-pass filter.peak
(min: 0.0001, max: 1000, defaults to 1): Indicates how peaked the frequency is around the cutoff frequency. The greater the value is, the greater is the peak.
Example:
var highPassFilter = new Pizzicato.Effects.HighPassFilter({
frequency: 120,
peak: 10
});
sound.addEffect(highPassFilter);
sound.play();
pan
(min: -1, max: 1, defaults to 0): Pan value between -1 (full left pan) and 1 (full right pan).
Example:
var stereoPanner = new Pizzicato.Effects.StereoPanner({
pan: 0.5
});
sound.addEffect(stereoPanner);
sound.play();