MATLAB에서 IR (Impulse Response) Speaker Simulator VST Plugin 3
이전 기사
MATLAB에서 IR (Impulse Response) Speaker Simulator VST Plugin 1
MATLAB에서 IR (Impulse Response) Speaker Simulator VST Plugin 2
MATLAB Class
MATLAB에서 VST Plugin을 생성하려면 클래스 파일을 만들어야합니다. 이것은 통상의 함수형의 MATLAB 파일이 아니고, 객체 지향으로 쓴 코드로, propertiers, methods에 각종 속성이 있거나, 문법이 약간 다르거나 해 조금 어렵다.
부모 클래스를 계승하고, 기능을 계승한다는 개념이 있어, 그것을 행두에 쓴다.
예를 들어 신호 처리용 클래스 System Object와 VST Plugin 생성에 필요한 audioPlugin을 상속하면 이런 느낌.
classdef IRSpeakerSim < matlab.System & audioPlugin
end
System Object는 Simulink에 가져올 수 있고, 안에서 System Object 클래스(dsp.FIRFilter)를 사용하고 있거나, setup/step/reset과 같은 메소드가 미리 정의되어 있어 사용하기 쉽기 때문에 사용하고 있다.
처리용 코드는 단 1행
out = step(obj.hFilter, in, temp)*10^(obj.inputVol/20);
하지만, VST Plugin으로 했을 때의 파라미터 등등 넣으면 이런 코드가 되었다.
classdef IRSpeakerSim < matlab.System & audioPlugin
properties
SpeakerType = 'VHTVintage2x12';
inputVol = 0;
end
properties (Constant)
PluginInterface = audioPluginInterface(...
'PluginName', 'IR Speaker Simulator', ...
'InputChannels', 1, ...
'OutputChannels', 1, ...
'VendorName', 'SacredTubes', ...
'VendorVersion', '1.0.0', ...
audioPluginParameter('SpeakerType','DisplayName', 'Speaker Type', 'Label', 'Type', 'Mapping',...
{'enum', 'VHTVintage2x12', 'BoogieRectiVintage2x12', 'BoogieRectiModern2x12', 'SealedVintage4x12',...
'OpenVintage2x12'},'Layout',[2,2], 'DisplayNameLocation','Left'),...
audioPluginParameter('inputVol','DisplayName', 'Input Volume', ...
'Label', 'dB', 'Mapping', {'lin',-20,+20},...
'Style','rotaryknob', 'Layout',[4, 2], 'DisplayNameLocation','Left'),...
audioPluginGridLayout('RowHeight',[20,20 20 150 10],...
'ColumnWidth',[100 200])...
)
end
properties(Access = private)
hFilter
num
end
methods
% Constructor
function obj = IRSpeakerSim(varargin)
% Support name-value pair arguments when constructing object
setProperties(obj,nargin,varargin{:})
end
end
methods(Access = protected)
%% Common functions
function setupImpl(obj)
% Perform one-time calculations, such as computing constants
obj.hFilter = dsp.FIRFilter('NumeratorSource', 'Input port');
temp = coder.load('filterCoef.mat');
% temp.num = [ones(5,1) zeros(5, 10)]; % for test
obj.num = temp.num;
end
function out = stepImpl(obj,in)
% Implement algorithm. Calculate y as a function of input u and
% discrete states.
switch obj.SpeakerType
case 'VHTVintage2x12'
spSel = 1;
case 'BoogieRectiVintage2x12'
spSel = 2;
case 'BoogieRectiModern2x12'
spSel = 3;
case 'SealedVintage4x12'
spSel = 4;
case 'OpenVintage2x12'
spSel = 5;
otherwise
spSel = 1;
end
temp = obj.num(spSel, :);
out = step(obj.hFilter, in, temp)*10^(obj.inputVol/20);
end
function resetImpl(obj)
% Initialize / reset discrete-state properties
reset(obj.hFilter);
end
end
end
오디오 신호를 입력하고 테스트
우선 이것에 음악 신호를 입력하여 테스트한다.
시험은
>> audioTestBench
에서 테스트 벤치를 시작. 아래와 같은 GUI가 나오고, 입출력 파일/디바이스를 설정해 테스트할 수 있다.VST Plugin 생성
제대로 동작하면 드디어 플러그인 생성. 단지 이것만으로 VST Effect를 만들 수 있습니다. . .
>> generateAudioPlugin('IRSpeakerSim')
코드에 에러가 없으면 폴더에 VST Plugin의 파일 *.dll이 생성되고 있으므로, 그것을 DAW의 Effect용 폴더에 카피하면 사용할 수 있다.
MATLAB에서 실행하고 있다고 외형은 변하지 않지만, 여기는 DAW상에서 자동 생성된 VST로 이펙트를 걸고 있다.
끝
Reference
이 문제에 관하여(MATLAB에서 IR (Impulse Response) Speaker Simulator VST Plugin 3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SacredTubes/items/275a5b6fa541fe754c73텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)