基于事件模型的MusicXML解析器
java xml解析响应的方法

一、Java XML解析概述XML(Extensible Markup Language)是一种用于标记电子文件结构的标记语言,它被广泛应用于数据交换和存储。
在Java开发中,对于XML的解析是非常常见的操作,可以通过XML解析将XML文件中的数据提取出来,并进行相应的操作。
二、Java中的XML解析方法Java提供了多种方法用于解析XML文件,包括DOM解析、SAX解析和StAX解析等。
下面将分别介绍这三种解析方法的使用。
1. DOM解析DOM(Document Object Model)解析是一种基于树形结构的XML 解析方式,它将整个XML文档加载到内存中,并以树的形式表示XML文档的结构,允许开发人员在内存中对这棵树进行操作。
使用DOM解析XML的步骤如下:(1)创建一个DocumentBuilderFactory对象。
(2)通过DocumentBuilderFactory对象的newDocumentBuilder()方法创建一个DocumentBuilder对象。
(3)通过DocumentBuilder对象的parse()方法将XML文件解析为一个Document对象。
(4)通过Document对象的getElementsByTagName()等方法获取需要的节点信息。
2. SAX解析SAX(Simple API for XML)解析是一种基于事件驱动的XML解析方式,它逐行读取XML文档,并通过事件通知的方式告诉开发人员解析到了哪些节点。
使用SAX解析XML的步骤如下:(1)创建一个SAXParserFactory对象。
(2)通过SAXParserFactory对象的newSAXParser()方法创建一个SAXParser对象。
(3)自定义一个Handler类,实现org.xml.sax.helpers.DefaultHandler类并重写相应的方法。
(4)通过SAXParser对象的parse()方法解析XML文件,并将Handler对象传入。
解析Xml文件的三种方式

解析Xml⽂件的三种⽅式1、Sax解析(simple api for xml) 使⽤流式处理的⽅式,它并不记录所读内容的相关信息。
它是⼀种以事件为驱动的XML API,解析速度快,占⽤内存少。
使⽤回调函数来实现。
1class MyDefaultHander extends DefaultHandler{2private List<Student> list;3private Student student;45 @Override6public void startDocument() throws SAXException {7super.startDocument();8 list=new ArrayList<>();9 }1011 @Override12public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {13super.startElement(uri, localName, qName, attributes);14if(qName.equals("student")){15 student=new Student();1617 }18 preTag=qName;19 }2021 @Override22public void endElement(String uri, String localName, String qName) throws SAXException {23if(qName.equals("student")){24 list.add(student);25 }26 preTag=null;27 }2829 @Override30public void characters(char[] ch, int start, int length) throws SAXException {31if(preTag!=null){32if(preTag.equals("id")){33 student.setId(Integer.parseInt(new String(ch,start,length)));34 }else if(preTag.equals("name")){35 student.setName(new String(ch,start,length));36 }else if(preTag.equals("age")){37 student.setAge(Integer.parseInt(new String(ch,start,length)));38 }39 }40 }41public List<Student> getStudents(){42return list;43 }44 }45public List<Student> sax_parser(){46 List<Student> list=null;47try {48 SAXParser parser= SAXParserFactory.newInstance().newSAXParser();49 InputStream is= getAssets().open("student.xml");50 MyDefaultHander hander=new MyDefaultHander();51 parser.parse(is,hander);52 list= hander.getStudents();53 } catch (ParserConfigurationException e) {54 e.printStackTrace();55 } catch (SAXException e) {56 e.printStackTrace();57 } catch (IOException e) {58 e.printStackTrace();59 }60return list;61 }2、Dom解析 DOM(Document Object Model) 是⼀种⽤于XML⽂档的对象模型,可⽤于直接访问XML⽂档的各个部分。
Android解析xml文件的3种方式

