Existem vários aplicativos que podem gerar diversos efeitos na sua voz. |
Em alguns filmes ouvimos um tipo de sintetizador de voz que causa uma grande distorção na voz na pessoa que está falando de tal forma que a voz dela fica irreconhecível. Existem inclusive aplicativos que podem transformar a voz complemente e convertem a sua voz na de uma voz de monstro, robô de filme e até animal (ver aqui).
Neste breve código Scilab realizamos duas transformações: tornamos uma voz "original" mais grave e, em seguida, em mais aguda. O efeito é bem interessante e código bem simples. Para a voz se tornar mais aguda é só retirar algumas amostras do sinal original. Já para voz se tornar mais grave, basta inserir amostras (calculadas como sendo a média de duas amostras adjacentes). A figura abaixo ilustra esses procedimentos.
- sound(y,Fs*0.80,bits); ===> o som fica mais grave.
- sound(y,Fs*1.25,bits); ===> o som fica mais agudo.
Código:
////////////////////////////////
// Prof. Dr. Francisco Aquino //
// Lendo e modificando um //
// arquivo de voz ".wav" //
///////////////////////////////
clc;
xdel(winsid());
//// Voz original:
vz = 'bomdia8.wav'; ///
[y,Fs,bits]=wavread(vz);
ty = max(size(y));
y = y(5000:(ty-5000));
y = y/max(abs(y));
ty = max(size(y));
//// Convertendo em uma voz mais grave:
ym = 1:round(1.25*ty);
ym = 0*ym;
p = 1;
c = 0;
for k=1:ty-1;
ym(p) = y(k);
p = p + 1;
c = c + 1;
if c>3 then
yy = (y(k) + y(k+1))/2;
ym(p) = yy;
c = 0;
p = p + 1;
end;
end
h = [0.1 0.25 0.5 0.5 0.25 0.1]; h=h/sum(h);
ymf = filter(h,1,ym);
tempo = 1:max(size(ymf));
tempo = tempo - 1; tempo = tempo/Fs;
sound(ymf,Fs,bits);
/// Convertendo em uma voz mais aguda:
ya = 0*y;
p=1;
pula = 0;
for k=1:round(ty*0.75)
ya(k)=y(p);
p=p+1;
pula = pula + 1;
if pula > 3 then pula = 0; p = p + 1; end;
end
ya = ya(1:k);
yaf = filter(h,1,ya);
pause; sound(yaf,Fs,bits);
f1 = 1:max(size(y));
f1 = f1-1; f1=f1/max(f1); f1=f1*Fs;
f2 = 1:max(size(ymf));
f2 = f2-1; f2=f2/max(f2); f2=f2*Fs;
f3 = 1:max(size(yaf));
f3 = f3-1; f3=f3/max(f3); f3=f3*Fs;
ffim1 = round(max(size(f1))/6);
ffim2 = round(max(size(f2))/6);
ffim3 = round(max(size(f3))/6);
yff = abs(fft(y));
ymff = abs(fft(ymf));
yaff = abs(fft(yaf));
subplot(3,2,1); plot(y); title('Voz original');
subplot(3,2,2); plot(f1(1:ffim1),yff(1:ffim1));
subplot(3,2,3); plot(ymf); title('Voz mais grave');
subplot(3,2,4); plot(f2(1:ffim2),ymff(1:ffim2));
subplot(3,2,5); plot(yaf); title('Voz mais aguda');
subplot(3,2,6); plot(f3(1:ffim3),yaff(1:ffim3));
Resultados gráficos:
Sinais de voz no tempo e no espectro. As diferenças são melhor percebidas quando ouvimos o sinal. |
Nenhum comentário:
Postar um comentário