주요 콘텐츠

스트리밍 오디오를 처리하고 분석하기

이 예제에서는 오디오 테스트 벤치를 만들고 실시간 처리를 적용하는 방법을 보여줍니다.

오디오 테스트 벤치 열기

Audio Test Bench 앱을 사용하면 오디오 입력 및 출력과 오디오 처리를 시각적으로 설정하고 자주 사용하는 분석 툴(예: timescopespectrumAnalyzer)을 열 수 있습니다. 파일에서 읽어오고 스피커에 쓰려면 을 클릭하십시오.

audioTestBench

시간 영역과 주파수 영역에서 오디오 신호 보기

시간 영역과 주파수 영역에서 오디오 신호를 분석하려면 을 클릭하십시오.

동적 범위 압축 적용하기

오디오에 동적 범위 압축을 적용하려면 먼저 을 클릭하여 오디오 I/O를 중지한 다음 테스트 대상 객체 추가 편집 상자에 compressor를 입력하십시오. compressor 객체의 조정 가능형 속성이 노출됩니다. 테스트 벤치가 실행되는 동안 이러한 속성을 조정할 수 있습니다.

테스트 벤치 스크립트 생성하기

테스트 벤치 스크립트를 생성하려면 먼저 을 클릭하여 오디오 I/O를 중지한 다음 을 클릭하십시오. 오디오 테스트 벤치는 새 untitled 스크립트에 코드를 생성합니다. 아래에는 이 예제의 테스트 벤치에서 생성된 코드가 표시되어 있습니다.

% Test bench script for 'compressor'.
% Generated by Audio Test Bench on 06-Jul-2022 11:47:07 UTC-04:00.

% Create test bench input and output
fileReader = dsp.AudioFileReader('Filename','RockGuitar-16-44p1-stereo-72secs.wav');
deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);

% Create scopes
timeScope = timescope(SampleRate=fileReader.SampleRate, ...
    TimeSpanSource="property", ...
    TimeSpan=1, ...
    AxesScaling="manual", ...
    BufferLength=176400, ...
    ChannelNames=["Input channel 1","Input channel 2","Output channel 1","Output channel 2"], ...
    Position=[538 508 800 500], ...
    YLimits=[-1 1], ...
    ShowLegend=true);

specScope = spectrumAnalyzer(SampleRate=fileReader.SampleRate, ...
    PlotAsTwoSidedSpectrum=false, ...
    FrequencyScale="log", ...
    AxesScaling="manual", ...
    AveragingMethod="exponential", ...
    ForgettingFactor=0.8, ...
    YLimits=[-132.83298112 25.39711835], ...
    ChannelNames=["Input channel 1","Input channel 2","Output channel 1","Output channel 2"], ...
    ShowLegend=true);


% Set up the system under test
sut = compressor;
sut.SampleRate = fileReader.SampleRate;

% Uncomment to open visualizer:
% visualize(sut);

% Open parameterTuner for interactive tuning during simulation
tuner = parameterTuner(sut);
drawnow

% Stream processing loop
nUnderruns = 0;
while ~isDone(fileReader)
    % Read from input, process, and write to output
    in = fileReader();
    out = sut(in);
    nUnderruns = nUnderruns + deviceWriter(out);
    
    % Visualize input and output data in scopes
    timeScope(in,out);
    specScope(in,out);
    
    % Process parameterTuner callbacks
    drawnow limitrate
end

% Clean up
release(sut)
release(fileReader)
release(deviceWriter)
release(timeScope)
release(specScope)

처리 단계, 스코프 및 분석 툴을 스크립트에 추가할 수 있습니다. 생성된 스크립트를 실행하면 parameterTuner가 열리고 스트림 처리 중에 파라미터를 조정할 수 있습니다.

참고 항목

| | | | | |

도움말 항목