Learn R Programming

seewave (version 1.4.3)

synth: Synthesis of time wave

Description

This functions synthesize pure tone sound with amplitude modulation (am) and/or frequency modulation (fm).

Usage

synth(f, d, cf, a = 1, p = 0, am = c(0, 0), fm = c(0, 0, 0),
plot = FALSE, wl = 512, ovlp = 50, play = FALSE,...)

Arguments

f
sampling frequency (in Hz).
d
duration (in s).
cf
carrier frequency (in Hz).
a
amplitude (linear scale, relative when adding different waves).
p
phase (in radians).
am
a vector of length 2 describing amplitude modulation parameters, see details.
fm
a vector of length 3 describing frequency modulation parameters, see details.
plot
if TRUE returns the spectrogram of the synthezised sound (by default FALSE).
wl
if plot is TRUE, length of the window for the spectrographic analysis (even number of points).
ovlp
if plot is TRUE, overlap between two successive windows of the spectrographic analysis (in %).
play
if TRUE the new sound is played back using play from the package Sound (by default FALSE).
...
other spectro graphical parameters.

Value

  • If plot is FALSE, synth returns a one-column matrix describing the sound synthesized.

Details

am is a vector of length 2 including: (1) the amplitude modulation depth (in %), (2) the frequency of the amplitude modulation. fm is a vector of length 3 including: (1) the maximum excursion of a sinusoidal frequency modulation (in Hz), (2) the frequency of a sinusoidal frequency modulation, (3) the maximum excursion of a linear frequency modulation (in Hz).

References

Hartmann, W. M. 1998 Signals, sound and sensation. New York: Springer.

See Also

noise, pulse

Examples

Run this code
# pure tone
synth(f=22050,d=1,cf=4000,plot=TRUE)
# pure tones with am
synth(f=22050,d=1,cf=4000,am=c(50,10),plot=TRUE,osc=TRUE)
# pure tone with +2000 Hz linear fm 
synth(f=22050,d=1,cf=4000,fm=c(0,0,2000),plot=TRUE)
# pure tone with sinusoidal fm
# (maximum excursion of 1000 Hz, frequency of 10 Hz)
synth(f=22050,d=1,cf=4000,fm=c(1000,10,0),plot=TRUE,wl=256,ovlp=75)
# pure tone with sinusoidal am
# (maximum excursion of 1000 Hz, frequency of 10 Hz)
# and linear fm (maximum excurion of 1000 Hz
synth(f=22050,d=1,cf=4000,fm=c(1000,10,1000),plot=TRUE,wl=256,ovlp=75)
# the same with am
synth(f=22050,d=1,cf=4000,am=c(50,10),
    fm=c(1000,10,1000),plot=TRUE,wl=256,ovlp=75,osc=TRUE)
# more complex sound
F1<-synth(f=22050,cf=2000,d=1,fm=c(500,5,0),plot=FALSE)
F2<-synth(f=22050,a=0.8,cf=4000,d=1,fm=c(500,5,0))
F3<-synth(f=22050,a=0.6,cf=6000,d=1,fm=c(500,5,0))
F4<-synth(f=22050,a=0.4,cf=8000,d=1,fm=c(500,5,0))
final1<-F1+F2+F3+F4
spectro(final1,f=22050,wl=512,ovlp=75,scale=FALSE)
# insert 0.25 s silence
final1.1<-as.matrix(final1[1:(nrow(final1)/2),])
final1.2<-as.matrix(rep(0,0.25*22050))
final1.3<-as.matrix(final1[(nrow(final1)/2):nrow(final1),])
final2<-rbind(final1.1,final1.2,final1.3)
spectro(final2,f=22050,plot=TRUE,wl=512,ovlp=75,scale=FALSE)

Run the code above in your browser using DataLab