android解析xml文件的方式android解析xml文件的方式(其一)在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xml,xml是与平台无关的特性,被广泛运用于数据通信中,那么在android中如何解析xml文件数据呢?通常有三种方式:DOM,SAX,PULL在这一节中我们使用DOM方式来处理。
DOM方式解析xml是先把xml文档都读到内存中,然后再用DOM API来访问树形结构,并获取数据的,但是这样一来,如果xml文件很大呢?手机CPU处理能力当然不能与PC 机器比,因此在处理效率方面就相对差了,当然这是对于其他方式处理xml文档而言。
解析xml文档,当然必须有xml文档文件啦,下面是一个参考river,放在assets目录.如下:<?xml version="1.0" encoding="utf-8"?><rivers><river name="灵渠" length="605"><introduction>灵渠在广西壮族自治区兴安县境内,是世界上最古老的运河之一,有着“世界古代水利建筑明珠”的美誉。
灵渠古称秦凿渠、零渠、陡河、兴安运河,于公元前214年凿成通航,距今已2217年,仍然发挥着功用。
</introduction><imageurl>/baike/pic/item/389aa8fdb7b8322e08244d3c.jpg</imageurl></river><river name="胶莱运河" length="200"><introduction>胶莱运河南起黄海灵山海口,北抵渤海三山岛,流经现胶南、胶州、平度、高密、昌邑和莱州等,全长200公里,流域面积达5400平方公里,南北贯穿山东半岛,沟通黄渤两海。
java 解析xml方法

java 解析xml方法在Java中,有许多库可以用于解析XML文档。
其中,DOM和SAX 是最常用的两种。
DOM是一种基于树结构的解析方式,而SAX是一种基于事件的解析方式。
1.DOM解析XMLDOM解析器将整个XML文档读入内存,并将其转换为一个树形结构。
这个树形结构可以使用Document Object Model (DOM) API来访问。
DOM解析器可以很容易地遍历这个树形结构,并提取出需要的元素和属性。
下面是一个使用DOM解析器读取XML文件的示例:```javaDocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(newFile('example.xml'));Element root = document.getDocumentElement();NodeList nodeList = root.getElementsByTagName('book'); for (int i = 0; i < nodeList.getLength(); i++) {Node node = nodeList.item(i);if (node.getNodeType() == Node.ELEMENT_NODE) {Element element = (Element) node;String title =element.getElementsByTagName('title').item(0).getTextConten t();String author =element.getElementsByTagName('author').item(0).getTextConte nt();System.out.println('Title: ' + title + ', Author: ' + author);}}```在这个例子中,我们使用了DocumentBuilderFactory和DocumentBuilder类来创建一个DOM解析器。
Android解析xml文件的三种方式

