matlab miditoolbox中的midi文件生成函数的改进

matlab中有一个用于生成midi文件的函数:

writemidi

但是测试发现该函数生成的midi文件不能直接在windows media player中播放,但是可以由miditoolbox中的readmidi函数读取。

经过分析发现,原因是该函数生成的midi文件缺少轨道的结束标志:00 FF 2F 00。对matlab文件进行如下修改:

文件名:writeNMat2Smf.m

在生成轨道数据的循环结束位置添加如下语句

databytes_track = [databytes_track; 0; hex2dec('ff'); hex2dec('2f'); 0];

实践证明,经过这样修改之后所生成的midi文件可以使用media player直接播放

另外,原有的settempo函数需要先计算旧的tempo值,再缩放到新的tempo值。但是如果直接根据原有的节拍数和新的tempo值计算更简单可靠,因此也修改了settempo函数。新的settempo函数如下:

function nmatf = settempo(nmat,bpm)
% Set tempo (in BPM)
% y = settempo(nmat,bpm)
% Assigns a new tempo to the NMAT in beats per minute (BPM)
%
% Input argument:
%    NMAT = notematrix
%    BPM = new tempo (in beats per minute)
%
% Output:
%    NMATF = new notematrix
%
% Change History :
% Date        Time    Prog    Note
% 1.7.2003    18:53    TE    Created under MATLAB 5.3 (PC)
%� Part of the MIDI Toolbox, Copyright � 2004, University of Jyvaskyla, Finland
% See License.txt

if isempty(nmat), return; end

%t=gettempo(nmat);
x = 60/bpm; %x= bpm/t;
nmatf=nmat;
nmatf(:,6:7) = nmat(:,1:2)*x;

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值