0

0

理解MIDI消息中的176和192及其功能:Java Beatbox教程

聖光之護

聖光之護

发布时间:2025-09-24 16:02:19

|

287人浏览过

|

来源于php中文网

原创

理解midi消息中的176和192及其功能:java beatbox教程

在Java音乐编程中,理解MIDI消息至关重要。本文将结合一个Beatbox的示例,深入探讨MIDI消息中控制变更(Control Change,值为176)和程序变更(Program Change,值为192)的作用。我们将学习如何使用ShortMessage类创建这些MIDI事件,并将它们添加到MIDI音轨中,从而控制音乐序列的播放和乐器选择。

MIDI消息基础

MIDI(Musical Instrument Digital Interface,乐器数字接口)是一种用于电子乐器和计算机之间通信的标准协议。MIDI消息包含了音符、力度、乐器选择、控制变更等信息,允许计算机精确地控制合成器和其他MIDI设备。

ShortMessage类

在Java中,javax.sound.midi.ShortMessage类用于表示MIDI消息。通过该类,我们可以设置消息的命令(command)、通道(channel)以及数据(data)。

import javax.sound.midi.ShortMessage;
import javax.sound.midi.MidiEvent;

public class MidiUtil {

    public static MidiEvent makeEvent(int comd, int chan, int one, int two, int tick) {
        MidiEvent event = null;
        try {
            ShortMessage a = new ShortMessage();
            a.setMessage(comd, chan, one, two);
            event = new MidiEvent(a, tick);
        } catch(Exception e) {
            e.printStackTrace();
        }
        return event;
    }
}

这段代码展示了如何创建一个MidiEvent,其中包含一个ShortMessage。comd参数代表MIDI命令,chan代表通道,one和two代表数据,tick代表事件发生的节拍位置。

立即学习Java免费学习笔记(深入)”;

控制变更(Control Change):MIDI消息176

控制变更消息用于控制MIDI设备的各种参数,如音量、声像、混响等。命令值为176(0xB0)。

示例:设置通道为Mono模式

makeEvent(176,1,126,0,16) 表示在第1通道(chan=1)的第16个节拍(tick=16)设置控制器126(one=126)的值为0(two=0)。控制器126通常用于设置通道为Mono模式。

// 设置通道1为Mono模式
track.add(MidiUtil.makeEvent(176, 1, 126, 0, 16));

注意事项

不同的MIDI设备可能对控制变更消息的解释不同。因此,在使用控制变更消息时,需要查阅相关设备的MIDI实现文档。可以参考MIDI控制器列表来了解每个控制器编号的含义。

Designs.ai
Designs.ai

AI设计工具

下载

程序变更(Program Change):MIDI消息192

程序变更消息用于选择MIDI通道的乐器音色(patch)。命令值为192(0xC0)。

示例:选择鼓组音色

makeEvent(192,9,1,0,15) 表示在第9通道(chan=9)的第15个节拍(tick=15)选择音色编号为1(one=1)。在MIDI标准中,第9通道通常用于鼓组,音色编号1可能代表一种特定的鼓组音色。

// 在通道9选择鼓组音色1
track.add(MidiUtil.makeEvent(192, 9, 1, 0, 15));

注意事项

程序变更消息的第二个数据字节(two)通常被忽略。程序变更消息通常在乐曲开始时发送,用于设置每个通道使用的乐器音色。

序列长度与循环

MIDI序列的长度取决于最后一个MIDI事件的节拍位置。如果没有添加任何音符事件(NoteON/OFF),程序变更消息可以用来保持序列的长度。

示例

如果没有添加任何音符事件,只添加了makeEvent(192,9,1,0,15),那么序列的长度将是16个节拍。

注意事项

如果使用Sequencer.setLoopStartPoint()和Sequencer.setLoopEndPoint(),可以自定义循环的起始和结束点。否则,Sequencer会循环整个序列。

总结

理解MIDI消息的类型和参数对于音乐编程至关重要。通过控制变更和程序变更消息,我们可以精确地控制MIDI设备的各种参数和乐器音色。在Java中,ShortMessage类是创建和发送MIDI消息的关键。通过本文的学习,你应该能够更好地理解和应用MIDI消息,从而创作出更丰富的音乐作品。

进一步学习

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1106

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

192

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1599

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

20

2026.01.19

go中interface用法
go中interface用法

本专题整合了go语言中int相关内容,阅读专题下面的文章了解更多详细内容。

76

2025.09.10

Golang channel原理
Golang channel原理

本专题整合了Golang channel通信相关介绍,阅读专题下面的文章了解更多详细内容。

248

2025.11.14

golang channel相关教程
golang channel相关教程

本专题整合了golang处理channel相关教程,阅读专题下面的文章了解更多详细内容。

344

2025.11.17

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

141

2026.01.28

包子漫画在线官方入口大全
包子漫画在线官方入口大全

本合集汇总了包子漫画2026最新官方在线观看入口,涵盖备用域名、正版无广告链接及多端适配地址,助你畅享12700+高清漫画资源。阅读专题下面的文章了解更多详细内容。

24

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.9万人学习

C# 教程
C# 教程

共94课时 | 7.8万人学习

Java 教程
Java 教程

共578课时 | 52.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号