JFugue是一个用于音乐作曲的Java

API。和其它的音乐API不同,它能够让您用数据字符串来指定音符、乐器、和弦,以及其它音乐数据,而不需要进行底层的MIDI操控。它和其它快速应用程序开发环境类似,只不过是专门用于音乐编程的。在JFugue环境里,音乐编程现在相对简单,不一定需要了解音乐理论知识;可以在Java应用程序正在运行的时候用JFugue来演奏音乐,或者把音乐保存为MIDI文件。

一个演奏音阶中乐符的简单JFugue应用程序如下:importorg.JFugue.*;

public class Example1 {

public static void main(String[] args){

Player player = new Player();

Pattern pattern = new Pattern("C D E F G A B");

player.play(pattern);

System.exit(0);

}

}

音乐字符串

JFugue使用了“音乐字符串(Music

String)”的概念——它用来指定音符、乐器变化,以及演奏音乐所需要的其它数据。这个音乐字符串是一个由字符组成的文字串,其中的每一组字符都代表着一条音乐命令。音乐命令可以是下面几种类型中的一种:

Notes和chords——用来指定将要演奏的音符或者和弦,以及音值;

Tempo——用来指定乐曲的速度;

Voice——用来表示音符演奏的声部;

Instrument change——用来更换演奏音符的乐器或者音色;

Controller messages——用来设置MIDI控制器事件,例如平衡等;

Variables——用来定义其它命令所使用的值。

现在就让我们来看看这些命令吧。

可以用#和b字符分别表示一个音符是升半音还是降半音。除了用音符字母来指定音符之外,还有两种其它的方式来指定音符。一个是使用“音符值(note

value)”,它是一个表示音符的数值。MIDI有128个音符,编号是从0到127。第60号音符是Middle-C。要指定音符值,就要在一个方括号里加上数值,比如[60]。第二种方式是使用“打击乐器名(percussion

name)”。在MIDI里,第10个声部(Voice

9,声部的编号从0开始)被保留给打击乐器。在这个声部,您可以演奏多种不同的打击乐器声音,而且您可以通过在方括号里指定打击乐器名来表示它们,例如[Hi_Bongo]。

Octave:MIDI能够演奏超过10个八度音阶的音符。要表示八度音阶,就要使用数字0到9。例如,有一个位于第6个八度音阶的A音符,它就要被表示为A6。如果您没有指定八度音阶,那么默认的音阶是Octave

5。

Duration:Duration用来表示音符演奏的音值。如果您不输入音值,那么默认的就是1/4个音符。下面这些值都是允许的:全音值(“w”)、半音值(“h”)、1/4音值(“q”)、1/8(“i”)、1/16(“s”)、1/32(“t”)、1/64(“x”)和1/128音值(“n”)。您可以通过在音值字符后面加上一个点(“.”)来表示一个点音值。

点音符的音值就是原音值加上一个半音值。您可以通过增加音值来获得更长的音值。例如qh.是一个1/4音符加上一个点半音符;wwww是4个全音符。除了用字母指定音值,您还可以用小数来指定音值。1/4音符是0.25,1/8音符是0.125,以此类推。如果要把数字表示为小数就要使用/加上小数。例如,音符A,第4音阶,半音值,就应该表示为A4/0.5。

Chords:一旦指定了和弦的根音(以及可选的音阶),您就可以指定它的结构了。一个和弦里的所有音符都用同一种乐器以同一个声部演奏。JFugue可以识别很多常见的和弦结构,下面就是其中的一些:大调(“maj”)、小调(“min”)、第7大调(“maj7”)、第7小调(“min7”)、减半音(“dim”)、增半音(“aug”)。和弦标记直接跟在根音和音阶之后音值之前。例如一个C大调、第5音阶,1/4音符被表示为C5majq.。

您可以用两种特殊的字符来组合音符。加号(+)可以被用来(在协奏曲里)在同一时间演奏多个音符。当主旋律与协奏曲一起演奏时,下划线(_)可以被用来(在主旋律里)按顺序演奏音符。例如“C5q+E5q+G5q”演奏的内容与“C5majq”和弦的相同。

Velocity:您可以指定敲击音符的强度,以及音符释放的速度。要表示敲击音符的速度,您就要用“a”和一个从0到127的数值来设置“敲击速度(attack

velocity)”。要表示释放音符的速度,您就要用“d”和一个从0到127的数值来设置“衰减速度(decay

velocity”)。每个音符默认的敲击速度和衰减速度是64。顺便提一下,这是对于不支持速度的MIDI设备的一个标准默认值。例如,“C5qa120d30”表示Middle

C,1/4音值,敲击强度非常大(120),轻轻释放(30)。

Tempo:您应该指定每首乐曲的“节拍(tempo)”——即乐曲应该以多快的速度演奏。节拍值代表“四分音符的拍子数(Pulses

Per

Quarter)”,或者简称为PPQ,它表示每个四分音符有几拍,或者时钟周期。值越小表示表示乐曲越快,值越大表示乐曲越慢。一个比较合适的初始值是120;如果您不指定节拍的话,这个值也是默认的值。它命令是T,后面紧接一个从0到无限大的数字。例如T120。

