note2mid2.m

来自「自动语音识别源码对非特定人的孤立词语音识别算法 进行研究。考虑到语音识别技术在」· M 代码 · 共 50 行

M
50
字号
function yi = midi2mid2(midi, duration, pointNum, plotOpt)
%MIDI2MID2 Midi to mid conversion, version 2.
%	Usage:
%	yi = midi2mid2(midi, duration, pointNum, plotOpt)
%
%	Type midi2mid2 for a self demo.

%	Roger Jang, 20010111

if nargin==0, selfdemo; return; end
if nargin<4, plotOpt=1; end
if nargin<3, pointNum=128; end
if nargin<2, duration=8; end

midi = double(midi);

smtn = midi(1:2:end);
time = midi(2:2:end);

time = time(:)';
endTime = cumsum(time)*1/64;
beginTime = [0, endTime(1:end-1)+1e-6];
timeSeq = [beginTime; endTime];
timeSeq = timeSeq(:);

smtnSeq = [smtn(:)'; smtn(:)'];
smtnSeq = smtnSeq(:);

smtnSeq(smtnSeq==0)=nan;

% ====== Return mid format of pointNum points
xi = linspace(0, duration, pointNum);
yi = interp1(timeSeq, smtnSeq, xi);

% ====== If rest, use the previous pitch
for i=2:length(yi),
	if isnan(yi(i)), yi(i) = yi(i-1); end
	if yi(i)==0,     yi(i) = yi(i-1); end
end

if plotOpt,
	figure;
	plotmidi(midi);
	hold on
	plot(xi, yi, 'g.');
	hold off
end

function selfdemo
% 冀

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?