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

本文介绍如何解决MATLAB生成的MIDI文件无法在Windows Media Player直接播放的问题,通过在轨道数据末尾添加特定结束标志,使得MIDI文件能够正常播放。同时,更新了settempo函数,提供更简便的节拍调整方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值