
printf("\nEXEMPLOS DE TRANSIÇÃO ENTRE SONS: f=440Hz (senoidal) e ruido branco\n");
fflush(stdout);

% Frequencia
f = 440;

% Duracao
d = 20;

% Taxa de Amostragem
R = 44100;

printf("\nUtilizando crossfading\n");
fflush(stdout);

% cria um sinal senoidal
q = sinetone(f,R,d,100);

% cria um ruido branco (sinal aleatorio com distribuicao uniforme)
r = 200*rand(R*d,1)-100;

% o crossfade consiste em tomar médias ponderadas (combinação
% convexa) dos dois sinais, fazendo o peso da ponderação passar 
% linearmente de um extremo ao outro.
c = q;
for i=1:R*d
  c(i) = (1-i/(R*d))*q(i)+(i/(R*d))*r(i);
end;

gplot [1:d*(R/f)] [-100:100] c;
saveaudio("cap1_trans_crossfade_44100",c,"raw");
play("cap1_trans_crossfade_44100.raw",R);

printf("\nDeteriorando o sinal senoidal com amostras aleatorias\n");
printf("cada vez mais frequentes\n");
fflush(stdout);

% cria um sinal senoidal
q = sinetone(f,R,d,100);

% a probabilidade de introduzir uma amostra aleatória é proporcional
% à distância da origem do sinal.
for i=1:R*d
  if (rand<i/(R*d)-0.1)
    q(i) = 200*rand-100;
  end;
end;

gplot [1:d*(R/f)] [-100:100] c;
saveaudio("cap1_trans_random_44100",c,"raw");
play("cap1_trans_random_44100.raw",R);

printf("\nSomando senoides com frequencias cada vez mais distantes\n");
printf("da frequencia original (paciência, demora alguns minutos).\n\n");
fflush(stdout);

% cria um sinal senoidal
q = sinetone(f,R,d,100);

% a partir do sinal anterior, acrescenta 200 outras senoides, a
% intervalos regulares (microtonais) associados à proporção 1.039
c=q;
for j=1:100
  g = f*(1.039^j); % j intervalos acima da freqüência original
  h=sinetone(g,R,d,100);
  % o ponto de entrada da freqüência nova é proporcianal à sua distância
  % em relação a freqüência original
  c(j*(d/2)*(R/100):R*d)=c(j*(d/2)*(R/100):R*d)+h(1:(R/100)*(d/2)*(200-j)+1);
  g = f/(1.0391^j); % j intervalos abaixo da frequencia original
  h=sinetone(g,R,d,100);
  c(j*(d/2)*(R/100):R*d)=c(j*(d/2)*(R/100):R*d)+h(1:(R/100)*(d/2)*(200-j)+1);
end;

% faz um crossfade do sinal original com o recém-criado
for i=1:R*d
  c(i) = (1-i/(R*d))*30*q(i)+(i/(R*d))*c(i);
end;

% normaliza o volume final
c=c*(100/max(c));

gplot [1:d*(R/f)] [-100:100] c;
saveaudio("cap1_trans_banda_44100",c,"raw");
play("cap1_trans_banda_44100.raw",R);

