Как звук выглядит на компьютере.

Пусть есть буфер со значениями. На динамик подается напряжение значением из буфера с определенной частотой (частота дискретизации). Таким образом в буфер записываются значения синуса с частотой, которую надо воспроизвести, но учитывая частоту дискретизации.

В Матлабе звук воспроизводит функция sound с параметрами:

  1. буфер значений (если матрица из 2-х строк, то будет стерео звук)
  2. частота дискретизации
  3. качество (число бит, по умолчанию – 16).

Напишем несколько функций для работы со звуком.

 

Snd.m

function snd(sndbuf)

%функция проигрывает буффер по 44100 импульсов в сек

%sndbuf - звуковой буффер (строка)

if max(abs(sndbuf))>1

sndbuf=sndbuf/max(abs(sndbuf))/1.1;

end

sound([sndbuf;sndbuf]',44100,16);

 

Если не уменьшать амплитуду до 1 или меньше, то происходит урезание синусоиды, что приводит к резкому дистоншу (звук импульса).

 

Createbuf.m

function buf=createbuf(freq,time,garm,fun)

%создание буфера используя гармоники и функцию затухания

%freq - частота звука

%time - время звучания в секундах

%garm - набор амплитуд гармоник

%fun - функция затухания

t=0:1/44100:time;

w=2*pi*freq;

buf=0;

for i=1:length(garm)

buf=buf+garm(i)*sin(i*w*t);

end

buf=buf.*fun(t);

 

T.m

function t=T(varargin)

%оперделение периода, может быть не один параметр

%varargin - обратная величина к периоду

if length(varargin)>2

f2=1/T(varargin{2:length(varargin)});

t=lcm(varargin{1},f2)/(varargin{1}*f2);

elseif length(varargin)==2

t=lcm(varargin{1},varargin{2})/(varargin{1}*varargin{2});

else

error('T: too few arguments');

end