검색어 입력폼
평가점수A

매트랩(matlab)을 이용한 wave(audio) 파일의 합성과 분석 실험 [최종결과)

저작시기 2006.08 |등록일 2006.09.14 워드파일MS 워드 (doc) | 16페이지 | 가격 1,300원

소개글

이 실험 레포트는 매트랩을 이용해서 오디오 파일을 합성하는 실험의
최종 결과 레포트 입니다.
오디오 파일을 직접 녹음해서 이 파일을 배경음악과 합성하거나
fade in, fade out을 구현하여 적절하게 합성하는 실험입니다.
fade in, fade out 이 전체에 거쳐서 적용되는 것이 아닌 사람이 말을 안할때만
배경음악이 fade in, fade out을 통해서 나타나는 다소 어려운 코딩이 들어있습니다.
모든 실험의 매트랩 코딩, 매트랩 결과 그래프, 결과 분석이 포함되어 있습니다.

목차

다음의 실험은 제공되는 a) 표준 wave file과 b) 자신이 준비한 wave file 에 대해 각각 행하시오. Sound를 합할 때, overflow가 발생하지 않도록 하는 방법을 서술하고 그 방법대로 하시오

Voice와 Music을 합한 Wave file을 생성하시오.

① Fade-In, Fade-out
Voice의 level은 10 sec 간 계속 일정하게, Music의 level은 처음 5 sec 간은 0부터 원래의 값까지 선형적으로 증가하고, 나중의 5 sec 간은 원래의 값부터 0까지 선형적으로 감소하도록 하는, 간단한 형태의 Fade-in, Fade-out을 구현하고 그 결과를 wave file로 만드시오.

② Voice 위주의 합성
Voice의 activity를 측정하여, voice의 level이 작을 때에는 background music 위주로, voice의 level이 어느 이상인 부분에서는 music은 거의 없이 voice 위주로 들리도록 합성하는 방법을 고안하시오. Threshold level의 값과 voice segment의 길이를 여러 경우로 바꾸어가면서 실험하고 그 중에서 제일 좋은 결과를 wave file로 만드시오.

본문내용

overflow가 발생하지 않도록 하는 방법
wavread로 읽은 사운드 데이터는 최대값이 1이다. 따라서 합한 값이 1이 넘으면 overflow가 발생할 것이다. 이 때 overflow가 발생하지 않도록 하기 위해서 합한 값이 1이 넘을 때 1로 다시 할당해 주는 방법을 통해 overflow를 방지 할 수 있다.
위에서 서술한 방법에 따라, 만약 합한 값이 2에 근접하는데(본래의 데이터가 0.9일 수도 있다) 1로 임의 할당하게 되면, 데이터의 훼손으로 볼 수도 있다.
그 데이터의 훼손을 막기 위해 전체 데이터를 최대 값이 1보다 클 경우 최대값으로 나눠 주는 방법으로 overflow를 방지 할 수도 있다. 혹은 일반적으로 스트레오를 모노화 시키는 방법인 데이터의 합을 데이터의 개수로 나눠주는 방식을 택할 수도 있다.
그러나 우리는 첫 번째 방법이 더 낫다고 판단했는데, 그 이유는 최대치를 한정해 주는 방식이 양자화 에러를 필연적으로 유발하고, 일반적인 소리의 경우 1에 비해 무척 낮은 정도의 수치를 보이기 때문이다.

Matlab Code
[music, SampleFrequency, bits] = wavread(`music_hyunbin.wav`);

dt = 1/SampleFrequency;
t = (0:length(music)-1) * dt;
ChangeFrequency=32000;
dt2=1/ChangeFrequency;
t2=(0:length(music)-1) * dt2;
music=resample(music,1/dt2,1/dt);

[voice, SampleFrequency, bits] = wavread(`hyunbin.wav`);

dt = 1/SampleFrequency;
t = (0:length(voice)-1) * dt;

sum=music+voice;

for i=1:1:320000
if sum(i,1) >1
sum(i,1)=1;
end
end
subplot(2,2,1);plot(t,voice);
subplot(2,2,2);plot(t,music);
subplot(2,2,3);plot(t,sum);
wavwrite(sum,SampleFrequency,`sum_hyunbin.wav`);
다운로드 맨위로