Voice:“声部(Voice)”是告诉JFugue要用给定的MIDI声部(也叫做声道,channel)来演奏下面的音符。您可以将声部想象为一个音轨。(多)声部让您能够同时演奏多个主旋律。如果您在编写钢琴曲,您可以为高音谱号用一个声部,为低音谱号使用另外一个声部。如果您在创作一个交响曲,您就要给每种乐器自己专用的一个声轨。它的命令是“V”,后面紧跟一个从0到15的值。声部可以有16个,编号从0到15。第10个声部(或者声道)是专用的——它是用来演奏节拍乐器的声道。在这个声部演奏的音符是像鼓、钹、木鱼,以及其它打击乐器。由于我们是从0开始计数声部的,所以第10个声部的标记就是Voice

9。在演奏Voice

9声部里的音符时,您可以用诸如[Bass_Drum]或者[Open_Hi_Hat]这样的打击乐器名来表示打击乐器。

Instrument change:“更改乐器(Instrument

Change)”命令是用来告诉JFugue要用给定的MIDI乐器号或者名称来演奏下面的音符。它的命令是“I”,后面紧跟一个从0到127的数字,或者释放在方括号里面的乐器名,比如“I9”或者“I[Guitar]”。

Patterns

模式(pattern)是一个含有音乐说明的音符集合。一个模式可以代表整首乐曲、乐曲中单独的部分,也可以是乐曲反复或者经常用到的片段。模式可以通过其它的模式来创建,一个模式里的乐曲可以被以有趣的方式或者创造性的方式被转换。

java音乐_用JavaJFugue进行音乐编程相关推荐

  1. 易语言java类_易语言面对对象编程

    易语言面对对象编程---类的创建与使用 面对对象编程,可以说是当前最流行的编程方式,当前流行的面对对象的编程语言很多,如:C++.JAVA等等.易语言3.8版推出后,同样紧跟编程语言发展的方向,也开始 ...

  2. arduino灯带随音乐_【创客玩音乐】用灯带让音乐可视化

    一.缘起: 长久以来一直想玩玩用灯带让音乐可视化的项目: 原作者地址: https://github.com/scottlawsonbc/audio-reactive-led-strip 但苦于没有动 ...

  3. python 循环播放音乐_基于python实现音乐播放器代码实例

    核心播放模块(pygame内核) import time import pygame import easygui as gui file = r'D:\CloudMusic\G.E.M.邓紫棋,艾热 ...

  4. python 定时播放音乐_树莓派定时播放音乐,Python3.7

    目前在一台3B+上运行,每天在公司定时放音乐,巴适得很 import os import random import re import sys import time from datetime i ...

  5. python写音乐_你想过用代码来写音乐吗?我用业余时间开发的一个可以编程写音乐的python库(一)...

    最近几个月学业繁忙,但是业余时间自己开发了很多python库,内容包括数学统计,各种游戏,还有音乐等等.其实还有试着写AI方面的,但是目前还是初期进度.今天我想先介绍一下我正在开发中的一个可以编程写音 ...

  6. 运用Java制作一个属于自己的音乐播放软件

    运用Java制作一个属于自己的音乐播放软件 前言 上个寒假小编用python做了一个音乐播放软件(博客链接为:)运用tkinter.爬虫做了一个播放音乐的小程序(动态显示歌词[歌词向上翻滚]),觉得效 ...

  7. amazon应用程序开发_亚马逊音乐是流媒体应用程序的黑马

    amazon应用程序开发 重点 (Top highlight) In their 1993 classic, The 22 Immutable Laws of Marketing, Al Ries a ...

  8. [附源码]Java计算机毕业设计SSM花田音乐网站

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  9. java中如何播放背景mp3音乐_java播放背景音乐

    最近忙于java课题设计,在做背景音乐这一功能时卡住了,后来查了很多资料,也问了CSDN上的学霸们,所谓功夫不负有心人,最终还是做出来了.原来是音频格式的问题,要用工具(百度音乐PC版)把mp3格式的 ...

最新文章

  1. python file does not exist_python – os.path.exists()的谎言
  2. Windows 8.1 新增控件之 DatePicker
  3. 【混淆矩阵】matlab画混淆矩阵
  4. spss聚类分析_SPSS实践:常用聚类分析方法详解
  5. Python 将 HTML 文件转成指定的编码
  6. 同一个项目,项目名称不一致,这两个项目同时在Eclipse中出现
  7. 判断请求是通过点击链接还是直接输入网址
  8. equals方法 和 ==的区别
  9. 优化设计-内点惩罚函数法-MATLAB编程
  10. Python基础知识从hello world 开始(第三天)
  11. STM32F030F4P6单片机由外部时钟改为内部时钟
  12. Windows图标-Icon文件格式分析。
  13. java毕业设计高校学习社区mybatis+源码+调试部署+系统+数据库+lw
  14. 计算机网络工程职业学院,湖南网络工程职业学院理工学院
  15. python绘图报错
  16. 电影票房预测-kaggle项目Python项目
  17. 中望CAD的lisp编辑器_巧用中望CAD2017自定义工具选项板
  18. Luogu P2751 [USACO4.2]工序安排Job Processing
  19. 最新的期刊论文怎么下载?
  20. 360网站卫士SQL注入绕过案例一个

热门文章

  1. 10019---记录一次壮烈牺牲的阿里巴巴面试
  2. java刻画三角形和梯形和圆形_三角形、梯形和圆形的类封装
  3. 实验三,基于Unittest框架的单元测试
  4. 图片实现水平垂直居中的方法
  5. 解决w950播放RM视频的问题[转]
  6. 114个ChatGPT全网最热话题
  7. DFS序——树链剖分前驱知识
  8. 【Web技术】1064- 前端9种图片格式基础知识, 你应该知道的
  9. unity人物添加动作进行播放
  10. “网红直播+电商”是门好生意?直播的商品为什么这么好卖