Android解析xml文件的三种方式SAX解析方法介绍:SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备。
SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。
所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。
Pull解析器:Pull解析是一个while循环,随时可以跳出。
Pull解析器的工作方式为允许你的应用程序代码主动从解析器中获取事件,因此可以在满足了需要的条件后不再获取事件,结束解析工作。
DOM解析:DOM解析XML文件时,会将XML的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据。
因为DOM需要将所有内容读取到内存中,所以内存的消耗比较大,不建议使用DOM解析XML文件,若文件较小可行。
首先新建一个xml文件,放在res/raw目录下,没有raw目录则新建一个。
要解析的itcase.xml内容如下:<?xml version="1.0" encoding="UTF-8"?><persons><person id="23"><name>liming</name><age>30</age></person><person id="20"><name>lixiang</name><age>25</age></person></persons>新建一个类存放解析的内容Person.java如下:public class Person {private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}以上所需要的准备好了,就开始解析xml工作:首先是SAX解析:新建一个XMLContentHandler.java文件内容如下:public class XMLContentHandler extends DefaultHandler{private List<Person> persons = null;private Person currentPerson;private String tagName = null;//当前解析的元素标签public List<Person> getPersons() {return persons;}@Override/**【文档开始时,调用此方法】**/public void startDocument() throws SAXException {persons = new ArrayList<>();}@Override/**【标签开始时,调用此方法】**//**【uri是命名空间|localName是不带命名空间前缀的标签名|qName是带命名空间前缀的标签名|attributes可以得到所有的属性名和对应的值】**/public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {if (localName.equals("person")) {currentPerson = new Person();currentPerson.setId(Integer.parseInt(attributes.getValue("id")));}this.tagName = localName;}@Override/**【接收标签中字符数据时,调用此方法】**//**【ch存放标签中的内容,start是起始位置,length是内容长度】**/public void characters(char[] ch, int start, int length) throws SAXException {if (tagName != null) {String data = new String(ch, start, length);if (tagName.equals("name")) {this.currentPerson.setName(data);} else if (tagName.equals("age")) {this.currentPerson.setAge(Short.parseShort(data));}}}@Override/**【标签结束时,调用此方法】**//**【localName表示元素本地名称(不带前缀),qName表示元素的限定名(带前缀)】**/public void endElement(String uri, String localName, String qName) throws SAXException {if (localName.equals("person")) {persons.add(currentPerson);currentPerson = null;}this.tagName = null;}}新建一个调用XMLContentHandler中方法的XMLParsingMethods.java类,内容如下:public class XMLParsingMethods {/**【SAX解析XML文件】**/public static List<Person> readXmlBySAX(InputStream inputStream) {try {/**【创建解析器】**/SAXParserFactory spf = SAXParserFactory.newInstance();SAXParser saxParser = spf.newSAXParser();XMLContentHandler handler = new XMLContentHandler();saxParser.parse(inputStream, handler);inputStream.close();return handler.getPersons();} catch (Exception e) {e.printStackTrace();}return null;}}到这里,SAX解析XML文件工作已经完成了,调用XMLPersingMethods中的readXmlBySAX就可以解析itcase.xml文件。
Android解析XML

Android中解析XML分类: Android 2011-05-12 19:32 112647人阅读评论(81) 收藏举报androidbooksexceptionstringattributesxmlXML在各种开发中都广泛应用,Android也不例外。
作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。
今天就由我向大家介绍一下在Android平台下几种常见的XML解析和创建的方法。
在Android中,常见的XML解析器分别为SAX解析器、DOM解析器和PULL解析器,下面,我将一一向大家详细介绍。
SAX解析器:SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的。
当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理。
在事件源调用事件处理器中特定方法的时候,还要传递给事件处理器相应事件的状态信息,这样事件处理器才能够根据提供的事件信息来决定自己的行为。
SAX解析器的优点是解析速度快,占用存少。
非常适合在Android移动设备中使用。
DOM解析器:DOM是基于树形结构的的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树、检索所需数据。
分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息。
由于DOM在存中以树形结构存放,因此检索和更新效率会更高。
但是对于特别大的文档,解析和加载整个文档将会很耗资源。
PULL解析器:PULL解析器的运行方式和SAX类似,都是基于事件的模式。
不同的是,在PULL解析过程中,我们需要自己获取产生的事件然后做相应的操作,而不像SAX那样由处理器触发一种事件的方法,执行我们的代码。
PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android 移动设备中使用,Android系统部在解析各种XML时也是用PULL解析器。
《XML语言ppt教程》第8章 XML解析器—SAX
XML基础教程
第8章 XML解析器——SAX
第16页
8.3 SAX工ห้องสมุดไป่ตู้机制
SAX解析器中主要有以下5种事件:
第8章 XML解析器——SAX
XML基础教程
第2页
本章的学习目标
了解SAX的基本特点 掌握SAX事件处理器和SAX事件 掌握SAX常用接口及回调方法 会使用SAX解析XML文档 了解SAX错误信息
XML基础教程
第8章 XML解析器——SAX
第3页
主要内容
8.1 8.2 8.3 8.4 8.5 8.6 8.7 SAX简介 SAX的特点 SAX工作机制 利用SAX解析XML SAX错误信息 SAX与DOM 本章小结
第8章 XML解析器—SAX
本章概述 本章的学习目标 主要内容
XML基础教程
第8章 XML解析器——SAX
第1页
本章概述
除DOM之外,SAX(Simple API for XML)是解 析XML文档的另一种接口,它以流的方式将XML 文档读取到内存中,以事件模型的方式解析处理 XML文档,获取XML文档中的信息。 当XML文档比较大时,构建DOM树将花费大量的 时间和内存。对于一些几十兆、甚至上百兆的较 大的XML文档来说,使用DOM解析将有可能导致 内存溢出。而SAX允许在读取文档时对它处理, 解析完毕处理也完成了,不必等到整个文档被分 析存储之后才进行操作。
XML基础教程
第8章 XML解析器——SAX
Android利用SAX解析XML文件
Android利用SAX解析XML文件关于Android中解析xml文件qName和localName的问题。
在Android中解析XML文主要有三种方式,分别为Simple API for XML(SAX)、Document Object Model(DOM)和Android附带的PULL解析器。
其中SAX是一个解析速度非常快并且占用内存少的XML解析器,非常适合Android手机等移动设备。
SAX解析XML文件采用事件驱动的方式进行,也就是说,SAX是逐行扫描文件,遇到符合条件的设定条件后就会触发特定的事件,回调你写好的事件处理程序。
使用SAX 的优势在于其解析速度较快,占用内存较少(相对于DOM而言)。
而且SAX在解析文件的过程中得到自己需要的信息后可以随时终止解析,并不一定要等文件全部解析完毕。
凡事有利必有弊,其劣势在于SAX采用的是流式处理方式,当遇到某个标签的时候,它并不会记录下以前所遇到的标签,也就是说,在处理某个标签的时候,比如在startElement方法中,所能够得到的信息就是标签的名字和属性,至于标签内部的嵌套结构,上层标签、下层标签以及其兄弟节点的名称等等与其结构相关的信息都是不得而知的。
实际上就是把XML文件的结构信息丢掉了,如果需要得到这些信息的话,只能你自己在程序里进行处理了。
所以相对DOM而言,SAX 处理XML文档没有DOM方便,SAX处理的过程相对DOM 而言也比较复杂。
使用SAX解析XML文件一般有以下五个步骤:1、创建一个SAXParserFactory对象(通过类名很容易得知它利用工厂方法模式实现的);2、调用SAXParserFactory中的newSAXParser方法创建一个SAXParser对象;3、然后在调用SAXParser中的getXMLReader方法获取一个XMLReader对象;4、在XMLReader中注册事件处理接口,一般有ContentHandler、ErrorHandler、DTDHandler、EntityHandler 四种;5、调用XMLReader中的parse方法解析指定的XML字符串对象;步骤四中提到的四个Handler是事件处理接口,SAX的事件处理函数就定义在这四个接口中,利用SAX解析XML文件需要重写接口中的方法。
xml解析方式
XML解析方式XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。
Xml 是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。
扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立。
XML已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。
XML的解析方式基本上分为三类:第一类是基于XML文档树结构的解析,例如DOM(Document Object Model);第二类是基于流式的解析,例如SAX(Simple API for XML)、StAX(Stream API for XML)和XPP(XML Pull Parser);第三类是基于非提取式的解析,例如VTD-XML(Virtual Token Description for XML)。
1DOMDOM是用与平台和语言无关的方式表示诸如XML和HTML文档的W3C(万维网联盟) 官方推荐标准。
它定义了所有文档元素的对象和属性,以及访问它们的API接口。
W3C DOM被分为3个不同的部分,核心DOM、XML DOM和HTML DOM。
核心DOM用于任何结构化文档的标准模型;XML DOM用于XML的标准对象模型和标准编程接口;HTML DOM用于HTML文档的标准模型。
DOM是以层次结构组织的节点或信息片断的集合。
这个层次结构允许开发人员在树中寻找特定信息。
分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。
由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。
优点:易用性强,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改,它还可以在任何时候在树中上下导航。
MusicXML简明教程
MusicXML简明教程MusicXML简明教程1MusicXML简介MusicXML(Music Extensible Markup Language ⾳乐扩展标记语⾔)是⼀个开放的基于XML的⾳乐符号⽂件格式,⽤于进⾏⾳乐交换和⾳乐分发。
MusicXML旨在创建⼀个通⽤的普通西⽅⾳乐记谱格式。
1.1MusicXML形成背景不同⾳乐软件之间的⽂件的交互存在困难。
之前仅有的通⽤交换格式——MIDI,并不能完全满⾜⾳乐软件对做谱的需求。
为了克服MIDI在记谱上的的局限,在MusicXML前相继出现了NIFF(Notation Interchange File Format⾳乐符号交换⽂件格式)、SMDL(Standard Musical Document Language标准⾳乐⽂件语⾔)。
前者⽤图像的形式呈现⾳乐数据,在记谱数据上优于MIDI,但是在⾳乐表现和分析运⽤上劣于MIDI;后者过于复杂,且从未被进⾏商业实现。
因此⼀直以来未曾找到适⽤于⾳乐交换和分发的⾳乐格式。
MuxicXML的诞⽣解决了这些问题。
1.2MusicXML特点MusicXML具有以下⼀些特点:●⽀持17世纪以来的西⽅⾳乐记谱法●基于标准XML技术●⽬前⽀持的软件超过140种●⽀持记谱、分析、信息检索、表现实现●基于两个学院派⾳乐格式:MuseData、Humdrum●对各种⾳乐应⽤软件,不是最优,但是是最充⾜最合适的⾳乐格式1.3MusicXML优势对基于Web的⾳乐记谱,MusicXML有其独特的优势。
XML格式对Web,Web数据库,元数据和信息检索都能提供有效的⽀持,因此MusicXML具有⾼度的互联⽹友好性。
2MusicXML使⽤范例2.1MusicXML结构介绍MusicXML通过元素elements来表现⾳乐语义,当需要呈现的⾳乐内容超过⼀个部分的时候,通过使⽤元素可以创建分层结构。
属性attributes主要⽤于以下⼀些⽅⾯:●指明时候有元素开始和结束,例如连奏slurs元素和多连⾳tuplets元素●识别元素,例如在⼩节编号measure numbers和符杠等级beam levels中●建议元素怎样被显⽰●建议元素怎样以最好的⽅式转化成MIDI或者其他声⾳⽂件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
武汉科技学院计算机科学学院 2009 年毕业设计论文
1.2 发展状况
现在,有许多的音频文件格式,但是并不是所有的数据格式对音乐数据交换 有意义,因为这里我们谈到的音乐数据指的是电子乐音和电子乐谱。我们接触到 的大多数都是音频格式,记录声音是直接的或间接的记录声音的波形,直接的记 录波形的方式对音乐数据 的表示作用不大,几乎不大可能从波形中得到乐谱信 息,一段 8.8kHz 的高音质 CD 虽然完全重现了声音,但是那些 0 和 1 用来表示波 形的数据只是记录的混合后的波形数据,无法得到乐器,拍号,节奏等音乐特征 信息。间接的记录波形,从间接的数据中利用软件模拟出波形的方式,恰当的中 间数据更容易帮助分析乐谱, MIDI 是间接记录声音的方式,它在电子音乐交换 中具有重要地位, 在电子乐器交换中具有重要的地位。MIDI(musical instrument digital interface)[4-7] 是一种工业的电子乐器通讯协议, MIDI 不直接记录声 音波形,只传输音调和音乐强度数字信息,MIDI 文件的数据特点便于分析乐谱, 但乐谱分析往往不能正确还原乐谱,毕竟 MIDI 只记录了声音信息,乐谱的小节, 音乐符号具体的表现没有记录,一般的基于 MIDI 的解释都是基于音轨的分析方 法,同时各种软件开发商定制的文件格式辅助存储音乐符号信息,开发者的思想 直接影响乐谱信息。从音乐家在电子乐器视谱演奏,再从录制的 MIDI 中用各种 软件分析乐谱和原谱对照谱子很可能大相径庭,各不相同。早期的乐谱软件都是 基于 MIDI, 同时为了弥补对乐谱呈现的短处, 这些软件都会对 MIDI 进行在包装 , 设计数据结构辅助存贮乐谱信息,各种软件厂商缺乏统一,使得这些乐谱只能部 分的工作在桌面程序中,无法实现阵阵意义的网络音乐服务。笔者大量接触过著 名的 cakewalk 和 guitar pro 乐谱软件,它们就是分别自定义了文件格式 .wrk 和.gtp 用于辅助存贮乐谱信息,guitar pro 是功能强大的吉他谱软件,为了满 足吉他的特点,被包装的 MIDI 文件上有很多的细节处理,如:为了表现扫弦的 过程和方向,和弦各级音都按时间进行了散列,而在 cakewalk 中和弦被认为是 在同一时间点上产生的声音事件,当把 MIDI 文件从一种软件导出,再在另外一 种软件中导入时,乐谱完全不堪入目。 基于 MIDI 在乐谱交换上的不足,人们又开发了新的数据交换格式,这个时 期最具有代表性的是 NIFF[8](notation interchange file format), 它将 音乐
4
武汉科技学院计算机科学学院 2009 年毕简介 1996 年,万维网协会(或者叫 W3C,)开始设计一种可 扩展的标记语言, 使其能够将 SGML 的灵活性和强大功能与已经被广泛采用的 HTML 结合起来。这种后来变成 XML 的语言继承了 SGML 的规范,而且实际上就是 后者的一个子集。从 SGML 入手使得该设计小组能够将精力集中在简化已有的成 果上。SGML 已经提供了一种可以无限扩展的语言,它允许任何人能够根据自己 的需要加以扩充。XML 之所以要较 SGML 更为简化,很大程度上是出于易用 性的 考虑:人们对标记的读写过程应该使用现有的、简便通用的工具,同时,我们也 应当简化计算机对文档和数据交换的处理。由于有太多的可选功能, SGML 变得 过于复杂,以至于很难编写出针对这种语言的普通解释器,而 XML 的解释器则简 单得多。此外,XML 使得现有的 Internet 协议和软件更为协调,从而简化了数 据处理和传输。作为一个不错的 SGML 子集,XML 还保持了对现有的面向 SGML 的 系统的向下兼容性,这样,用 XML 标记过的数据就仍然可以在这些系统 中 使 用 , 为基于 SGML 的行业节省了大笔的改造费用,同时,与 Web 的结合也使得它们更 便于被访问。1998 年 2 月,XML1.0 成为了 W3C 的推荐标准。XML 是一种界定文 本数据的简便而标准的方法。它曾经被人称作“Web 上的 ASCII 码”。它具有开 放性,XML 能够在不同的用户和程序之间交换数据,而不论其平台如何。它的自 描述的特性使其对于 B2B 和企业内部网解决方案来说是一种有效的选择。 无需事 先协调,我们就可以在程序之间共享数据。XML 的数据描述机制意味着它将成为 一种在 Internet 上共享信息的强大途径。 1.3.4 AWT/Swing 简介 Java 的基础类(JFC)是开发图形用户界面的 API 集。Java 的基础类包括以下 API:抽象窗口工具包(版本 1.1 及以后的版本);2D API;Swing 组件; ;可 访 问 性 API。 抽象窗口工具包(Abstract Window Toolkit,AWT)是 Java 开发用户界面最 初的工具包。AWT 是建立 JFC 的主要基础。
3
武汉科技学院计算机科学学院 2009 年毕业设计论文
不是数字的音频波形,而是音乐代码或称电子乐谱。电视晚会的音乐编导可以用 MIDI 功能辅助音乐创作,或按 MI-DI 标准生成音乐数据传播媒介,或直接进行 乐曲演奏。 MIDI 文件是一种描述性的“音乐语言”, 它将所要演奏的乐曲信息用字节进 行描述。譬如在某一时刻,使用什么乐器,以什么音符开始,以什么音调结束, 加以什么伴奏等等,也就是说 MIDI 文件本身并不包含波形数据,所以 MIDI 文件 非常小巧。 MIDI 要形成电脑音乐必须通过合成。 早期的 ISA 声卡普遍使用的是 FM 合成, 即“频率调变”。它运用声音振荡的原理对 MIDI 进行合成处理,由于技术本身 的局限,效果很难令人满意。而现在的声卡大都采用的是波表合成了,它首先将 各种真实乐器所能发出的所有声音(包括各个音域、声调)进行取样,存储为一 个波表文件。 在播放时, 根据 MIDI 文件记录的乐曲信息向波表发出指令, 从“表 格”中逐一找出对应的声音信息,经过合成、加工后回放出来。由于它采用的是 真实乐器的采样,所以 效果自然要好于 FM。一般波表的乐器声音信息都以 44.1KHz、16Bit 的精度录制,以达到最真实的回放效果。理论上,波表容量越 大合成效果越好。根据取样文件放置位置和由专用微处理器或 CPU 来处理的不 同,波表合成又常被分为软波表和硬波表。 1.3.2 Java 对象化的 MIDI 声音是多媒体技术的基础,声音可以创造意境,触发遐想,当与虚拟图像相 结合时,更加可以让整个世界充满幻觉。 Sun 公司的 JAVA 媒体技术开发小组开 发了 Java Sound 1.0 API[9]并将其包含于下一版本的 JAVA 开发工具库中。 在 JAVA2 平台出现之前,JAVA 语言只能处理电话音质的声音,以单声道 8KHZ 的采 样频率存储为 μ-law AU 文件。 JAVA2 平台增加了对 AIFF,WAV 以及三种 MIDI 文件类型的支持。所支持的三种 MIDI 文件格式为 MIDI 文件类型 0、MIDI 文件类 型 1、以及 RMF。 应用程序接口 API1.0 版提供了一个易于使用的工具集,使程 序员可以访问底层的合成与演奏引擎,从而扩展了 JAVA 声音的应用。其中两个 重要的领域是创建数字化音频以及乐器指令数字化接口 MIDI。由于提供了大量 的底层支持功能,所以程序员能输入输出声音,控制 MIDI 设备,并能查询系统
武汉科技学院计算机科学学院 2009 年毕业设计论文
1 导论
1.1 研究背景
随着 Internet 的飞速发展, 很多的软件开始从桌面应用程序走向了网络化, 人们希望能更充分的利用网络实现数据共享和传输。 在很多的领域已经有了统一 的标准,但是在音乐领域的研究和实现现状并不乐观,还有很多的难题。现在世 界上虽然有着众多的音乐数据格式和五花八门的音乐软件, 但是这些电脑音乐程 序无法实现共享。 使用多样化的音乐数据格式的音乐软件而不得不去学习各种不 一样的音乐数据对每个用户来说是个巨大的麻烦。 长久以来,人们一直在尝试创造一种新型的音乐数据交换格式, MusicXML 就是在这种背景下诞生,MusicXML[1-3]采用 XML 技术描述音乐。现在 XML 是数据 交换上最为广泛使用的一种数据格式,在这种趋势下,以 XML 为技术基础,发展 出一种新型的音乐数据格式称之为 MusicXML。它的设计目的是为了音乐数据的 分析与截取。MusicXML 是一种存贮乐谱的数据格式,包含了常见的西方乐谱信 息以及描述信息,如:作者,谱号,调号,小节,音高,音长,旋律,节奏,和 弦,圆滑音等。 现在对 MusicXML 新型数据格式的研究和应用可以分为两种,一种是整体的 从 MusicXML 中分析乐谱的特征,从音乐数据中获得其特征值后,可以更为有效 的进行音乐分析和查询,并提供更多样化的网络音乐服务,这是因为 MusicXML 是纯文本的数据格 式,所有的 数据直截了 当,便于数 学分析。一 种是利用 MusicXML 开放的数据格式作为存储格式,从 XML 文件上重建电子乐音和电子乐 谱,或在可视化环境中编辑乐谱,直接采用 MusicXML 存储。MusicXML 的应用前 景十分可观。 我们小组是研究和实现利用 MusicXML 还原乐谱和乐音,我在文章中将详细 阐述乐音部分的设计实现。
2
武汉科技学院计算机科学学院 2009 年毕业设计论文
数据分解为列表、数据块和标签,而且格式有很大的伸缩性,既可以只简单的表 示音高和节拍时间, 也可以精确的表示乐谱的布局, 还可以嵌入一些图片和 MIDI 信息。但是,NIFF 使用图像格式表示音乐信息,在 NIFF 中所有的音乐元素信息 的表示都是从图像上获得,要根据符号的位置和样式确定所在声部,小节,五线 谱位置等等。在 NIFF 中没有基本的音乐的特征表现,做任何的分析都要给予图 像的识别,这使得它很难得到支持,就想 ISO 七层协议一样,尽管很全面很科学 的划分,但是缺乏商业驱动的标准很难生存。而且 NIFF 严格完整的二进制信息 不能随意截取,也无法真正的实现网络音乐服务。NIFF 只在少数软件给出支持, 这期间,我们只能看到在少数音乐作曲软件中也就多了 NIFF 下拉选选项,没有 人愿意完全支持它和依赖它。 随着网络上 XML 在数据交换的兴起,给予 XML 的各个领域的应用不断出现。 2001XML 互联 网 进程 大 会 上 , Michael 发表 了 论文 《 An Internet-Friendly Format for Sheet Music》引起了大家的注意,早在 2000 年 10 月,MusicXML 就推出了 0.1 版本, MusicXML 一经推出就 赢得了 大量的 商业软 件的支 持, sharpeye music reader,dolet for finale 等著名音乐软件,但遗憾的是国内 还没有出现此类应用。现在 MusicXML 已经发展到 2.0 版本,凭借诸多优势,以 及它的不断发展和完善,它已经成为音乐数据交换的一种标准格式。