| Type: | Package | 
| Title: | A Simple Sequencer for Data Sonification | 
| Version: | 1.0.1 | 
| Description: | A rudimentary sequencer to define, manipulate and mix sound samples. The underlying motivation is to sonify data, as demonstrated in the blog https://globxblog.github.io/, the presentation by Renard and Le Bescond (2022, https://hal.science/hal-03710340v1) or the poster by Renard et al. (2023, https://hal.inrae.fr/hal-04388845v1). | 
| License: | GPL-3 | 
| Encoding: | UTF-8 | 
| LazyData: | true | 
| URL: | https://github.com/benRenard/sequenceR | 
| BugReports: | https://github.com/benRenard/sequenceR/issues | 
| Depends: | R (≥ 3.5.0) | 
| Imports: | tuneR | 
| Suggests: | knitr, rmarkdown, ggplot2, gganimate, tidyr, dplyr, av | 
| RoxygenNote: | 7.2.3 | 
| VignetteBuilder: | knitr | 
| NeedsCompilation: | no | 
| Packaged: | 2025-01-10 10:41:06 UTC; brenard | 
| Author: | Benjamin Renard | 
| Maintainer: | Benjamin Renard <benjamin.renard@inrae.fr> | 
| Repository: | CRAN | 
| Date/Publication: | 2025-01-13 17:30:05 UTC | 
Wagga-Wagga dataset
Description
Times series of monthly temperatures and precipitations recorded at Wagga-Wagga, New South Wales, Australia, 1940-2018
Usage
WaggaWagga
Format
An object of class data.frame with 79 rows and 3 columns.
Source
http://www.bom.gov.au/cgi-bin/climate/hqsites/site_data.cgi?period=annual&variable=meanT&station=072150
http://www.bom.gov.au/cgi-bin/climate/hqsites/site_data.cgi?period=annual&variable=rain&station=072150
Delay effect
Description
Apply a delay to a sound sample. See https://en.wikipedia.org/wiki/Comb_filter
Usage
applyDelay(sample, type = "feedforward", delayTime = 0.6, echoes = c(0.8))
Arguments
| sample | soundSample object, input sample | 
| type | Character string, the delay type: feedforward or feedback | 
| delayTime | Numeric >0, delay time in s. | 
| echoes | Numeric vector >0. The size of the vector gives the number of echoes, the values the level of each echo (generally decreases to 0). | 
Value
The sound sample with a delay effect
Examples
# example code
notes=c('E3','G3','A3','B3','D4','E4','G4')
synth=getSynth(notes)
raw=as.soundSample(play.instrument(synth,notes=notes[c(1,2,3,2,3,4,3,4,5,4,5,6,5,6,7)]))
plot(raw)
## Not run: 
# All calls to function 'listen' are wrapped in \dontrun{} since
# they rely on an external audio player to listen to the audio samples.
# See ?tuneR::setWavPlayer for setting a default player.
listen(raw)
## End(Not run)
# Single echo by default
cooked=applyDelay(raw)
plot(cooked)
## Not run: listen(cooked)
# Multiple echoes
cooked=applyDelay(raw,echoes=1/(1:10))
plot(cooked)
## Not run: listen(cooked)
# Feedback-type delay
cooked=applyDelay(raw,echoes=1/(1:10),type='feedback')
plot(cooked)
## Not run: listen(cooked)
Distortion effect
Description
Apply a distortion to a sound sample
Usage
applyDisto(sample, type = c("clip", "tanh"), level = 2, ..., rescale = FALSE)
Arguments
| sample | soundSample object, input sample | 
| type | Character string, the distortion type | 
| level | Numeric >0, distortion level | 
| ... | other parameters passed to the distortion transfer function | 
| rescale | Logical. If TRUE, the soundSample wave is rescaled to [-1,1] | 
Value
The distorted sound sample
Examples
# example code
raw=oscillator(freq=110,duration=0.5)
plot(raw)
dist=applyDisto(raw,type='tanh',level=5)
plot(dist)
Apply an envelope
Description
Apply a volume envelope to a sound sample.
Usage
applyEnvelope(sample, env)
Arguments
| sample | Sound sample object. | 
| env | Envelope object. Envelope values should all be between 0 and 1. | 
Value
A sound sample object.
Examples
# Define the sound sample
sam <- soundSample(sin(2*pi*seq(0,0.5,1/44100)*220)) # 0.5-second A (220 Hz)
# Define the envelope
env <- envelope(t=c(0,0.03,1),v=c(0,1,0))
# Apply it
res <- applyEnvelope(sam,env)
# Compare waveforms
plot(sam,main='before')
plot(res,main='after')
## Not run: 
# This line of code is wrapped in \dontrun{} since it relies
# on an external audio player to listen to the audio sample.
# See ?tuneR::setWavPlayer for setting a default player.
listen(res)
## End(Not run)
Cast to a tuneR::Wave object
Description
Convert a soundSample into a tuneR::Wave object.
Usage
as.Wave(x)
Arguments
| x | sound sample object. | 
Value
a tuneR Wave object.
Examples
sam <- soundSample(sin(2*pi*seq(0,1,,44100)*440)) # 1-second A (440 Hz)
w <- as.Wave(sam)
tuneR::plot(w)
Cast to a sound sample
Description
Convert a tuneR::Wave object into a soundSample.
Usage
as.soundSample(w, pan = 0)
Arguments
| w | tuneR Wave object | 
| pan | Numeric in [-1;1], panoramic. -1 (resp. 1) only select the left (resp. right) channel of w (if the latter is stereo). 0 averages both channels | 
Value
An object of class 'soundSample'.
Examples
w <- tuneR::Wave(left=sin(2*pi*seq(0,1,,44100)*440)) # 1-second A
sam <- as.soundSample(w)
plot(sam)
Bell sample
Description
A ride cymbal (hit ion the bell) sound sample object
Usage
bell
Format
An object of class soundSample of length 4.
Check wave size
Description
Check that the size of a wave does not exceed the maximum allowed size.
Usage
checkMaxSize(n, nmax)
Arguments
| n | integer, size to be checked | 
| nmax | integer, maximum allowed size | 
Value
nothing - just stops execution with an error message if n>nmax
Check sequencer arguments
Description
Check that the arguments used in sequencing functions (e.g. time, volume, pan, etc.) are valid.
Usage
checkSeqArgs(argList)
Arguments
| argList | list, a named list containg the arguments | 
Value
nothing - just stops execution with an error message if something is invalid
Clip distortion
Description
Transfer function for 'clip' distortion
Usage
disto_clip(x, level)
Arguments
| x | Numeric vector in [-1,1], input signal | 
| level | Numeric (>=0), distortion level | 
Value
a numeric vector containing the distorted output signal
Tanh distortion
Description
Transfer function for 'tanh' distortion
Usage
disto_tanh(x, level)
Arguments
| x | Numeric vector in [-1,1], input signal | 
| level | Numeric (>=0), distortion level | 
Value
a numeric vector containing the distorted output signal
Envelope constructor.
Description
Creates a new instance of an 'envelope' object (https://en.wikipedia.org/wiki/Envelope_(music)). In this package an envelop is viewed as a curve v(t), where t is the time and v the value of the envelope. Time t is normalized between 0 and 1 so that 1 corresponds to the end of the sound sample the envelope is applied to (and 0 to its beginning). The curve is defined by a discrete set of points (t,v) (linear interpolation in between).
Usage
envelope(t, v)
Arguments
| t | Numeric vector, normalized time. Vector of increasing values starting at 0 and ending at 1. | 
| v | Numeric vector, same size as t, envelop values v(t). | 
Value
An object of class 'envelope'.
Examples
# A triangular envelop
env <- envelope(t=c(0,0.3,1),v=c(0,1,0))
# An ADSR envelope (https://en.wikipedia.org/wiki/Envelope_(music)#ADSR)
env <- envelope(t=c(0,0.1,0.3,0.8,1),v=c(0,1,0.4,0.4,0))
# An envelope that could be used for a 1-octave frequency modulation (from 440 to 220 Hz)
env <- envelope(t=c(0,1),v=c(440,220))
# An envelope that could be used for phase modulation
# (https://en.wikipedia.org/wiki/Phase_modulation)
env <- envelope(t=seq(0,1,0.01),v=(-pi/2)*sin(2*pi*4*seq(0,1,0.01)))
Notes-to-frequencies function
Description
Get frequencies from note names (in scientific pitch notation).
Usage
getFrequencies(notes, minOctave = 0, maxOctave = 8)
Arguments
| notes | Character vector, note names. | 
| minOctave | integer, smallest (lowest-pitched) octave | 
| maxOctave | integer, largest (highest-pitched) octave | 
Value
a numeric vector of frequencies (in Hz)
Examples
# example code
getFrequencies(c('A3','A4','A5','C#6','Db6','A9','X0'))
getFrequencies(c('A3','A4','A5','C#6','Db6','A9','X0'),maxOctave=9)
Harmonics sound sample
Description
Creates a sound sample corresponding to the kth harmonics of a given frequency
Usage
getHarmonics(
  freq,
  k,
  peak = 0.03,
  decay = 0.8,
  duration = 1,
  sustain = 0.25,
  type = "sine"
)
Arguments
| freq | Numeric, base frequency in Hz | 
| k | Integer >=1, kth harmonics | 
| peak | Numeric, peak time in seconds | 
| decay | Numeric, end-of-decay time in seconds | 
| duration | Numeric, total duration in seconds | 
| sustain | Numeric, sustain volume | 
| type | String, oscillator type, one of 'sine', 'saw', 'square' or 'triangle'. If an unknowm string is provided, a sine oscillator will be used. | 
Value
An object of class 'soundSample'.
Examples
sam1 <- getHarmonics(440,1)
plot(sam1)
sam2 <- getHarmonics(440,3)
plot(sam2)
## Not run: 
# This line of code is wrapped in \dontrun{} since it relies
# on an external audio player to listen to the audio sample.
# See ?tuneR::setWavPlayer for setting a default player.
listen(sam2)
## End(Not run)
Frequencies-to-notes function
Description
Get notes (in scientific pitch notation) from frequencies. The note with the closest frequency is returned.
Usage
getNotes(frequencies, minOctave = 0, maxOctave = 8, option = "b")
Arguments
| frequencies | numeric vector, frequencies in Hz | 
| minOctave | integer, smallest (lowest-pitched) octave | 
| maxOctave | integer, largest (highest-pitched) octave | 
| option | character, use 'b' or '#' in note names? | 
Value
a character vector of notes
Examples
# example code
getNotes(seq(440,10000,100))
getNotes(seq(440,10000,100),maxOctave=10,option='#')
Synthesizer
Description
Creates an additive, Hammond-inspired Synthesizer. Higher harmonics decay faster and have smaller sustain.
Usage
getSynth(
  notes,
  nHarmonics = 5,
  peak = 0.03,
  decay = 0.8,
  duration = 1,
  sustain = 0.25,
  decayPar = 1,
  sustainPar = 4,
  type = "sine"
)
Arguments
| notes | Character vector, note names | 
| nHarmonics | Integer >=1, number of harmonics | 
| peak | Numeric, peak time in seconds | 
| decay | Numeric, end-of-decay time in seconds | 
| duration | Numeric, total duration in seconds | 
| sustain | Numeric, sustain volume | 
| decayPar | Numeric, the higher the value the smaller the decay time for higher harmonics | 
| sustainPar | Numeric, the higher the value the smaller the sustain volume for higher harmonics | 
| type | String, oscillator type, one of 'sine', 'saw', 'square' or 'triangle'. If an unknown string is provided, a sine oscillator will be used. | 
Value
An object of class 'instrument'.
Examples
synth <- getSynth(c('E2','B2','E3','G3','A3'))
w=play.instrument(synth,time=(0:(length(synth)-1))*0.5,fadeout=rep(Inf,length(synth)))
tuneR::plot(w)
## Not run: 
# This line of code is wrapped in \dontrun{} since it relies
# on an external audio player to play the audio sample.
# See ?tuneR::setWavPlayer for setting a default player.
tuneR::play(w)
## End(Not run)
Single note from a synthesizer
Description
Creates one note with frequency freq from an additive, Hammond-inspired synth. Higher harmonics decay faster and have smaller sustain.
Usage
getSynthNote(
  freq,
  nHarmonics = 5,
  peak = 0.03,
  decay = 0.8,
  duration = 1,
  sustain = 0.25,
  decayPar = 1,
  sustainPar = 4,
  type = "sine"
)
Arguments
| freq | Numeric, base frequency in Hz | 
| nHarmonics | Integer >=1, number of harmonics | 
| peak | Numeric, peak time in seconds | 
| decay | Numeric, end-of-decay time in seconds | 
| duration | Numeric, total duration in seconds | 
| sustain | Numeric, sustain volume | 
| decayPar | Numeric, the higher the value the smaller the decay time for higher harmonics | 
| sustainPar | Numeric, the higher the value the smaller the sustain volume for higher harmonics | 
| type | String, oscillator type, one of 'sine', 'saw', 'square' or 'triangle'. If an unknown string is provided, a sine oscillator will be used. | 
Value
An object of class 'soundSample'.
Examples
sam <- getSynthNote(440,nHarmonics=7)
plot(sam)
## Not run: 
# This line of code is wrapped in \dontrun{} since it relies
# on an external audio player to listen to the audio sample.
# See ?tuneR::setWavPlayer for setting a default player.
listen(sam)
## End(Not run)
Get sampling time
Description
Get the times steps associated with a sound sample.
Usage
getTime(x)
Arguments
| x | sound sample object. | 
Value
a numeric vector containing the sampling times in second.
Examples
# Define sound sample
sam <- soundSample(sin(2*pi*seq(0,1,,44100)*440)+0.1*rnorm(44100)) # 1-second noisy A
# Compute sampling times
timeSteps=getTime(sam)
Global Temperature Anomalies dataset
Description
Times series of annual temperature anomalies at the global scale, 1850-2021. This time series is the one used to create the Warming Stripes (https://www.climate-lab-book.ac.uk/2018/warming-stripes/).
Usage
globalT
Format
An object of class data.frame with 172 rows and 2 columns.
Source
https://www.metoffice.gov.uk/hadobs/hadcrut4/data/current/download.html
Hi-hat sample
Description
A hi-hat sound sample object
Usage
hiHat
Format
An object of class soundSample of length 4.
Hi-hat sample 2
Description
A hi-hat sound sample object
Usage
hiHat2
Format
An object of class soundSample of length 4.
Source
http://www.archive.org/details/OpenPathMusic44V1
Open Hi-hat sample
Description
An open hi-hat sound sample object
Usage
hiHat_o
Format
An object of class soundSample of length 4.
Instrument constructor.
Description
Creates a new instance of an 'instrument' object. An instrument is a named list of sound samples (all with the same sampling rate).
Usage
instrument(samples, notes = as.character(1:length(samples)))
Arguments
| samples | list of sound samples | 
| notes | string vector, name given to each sample | 
Value
An object of class 'Instrument'.
Examples
drumset <- instrument(samples=list(kick,snare,hiHat),notes=c('boom','tat','cheet'))
Kick sample
Description
A kick sound sample object
Usage
kick
Format
An object of class soundSample of length 4.
Kick sample2
Description
A kick sound sample object
Usage
kick2
Format
An object of class soundSample of length 4.
Source
http://www.archive.org/details/OpenPathMusic44V1
Listen to a sound sample
Description
Listen to a sound sample. Based on tuneR function 'play'
Usage
listen(x)
Arguments
| x | sound sample object. | 
Value
nothing - listening function.
Examples
# Define sound sample
sam <- soundSample(sin(2*pi*seq(0,1,,44100)*440)+0.1*rnorm(44100)) # 1-second noisy A
## Not run: 
# This line of code is wrapped in \dontrun{} since it relies
# on an external audio player to listen to the audio sample.
# See ?tuneR::setWavPlayer for setting a default player.
listen(sam)
## End(Not run)
TR-909 minimalistic drumkit
Description
An instrument containing a few basic sounds from a TR-909-inspired drumkit
Usage
mini909
Format
An object of class instrument of length 6.
Source
https://freesound.org/people/altemark/packs/1643/
Mix several waves
Description
Take several wave objects (package tuneR) and mix them according to volume and pan.
Usage
mix(waves, volume = rep(1, length(waves)), pan = rep(0, length(waves)))
Arguments
| waves | List of wave S4 objects (tuneR) | 
| volume | Numeric vector, volume between 0 and 1. | 
| pan | Numeric vector, pan between -1 (left) and 1 (right) (0 = centered). | 
Value
the result of th mix, an S4 Wave object (from package tuneR).
Examples
# A 2-second drum groove (4/4 measure)
# hi-hat on 16th notes
hh <- sequence(hiHat,time=2*(0:15)/16,volume=rep(c(1,rep(0.5,3)),4))
# bass kick on 1 and 3
k <- sequence(kick,time=2*c(0,8)/16)
# snare on 2 and 4
s <- sequence(snare,time=2*c(4,12)/16)
# Mix the 3 tracks
m1 <- mix(list(hh,k,s))
## Not run: 
# All calls to function 'tuneR::play' ar wrapped in \dontrun{} since they rely
# on an external audio player to play the audio sample.
# See ?tuneR::setWavPlayer for setting a default player.
tuneR::play(m1)
## End(Not run)
# Try with less hihat, more kick
m2 <- mix(list(hh,k,s),volume=c(0.3,1,0.8))
## Not run: tuneR::play(m2)
Note-frequency table
Description
Builds a dataframe containing notes (in scientific pitch notation) and corresponding frequencies.
Usage
noteFrequencyTable(minOctave = 0, maxOctave = 8)
Arguments
| minOctave | integer, smallest (lowest-pitched) octave | 
| maxOctave | integer, largest (highest-pitched) octave | 
Value
a data frame with 4 columns: note name 1 (written with 'b'), note name 2 (written with '#'),index (in semitones with respect to A4) and frequency (in Hz)
Examples
# example code
noteFrequencyTable()
General oscillator
Description
Creates a soundSample using a oscillator.
Usage
oscillator(type = "sine", freq = 440, duration = 1, phase = 0, rate = 44100)
Arguments
| type | String, oscillator type, one of 'sine', 'saw', 'square' or 'triangle'. If an unknown string is provided, a sine oscillator will be used. | 
| freq | Numeric, note frequency in Hz | 
| duration | Numeric, note duration in second | 
| phase | Numeric, phase in radians (typically between 0 and 2*pi) | 
| rate | Numeric, sampling rate in Hz | 
Value
An object of class 'soundSample'.
Examples
sam <- oscillator(type='saw',freq=220,duration=0.1)
plot(sam)
## Not run: 
# This line of code is wrapped in \dontrun{} since it relies
# on an external audio player to listen to the audio sample.
# See ?tuneR::setWavPlayer for setting a default player.
listen(sam)
## End(Not run)
Pattern-based oscillator
Description
Creates a soundSample by repeating a user-provided pattern.
Usage
oscillator_pattern(pattern, freq = 440, duration = 1, rate = 44100)
Arguments
| pattern | Numeric vector, pattern. | 
| freq | Numeric, note frequency in Hz | 
| duration | Numeric, note duration in second | 
| rate | Numeric, sampling rate in Hz | 
Value
An object of class 'soundSample'.
Examples
sam <- oscillator_pattern(pattern=airquality$Ozone,freq=110,duration=0.1)
plot(sam)
## Not run: 
# This line of code is wrapped in \dontrun{} since it relies
# on an external audio player to listen to the audio sample.
# See ?tuneR::setWavPlayer for setting a default player.
listen(sam)
## End(Not run)
Saw oscillator
Description
Creates a soundSample using a saw oscillator.
Usage
oscillator_saw(freq = 440, duration = 1, phase = 0, rate = 44100)
Arguments
| freq | Numeric, note frequency in Hz | 
| duration | Numeric, note duration in second | 
| phase | Numeric, phase in radians (typically between 0 and 2*pi) | 
| rate | Numeric, sampling rate in Hz | 
Value
An object of class 'soundSample'.
Examples
sam <- oscillator_saw(freq=220,duration=0.1)
plot(sam)
## Not run: 
# This line of code is wrapped in \dontrun{} since it relies
# on an external audio player to listen to the audio sample.
# See ?tuneR::setWavPlayer for setting a default player.
listen(sam)
## End(Not run)
Sine oscillator
Description
Creates a soundSample using a sine oscillator.
Usage
oscillator_sine(freq = 440, duration = 1, phase = 0, rate = 44100)
Arguments
| freq | Numeric, note frequency in Hz | 
| duration | Numeric, note duration in second | 
| phase | Numeric, phase in radians (typically between 0 and 2*pi) | 
| rate | Numeric, sampling rate in Hz | 
Value
An object of class 'soundSample'.
Examples
sam <- oscillator_sine(freq=220,duration=0.1)
plot(sam)
## Not run: 
# This line of code is wrapped in \dontrun{} since it relies
# on an external audio player to listen to the audio sample.
# See ?tuneR::setWavPlayer for setting a default player.
listen(sam)
## End(Not run)
Square oscillator
Description
Creates a soundSample using a square oscillator.
Usage
oscillator_square(freq = 440, duration = 1, phase = 0, rate = 44100)
Arguments
| freq | Numeric, note frequency in Hz | 
| duration | Numeric, note duration in second | 
| phase | Numeric, phase in radians (typically between 0 and 2*pi) | 
| rate | Numeric, sampling rate in Hz | 
Value
An object of class 'soundSample'.
Examples
sam <- oscillator_square(freq=220,duration=0.1)
plot(sam)
## Not run: 
# This line of code is wrapped in \dontrun{} since it relies
# on an external audio player to listen to the audio sample.
# See ?tuneR::setWavPlayer for setting a default player.
listen(sam)
## End(Not run)
Triangle oscillator
Description
Creates a soundSample using a triangle oscillator.
Usage
oscillator_triangle(freq = 440, duration = 1, phase = 0, rate = 44100)
Arguments
| freq | Numeric, note frequency in Hz | 
| duration | Numeric, note duration in second | 
| phase | Numeric, phase in radians (typically between 0 and 2*pi) | 
| rate | Numeric, sampling rate in Hz | 
Value
An object of class 'soundSample'.
Examples
sam <- oscillator_triangle(freq=220,duration=0.1)
plot(sam)
## Not run: 
# This line of code is wrapped in \dontrun{} since it relies
# on an external audio player to listen to the audio sample.
# See ?tuneR::setWavPlayer for setting a default player.
listen(sam)
## End(Not run)
Pan-to-volume function
Description
Transforms a pan (between -1 for full left and 1 for full right) into right/left normalized volumes between 0 and 1
Usage
pan2vol(pan, channel)
Arguments
| pan | Numeric between -1 and 1 | 
Value
a list of length 2 with fields left and right.
Pitch mapping function
Description
Maps a series of values into pitches of notes
Usage
pitchMapping(x, notes)
Arguments
| x | Numeric vector | 
| notes | character vector, notes onto which values are map (i.e. the musical scakle). Notes should be written in Scientific pitch notation, e.g. c('C4','E4','G4') (see https://en.wikipedia.org/wiki/Scientific_pitch_notation) | 
Value
a character vector representing the original values transformed into pitches
Examples
pitchMapping(x=1:10,notes=c('C4','E4','G4'))
pitchMapping(rnorm(20),notes=c('E3','Gb3','G3','A3','B3','C4','D4'))
Play an instrument
Description
Take a sound sample and repeat it following given timeline, volume and pan.
Usage
play.instrument(
  inst,
  notes = 1:length(inst),
  time = seq(0, (length(notes) - 1) * 0.25, length.out = length(notes)),
  volume = rep(1, length(notes)),
  pan = rep(0, length(notes)),
  fadein = rep(0.01, length(notes)),
  fadeout = fadein,
  env = NULL,
  nmax = 10 * 10^6
)
Arguments
| inst | Instrument object. | 
| notes | String or integer vector, the notes of the instrument to be played, either by name or by index. | 
| time | Numeric vector, time (in seconds) at which each note should be played. Should be non-negative, non-decreasing and have same size as notes. | 
| volume | Numeric vector, volume between 0 and 1, | 
| pan | Numeric vector, pan between -1 (left) and 1 (right) (0 = centered). Same size as notes. | 
| fadein | Numeric vector, fade-in duration (in seconds), same size as notes. | 
| fadeout | Numeric vector, fade-out duration (in seconds), same size as notes. Use Inf for 'let ring'. | 
| env | list of envelope objects, envelope applied to each note. | 
| nmax | Integer, max number of values for each channel of the resulting Wave. Default value (10*10^6) roughly corresponds to a 150 Mb stereo wave, ~3 min 45s. | 
Value
an S4 Wave object (from package tuneR).
Examples
# Create an instrument
samples=list(oscillator(freq=110),oscillator(freq=220),oscillator(freq=261.63),
             oscillator(freq=293.66),oscillator(freq=392))
notes=c('A2','A3','C4','D4','G4')
onTheMoon <- instrument(samples,notes)
# Play it
w=play.instrument(onTheMoon)
# View the result
tuneR::plot(w)
## Not run: 
# This line of code is wrapped in \dontrun{} since it relies
# on an external audio player to play the audio sample.
# See ?tuneR::setWavPlayer for setting a default player.
tuneR::play(w)
## End(Not run)
# Use options
w=play.instrument(onTheMoon,time=c(0,0.2,0.4,0.6,0.8,0.9),
                  notes=c('A2','G4','D4','C4','A3','A2'),
                  volume=seq(0.2,1,length.out=6),pan=c(0,-1,1,-1,1,0),
                  fadeout=c(Inf,0.01,0.01,0.01,Inf,Inf))
# View the result
tuneR::plot(w)
## Not run: 
# This line of code is wrapped in \dontrun{} since it relies
# on an external audio player to play the audio sample.
# See ?tuneR::setWavPlayer for setting a default player.
tuneR::play(w)
## End(Not run)
Plot
Description
Plot an envelope.
Usage
## S3 method for class 'envelope'
plot(x, ...)
Arguments
| x | envelope object. | 
| ... | further arguments passed to the base plot function. | 
Value
nothing - plotting function.
Examples
# Define envelope
env <- envelope(t=c(0,0.1,0.3,0.8,1),v=c(0,1,0.4,0.4,0))
# plot it
plot(env)
Plot a sound sample
Description
Plot a sound sample. Uses plotly to add zooming capability.
Usage
## S3 method for class 'soundSample'
plot(x, ...)
Arguments
| x | sound sample object. | 
| ... | further arguments passed to tuneR plotting function. | 
Value
nothing - plotting function.
Examples
# Define sound sample
sam <- soundSample(sin(2*pi*seq(0,1,,44100)*440)+0.1*rnorm(44100)) # 1-second noisy A
# plot it
plot(sam)
Read a sound sample
Description
Read a sound sample from a .mp3 or .wav file.
Usage
read.soundSample(file, ...)
Arguments
| file | string, file with extension .wav or.mp3 | 
| ... | additional arguments passed to function tuneR::readWave | 
Value
An object of class 'soundSample'.
Examples
sam=try(read.soundSample(file='vignettes/07027201.mp3'))
Rescale function
Description
Rescale a series between two bounds
Usage
rescale(x, low = 0, high = 1)
Arguments
| x | Numeric vector | 
| low | Numeric, lower bound | 
| high | Numeric, higher bound | 
Value
a rescaled numeric vector
Examples
# example code
rescale(1:10)
rescale(rnorm(10), 100, 101)
Ride sample
Description
A ride cymbal sound sample object
Usage
ride
Format
An object of class soundSample of length 4.
Sequence a sound sample
Description
Take a sound sample and repeat it following given timeline, volume and pan.
Usage
sequence(
  sample,
  time,
  letRing = TRUE,
  volume = rep(1, NROW(time)),
  pan = rep(0, NROW(time)),
  nmax = 10 * 10^6
)
Arguments
| sample | Sound sample object. | 
| time | Numeric vector, time (in seconds) at which sample should be repeated | 
| letRing | Logical. If TRUE overlapping samples are added; if FALSE, a new sample stops the previous one (=> beware of the click!)) | 
| volume | Numeric vector, volume between 0 and 1. | 
| pan | Numeric vector, pan between -1 (left) and 1 (right) (0 = centered). | 
| nmax | Integer, max number of values for each channel of the resulting Wave. Default value (10*10^6) roughly corresponds to a 150 Mb stereo wave, ~3 min 45s. | 
Value
an S4 Wave object (from package tuneR).
Examples
# EXAMPLE 1
# Define a sound sample
sam <- soundSample(sin(2*pi*seq(0,1,,44100)*440)+0.1*rnorm(44100)) # 1-second noisy A
# Sequence it
s <- sequence(sam,time=c(0,0.5,0.75),letRing=FALSE,volume=c(0.4,1,1),pan=c(-1,0,1))
# View the result
tuneR::plot(s)
## Not run: 
# All calls to function 'tuneR::play' are wrapped in \dontrun{} since
# they rely on an external audio player to play the audio sample.
# See ?tuneR::setWavPlayer for setting a default player.
tuneR::play(s)
## End(Not run)
#' EXAMPLE 2 - make it funkyer
# 2-second sequence based on hi-hat sample
s <- sequence(hiHat,time=seq(0,2,,16),volume=rep(c(1,rep(0.5,3)),4))
# View the result
tuneR::plot(s)
## Not run: tuneR::play(s)
Pitch shifter
Description
Shift the pitch of a sound sample by n semitones. Note that the duration of the resulting sample is not the same as that of the original.
Usage
shiftPitch(sample, n)
Arguments
| sample | Sound sample object. | 
| n | numeric, number of semitones. | 
Value
A sound sample object.
Examples
# Define a A sound sample and get a D by adding 5 semitones
A <- soundSample(sin(2*pi*seq(0,0.5,1/44100)*220)) # 0.5-second A (220 Hz)
D <- shiftPitch(A,5)
Snare sample
Description
A snare sound sample object
Usage
snare
Format
An object of class soundSample of length 4.
Snare sample 2
Description
A snare sound sample object
Usage
snare2
Format
An object of class soundSample of length 4.
Source
http://www.archive.org/details/OpenPathMusic44V1
Climate stripes sonification
Description
Sonification of climate stripes data, or more generally, of a time series of values. A smoothed version of the time series is computed by moving average, then sonification proceeds as follows:
- Backtrack is a standard house-like tune, including a four-on-the-floor kick+hi-hat pattern on the drum, a bass following the drum kick, and 3 chords played by a synthesizer 
- The smoothed time series controls the master volume and the amount of 'distortion' in the synthesizer's sound 
- Large anomalies below / above the smoothed series trigger percussion sounds (by default a snare and a hand clap) that are panned full left (negative anomalies) and full right (positive anomalies) 
Usage
sonifyStripes(
  values = sequenceR::globalT$Anomaly,
  bpm = 135,
  minVol = 0.1,
  nma = 10,
  pClap = 0.15,
  synthVar = 0.5,
  kick = sequenceR::mini909$bass,
  hihat = sequenceR::mini909$hihat,
  openHihat = sequenceR::mini909$hihat_o,
  posPercussion = sequenceR::mini909$snare,
  negPercussion = sequenceR::mini909$clap,
  bassNote = "E1",
  chord1 = c("E2", "E3", "G3", "D4", "Gb4"),
  chord2 = c("E2", "D3", "Gb3", "A3", "E4"),
  chord3 = c("E2", "B2", "Gb3", "G3", "D4"),
  videoFile = NULL,
  videoResFactor = 1
)
Arguments
| values | Numeric vector, values to sonify. Default is global temperature anomalies over the period 1850-2021 | 
| bpm | Numeric > 0, tempo in beat per minute | 
| minVol | Numeric >= 0, minimum volume reached when smoothed series is minimum | 
| nma | Numeric >=0 , number of moving average steps on each side of the current value (i.e. moving average window is 2*nma+1 when possible, nma+1 on the series' edges) | 
| pClap | Numeric in (0,0.5). "Large" anomalies triggering claps/snare are defined as anomalies below (resp. above) the pClap (resp. (1-pClap))-quantile of anomalies. | 
| synthVar | Numeric >= 0 , controls the variability of the synthesizer sound. When zero, the synthesizer sound does not change. Large values induce more variability in the synthesizer sound. | 
| kick | soundSample, sound sample used to play the kick drum. | 
| hihat | soundSample, sound sample used to play the closed hi-hat. | 
| openHihat | soundSample, sound sample used to play the open hi-hat. | 
| posPercussion | soundSample, sound sample used to play the positive-anomaly percussion. | 
| negPercussion | soundSample, sound sample used to play the negative-anomaly percussion. | 
| bassNote | string, bass note (in scientific pitch notation). | 
| chord1 | string vector, first chord played by synthesizer. | 
| chord2 | string vector, second chord played by synthesizer. | 
| chord3 | string vector, third chord played by synthesizer. | 
| videoFile | file path, full path to video file. When NULL, video is not created. | 
| videoResFactor | Numeric > 0 , video resolution, 2 recommended for good-quality video. | 
Value
A list with the following components:
- mix, tuneR::Wave object, the final mix of the sonification. 
- dat, data frame with 4 columns: time step, raw value, smoothed value, anomaly 
- quantiles, numeric vector of size 2, the quantiles defining large negative/positive anomalies 
- waves, list of tuneR::Wave object, individual waves for each instrument in case you wish to mix them in your own way. 
Examples
w <- sonifyStripes()
Sound sample constructor.
Description
Creates a new instance of a 'soundSample' object. A sound sample can be viewed as a minimalistic version of an "audio wave" object (see package tuneR for instance). It is necessarily mono and the wave time series is normalized between -1 and 1.
Usage
soundSample(wave, rate = 44100)
Arguments
| wave | Numeric vector, wave time series | 
| rate | Numeric, sampling rate (default 44100 Hz) | 
Value
An object of class 'soundSample'.
Examples
sam <- soundSample(sin(2*pi*seq(0,1,,44100)*440)) # 1-second A (440 Hz)
sam <- soundSample(sin(2*pi*seq(0,1,,44100)*440)+0.1*rnorm(44100)) # 1-second noisy A
timeVector function
Description
Compute the time vector starting from 0 associated with a duration and a sampling rate
Usage
timeVector(duration = 1, rate = 44100)
Arguments
| duration | Numeric | 
| rate | Numeric | 
Value
a numeric vector
Write an instrument to file
Description
Write each sound sample of the instrument as a separate .wav or .mp3 file.
Usage
write.instrument(inst, dir = tempdir(), fmt = "wav")
Arguments
| inst | Instrument object. | 
| dir | String, directory where files should be written. | 
| fmt | String, 'wav' or 'mp3'. | 
Value
nothing - writing function.
Examples
# Create an instrument
drumset <- instrument(samples=list(kick,snare,hiHat),notes=c('boom','tat','cheet'))
# Write to files (one per element)
write.instrument(drumset)
Write a sound sample
Description
Write a sound sample in .wav or .mp3 format.
Usage
write.soundSample(x, file)
Arguments
| x | sound sample object. | 
| file | string, destination file. Default file format is .wav. If file extension is .mp3, conversion to mp3 is attempted using ffmpeg, which hence needs to be available (see https://ffmpeg.org/). | 
Value
nothing - writing function.
Examples
sam <- soundSample(sin(2*pi*seq(0,1,,44100)*440)) # 1-second A (440 Hz)
write.soundSample(sam,file=tempfile())