오디오 녹음하기와 재생하기
오디오 데이터를 MATLAB®에서 처리할 수 있도록 사용자 시스템의 오디오 입력 장치와 출력 장치에서 오디오 데이터를 녹음하고 재생합니다. MATLAB Online™ 및 MATLAB Web App Server™에서의 오디오 재생 및 녹음은 Google Chrome®에서 지원됩니다.
오디오 녹음하기
시스템에 연결된 마이크와 같은 오디오 입력 장치에서 데이터를 녹음합니다.
audiorecorder
객체를 생성합니다.record
메서드나recordblocking
메서드를 호출합니다. 여기서,record
는 녹음이 진행 중이더라도 호출하는 함수나 명령 프롬프트로 즉시 컨트롤을 반환합니다. 녹음 길이(초)를 지정할 수 있으며,stop
메서드로 녹음을 종료할 수도 있습니다. 선택적으로,pause
메서드와resume
메서드도 호출할 수 있습니다. 녹음이 비동기식으로 수행됩니다.recordblocking
은 녹음이 완료될 때까지 컨트롤을 유지합니다. 녹음 길이(초)를 지정할 수 있습니다. 녹음이 동기식으로 수행됩니다.
getaudiodata
메서드를 사용하여 신호 데이터에 대응하는 숫자형 배열을 만듭니다.
다음 예제에서는 recordblocking
메서드와 record
메서드를 사용하는 방법을 보여줍니다.
마이크 입력 녹음하기
이 예제에서는 마이크 입력을 녹음하고, 녹음을 재생하고, 녹음된 오디오 신호를 숫자형 배열에 저장하는 방법을 보여줍니다. 먼저 마이크를 시스템에 연결해야 합니다.
오디오 입력 녹음을 위해 디폴트 속성을 가진 recObj
라는 audiorecorder
객체를 만듭니다.
recObj = audiorecorder
recObj = audiorecorder with properties: SampleRate: 8000 BitsPerSample: 8 NumChannels: 1 DeviceID: -1 CurrentSample: 1 TotalSamples: 0 Running: 'off' StartFcn: [] StopFcn: [] TimerFcn: [] TimerPeriod: 0.0500 Tag: '' UserData: [] Type: 'audiorecorder'
audiorecorder
는 8000Hz, 8비트, 1채널 audiorecorder
객체를 생성합니다.
자신의 음성을 5초간 녹음합니다.
recDuration = 5; disp("Begin speaking.") recordblocking(recObj,recDuration); disp("End of recording.")
녹음을 재생합니다.
play(recObj);
배정밀도 배열 y
에 데이터를 저장합니다.
y = getaudiodata(recObj);
오디오 샘플을 플로팅합니다.
plot(y);
서로 다른 사운드 카드에서 두 개의 채널 녹음하기
두 개의 다른 사운드 카드에서 오디오를 독립적으로 녹음하려면 각 사운드 카드에 마이크를 연결한 상태에서 다음 절차를 수행하십시오.
audiodevinfo
를 호출하여 사용 가능한 사운드 카드를 나열합니다. 예를 들어, 다음 코드는 시스템에 있는 모든 입/출력 오디오 장치를 포함하는 구조체형 배열을 반환합니다.사용하려는 사운드 카드를 이름으로 식별하고 해당info = audiodevinfo;
ID
값을 기록해 둡니다.두 개의
audiorecorder
객체를 만듭니다. 예를 들어, 다음 코드는 샘플당 44.1kHz와 16비트로 장치 3의 단일 채널을 녹음하기 위해audiorecorder
객체recorder1
을 만듭니다. 그런 다음 코드는 48kHz로 장치 4의 단일 채널을 녹음하기 위해audiorecorder
객체recorder2
를 만듭니다.recorder1 = audiorecorder(44100,16,1,3); recorder2 = audiorecorder(48000,16,1,4);
각각의 오디오 채널을 따로 녹음합니다.
record(recorder1); record(recorder2); pause(5);
record
에 대한 첫 번째 호출이 다른 호출을 차단하지 않으므로 동시 녹음이 수행됩니다.녹음을 중지합니다.
stop(recorder1); stop(recorder2);
녹음 품질 지정하기
기본적으로, audiorecorder
객체는 8000Hz의 샘플 레이트, 8비트의 심도(샘플당 8비트), 단일 오디오 채널을 사용합니다. 이러한 설정을 사용할 경우, 필요한 데이터 저장공간은 크지 않습니다. 녹음 품질을 높이려면 샘플 레이트나 비트 심도(Bit Depth)를 증가시키십시오.
예를 들어, 콤팩트 디스크에는 44,100Hz의 샘플 레이트와 16비트의 심도 및 2개의 오디오 채널이 사용됩니다. audiorecorder
객체를 만들고 위의 설정을 사용하여 녹음합니다.
myRecObj = audiorecorder(44100,16,2);
사용 가능한 속성과 값에 대한 자세한 내용은 audiorecorder
함수 도움말 페이지를 참조하십시오.
오디오 재생하기
오디오를 가져오거나 녹음하고 나면 MATLAB은 다음과 같이 데이터를 청취할 수 있는 여러 가지 방법을 지원합니다.
단일 함수 호출을 사용하는 단순한 재생에는
sound
나soundsc
를 사용합니다. 예를 들어, 신호 데이터와 샘플 레이트 데이터가 포함된 샘플 MAT 파일을 불러오고 오디오를 듣습니다.load chirp.mat sound(y,Fs)
일시 중지, 재개, 콜백 정의를 비롯하여, 재생 중에 더욱 유연성을 발휘하려면
audioplayer
함수를 사용합니다.audioplayer
객체를 만든 다음, 오디오를 재생하는 메서드를 호출합니다. 예를 들어, 다음과 같이gong
샘플 파일을 청취합니다.load gong.mat gong = audioplayer(y,Fs); play(gong);
추가 예제는 함수 내에서 오디오를 녹음하거나 재생하기 항목을 참조하십시오.
샘플 레이트를 지정하지 않으면 sound
는 8192Hz로 재생합니다. 어떤 재생에서든, 샘플 레이트를 작게 지정할수록 더 느리게 재생되고, 샘플 레이트를 크게 지정할수록 더 빠르게 재생됩니다.
참고
대부분의 사운드 카드는 약 5000Hz~192,000Hz 사이의 샘플 레이트를 지원합니다. 이 범위를 벗어난 샘플 레이트를 지정하면 예기치 않은 결과가 발생할 수 있습니다.
함수 내에서 오디오를 녹음하거나 재생하기
함수 내에 audioplayer
객체나 audiorecorder
객체를 만드는 경우, 그 객체는 함수의 지속 시간 동안만 존재합니다. 예를 들어, 다음과 같이 playFile
이라는 플레이어 함수와 간단한 콜백 함수 showSeconds
를 만듭니다.
function playFile(myfile) load(myfile) obj = audioplayer(y,Fs); obj.TimerFcn = 'showSeconds'; obj.TimerPeriod = 1; play(obj); end function showSeconds disp("tick") end
명령 프롬프트에서 playFile
을 호출하여 handel.mat
파일을 재생합니다.
playFile("handel.mat")
초당 8192개 샘플의 녹음 샘플 레이트에서는 파일에 있는 73,113개의 샘플을 재생하는 데 약 8.9초가 걸립니다. 그러나 playFile
함수는 대개 재생이 완료되기 전에 끝나고 audioplayer
객체 obj
를 지웁니다.
완전한 재생이나 녹음을 보장하려면 다음 옵션을 고려하십시오.
play
또는record
대신playblocking
또는recordblocking
을 사용합니다. blocking 메서드는 재생이나 녹음이 완료될 때까지 컨트롤을 유지합니다. 컨트롤을 차단(Blocking)하면 재생이나 녹음 중에 다른 명령이나 메서드(예:pause
또는resume
)를 실행할 수 없습니다.함수에 출력 인수를 지정하여, 기본 작업 공간에 객체가 생성되도록 합니다. 예를 들어, 출력 인수를 포함하도록
playFile
함수를 수정합니다.function obj = playFile(myfile)
함수를 호출합니다.
h = playFile("handel.mat");
h
가 기본 작업 공간에 존재하므로, 명령 프롬프트에서 재생을 일시 중지할 수 있습니다.pause(h)
참고 항목
audioplayer
| sound
| soundsc
| audiorecorder