0% found this document useful (0 votes)
11 views

Sound in Matlab & Cogent: Tobias Overath

This document discusses how to work with sound in Matlab and Cogent, including how to: 1) Play sound files by loading wav files and calling sound() or configuring sound in Cogent and loading/playing buffers. 2) Create sounds by generating sine waves of different frequencies and amplitudes alone or combined to play consecutively or together. 3) Modify sounds by making them louder or quieter, generating noise, frequency-modulated sweeps, and amplitude-modulated or square waves.
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views

Sound in Matlab & Cogent: Tobias Overath

This document discusses how to work with sound in Matlab and Cogent, including how to: 1) Play sound files by loading wav files and calling sound() or configuring sound in Cogent and loading/playing buffers. 2) Create sounds by generating sine waves of different frequencies and amplitudes alone or combined to play consecutively or together. 3) Modify sounds by making them louder or quieter, generating noise, frequency-modulated sweeps, and amplitude-modulated or square waves.
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 14

Sound in Matlab & Cogent

Tobias Overath

Sound
sound = pressure wave

y (t ) A sin( 2 f t )

Overview
play sound in Matlab/Cogent
create a sound
things you can do with sound:
louder/quieter
higher/lower
combine sounds

compose & play a melody

Playing a sound in Matlab


load wavfile
y = wavread(filename.wav);

play wavfile
sound(y,Fs)
if unsure which Fs
[y, Fs, nbits, opts] = wavread(filename.wav)

write to disk
wavwrite(y,Fs,filename.wav)

Playing a sound in Cogent


config_sound(nchannels,nbits,Fs,nbuffs)

nchannels: 1 = mono, 2 = stereo


nbits: e.g. 16
Fs: sampling frequency (e.g. 44100)
nbuffs: number of buffers

wavfilename = [filename.wav];
loadsound(wavfilename, buffer number)
playsound(buffer number)
waitsound(buffer number)
otherwise next command will be executed
immediately)

creating a sound in Matlab

Fs = 44100;
t = [0:1/Fs:1-1/Fs]; %1 second, length 44100
freq = 400; % Hz
f1 = sin(2*pi*freq*t);
sound(f1,Fs)

f2 = sin(2*pi*(2*freq)*t);
sound(f2,Fs)

period: 1/freq (*Fs)


figure(1);plot(f1)
figure(2);plot(f1(1:round(1/freq*Fs+1)))

play consecutively
f12 = [f1 f2];
sound(f12,Fs)

play together/superimposed:
f_12 = [f1+f2];
or:
f_12 = sum([f1;f2]);

sound(f_12,Fs);

making a sound louder/quieter


f = sin(2*pi*freq*t)
standardise sound
f = f-mean(f);
f = f/std(f);

scale sound
amplitude = .2;
f = amplitude * f;

10^0.5 for every 10dB


e.g. 10^1.0 20 dB louder
e.g. 10^-1.5 30 dB quieter
do not be put off by warning data clipped message. Wavwrite
needs an input vector in the range 1 to +1, else it will clip. The
warning means that you have sounds that are 1 or 1 but the
clipping will leave them unaltered

create noise
y = .2*randn(1,Fs);
sound(y,Fs)

FM sweep
f = chirp(t1,f1,t2,f2);
t1 = vector t = [0:1/Fs:1-1/fs];
f1 = initial frequency
f2 = final frequency
t2 = time at which f2 is reached

f = chirp(t,freq,1,2*freq);
sound(f,Fs)

AM sound

freq = 400; % carrier frequency


fm = 10;
% modulation frequency
f_c = sin(2*pi*freq*t);
f_m = sin(2*pi*fm*t);
f_mod = [f_c .* f_m];
sound(f_mod,Fs)

square wave
x = square(t,duty cycle)
duty cycle = % of signal thats positive

freq = 10;
fsq = square(2*pi*freq*t);
fsq = square(2*pi*freq*t, 80);

plot signal
plot(t,f)

scale
12-split equitempered octave
f(n) = sin(2*pi*freq*2^(n/12)*t)
for example
n=[0:12]; % 12 semitones
for i=1:length(n)
f(i,:) = sin(2*pi*freq*2^(n(i)/12)*t);
end
fs=[];
for i=1:13
fs = [fs f(i,:)];
end
fs=fs-mean(fs);
fs=fs/std(fs);
fs=.2*fs;
sound(fs,Fs)

You might also like