검색어 입력폼
평가점수A

[전기]matlab 매트랩을 이용한 audio 파일의 합성 실험레포트

저작시기 2006.04 |등록일 2006.08.25 워드파일MS 워드 (doc) | 16페이지 | 가격 900원

소개글

이 레포트는 실험 도중 작성한 inlab 레포트 입니다.

매트랩을 이용하여 2개의 오디오 파일을 합성하는 실험입니다.

단순한 합성 뿐 아니라 fade-in , fade-out 과 같은 것을 자신이 직접 소스를 짜서 구현하는 실험을 하였고,
배경음악과 음성의 합성에서도 fadein fadeout 을 적절히 사용하여 깔끔하게 만드는 실험을 하였습니다.

실험과정중 사용된 모든 matlab 소스와 결과그래프, 분석이
모두 포함되어 있습니다.

목차

1.다음의 실험은 제공되는 a) 표준 wave file과 b) 자신이 준비한 wave file 에 대해 각각 행하시오. Sound를 합할 때, overflow가 발생하지 않도록 하는 방법을 서술하고 그 방법대로 하시오
2.Voice와 Music을 합한 Wave file을 생성하시오.
3.① Fade-In, Fade-out
Voice의 level은 10 sec 간 계속 일정하게, Music의 level은 처음 5 sec 간은 0부터 원래의 값까지 선형적으로 증가하고, 나중의 5 sec 간은 원래의 값부터 0까지 선형적으로 감소하도록 하는, 간단한 형태의 Fade-in, Fade-out을 구현하고 그 결과를 wave file로 만드시오
4.Voice의 activity를 측정하여, voice의 level이 작을 때에는 background music 위주로, voice의 level이 어느 이상인 부분에서는 music은 거의 없이 voice 위주로 들리도록 합성하는 방법을 고안하시오. Threshold level의 값과 voice segment의 길이를 여러 경우로 바꾸어가면서 실험하고 그 중에서 제일 좋은 결과를 wave file로 만드시오

본문내용

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

이때, overflow가 발생할 시 그것을 막는 코드를 첨가하였다.
% 오버플로우 방지하는 부분 - 데이터의 최대값이 1이 넘을 경우 1로 down시킴.
for i=1:1:320000
if sum(i,1) >1
sum(i,1)=1;
end
end
Background music 위주로 voice를 합성하라는 요구에 맞추기 위해 음악 파일의 특정 부분을 잘라서 voice가 없는 부분에 삽입하는 게 아닌, 음악 파일의 voice가 대응하는 부분을 fade-in, fade-out으로 삭제하는 방식을 채택하였다.
세그먼트를 나누어 voice를 식별하기 때문에 fade-in, fade-out을 일반적인 방식으로 진행하게 되면, 국소 부분에 대해서만 적용이 된다. 이 문제를 해결하기 위해 flag라는 상태 변수와 findedPoint라는 위치 지정 변수를 설정하여, voice가 식별되는 순간 flag=1, 즉, voice가 식별 된 상태를 알리고, findedPoint = [the Segment’s stating position], 즉 그 voice의 시작 지점을 저장한다.
그리고 다시 voice의 식별이 되지 않는 지점에 이르게 되면, 즉, flag = 1 and there is not voice, 이전까지의 세그먼트의 합에 대해, 즉 특정 범위에 대해, 문제에서 요구한 fade방식의 배타적 변환을 실행하였다. 여기서 배타적 변환이란, voice의 경우 fade-in으로 높였다가 그
다운로드 맨위로