跳到内容

mlang/bmc公司

文件夹和文件

姓名姓名
上次提交消息
上次提交日期

最新提交

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

存储库文件导航

BMC——盲文音乐编译器

Travis CI构建状态(Linux和Mac OS X) AppVeyor CI生成状态(Windows)

BMC旨在成为一个分析和生成盲文音乐代码的系统。

历史

该项目的前身是FreeDots(自由点),基于Java的程序将MusicXML转换为布莱叶盲文音乐代码,以及提供播放和一些交互式编辑功能。

FreeDots在提供对盲文音乐代码的各个方面。然而,它只是为了覆盖一种转换方法,即从一些音乐符号源(如MusicXML)到盲文音乐代码。使用盲文音乐代码的完整系统应该最终涵盖两个方向。

依赖关系

作为一个C++程序,BMC自然会使用标准模板库(STL)。

除此之外,还有一些促进采用了C++库。

MusicXML后端利用代码合成XSD生成MusicXML文档的C++绑定。

图形用户界面在Qt之上实现。

在Debian上安装依赖项

在Debian GNU/Linux系统上,您需要安装以下内容依赖项:

sudo apt-get安装cmake-doxygen库{boost-{program-options,test},fluidsynth,icu}-dev

在Mac OS X上安装依赖项

我们假设您已经安装了Xcode。Mac OS X的一个不错的包管理器是自制软件。如果尚未安装,以下是操作方法:

红宝石-e"$(卷曲-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"

如果您有Homebrew包管理器,请运行以下命令以获取构建和运行BMC所需的所有依赖项:

xcode-select--安装brew安装cmake lame pkg-config python3 qt5胆怯xerces-c xsdpip3安装狮身人面像brew安装木桶室/木桶/brew-cask啤酒桶安装lilypondbrew安装boost--使用pythonbrew安装boost-python

获取源代码

你需要吉特以检索源存储库。

git克隆--安静https://github.com/mlang/bmc.gitgit子模块--静默更新--初始化--递归

正在运行CMake

现在可以运行CMake为您的平台生成生成系统:

光盘骨基质细胞克马克.

建筑物

UNIX和Mac OS X

要构建BMC,请运行以下命令:

制作

要执行测试套件,请运行:

进行检查

窗户

通过CMake配置后,在Visual Studio 14(2015)中打开解决方案bmc,或打开“VS2015的MSBuild命令提示符”并运行以下命令:

msbuild bmc.sln/t:bmc-ui/p:Configuration=发布

TODO公司

  • 将当前代码库移植到Windows:
    • 了解如何模仿当前使用的FluidSynth功能Windows下的Linux。理想情况下,为实时MIDI创建一个通用类独立于平台的回放,并实现FluidSynth(Linux)和Windows后端在此之上。
    • 调查编码兼容性:BMC尝试在内部基于Unicode。在UNIX上,wchar_t是32位宽的,可以实现完全的Unicode兼容性。在Windows上,它是16位宽的隐式UTF16编码(这是我当前的理解)。找出我们需要的编码Windows并以最灵活的方式处理它们。Unicode码总是在内部被优先考虑。是否支持Unicode盲文在Windows上的命令提示符下?当前单元测试输入数据为全部采用UTF-8编码。确定这是否是Windows上的问题。
  • 改进解析期间的错误报告:一些有用的诊断已经打印,但在许多其他情况下,解析器不会生成有用的错误消息。开始一首盲文音乐可能很难如果你不知道为什么BMC不接受它,那就从头开始。
  • 实现标准MIDI文件(SMF)写入:除了实时播放外,音乐乐谱也应该可以导出到磁盘上的MIDI文件,以便它们可以与其他程序一起播放或导入。注意,电流回放代码只是概念验证,需要更多的工作最好编写一些将bmc::midi::evenetqueue转换为一个合适的磁盘表示,以便在实时可以共享播放和文件导出。
  • 正确处理绑定注释回放:与原型一样,回放代码目前确实采用快捷方式。转换时的一个典型问题性能数据的注释材料是对(通常是直观的)如何演奏音乐的提示。铰接是一个(更高级的)实例这一点。一个更基本的是对联系的解释。如果一个音符与另一个音调绑定,则应该同时使用这两个音符添加了注释持续时间。目前,播放代码忽略了这一点播放并列音符,就像它们是两个独立的音符一样。这需要修复。请注意,关系可以跨越度量边界:一个度量末尾的注释可以绑定到下一个度量的第一个音符之一。
  • 设计一种方法来指定要回放的解析笔记材料的子集或导出。例如,用户可能希望从某个在多段音乐中测量,或只听某一根棍子(手)。
  • 设计处理展开的必要组件:布莱叶盲文音乐代码允许以更精细的粒度规范重复的注释材料视觉音乐符号所允许的方式。相似的符号可以用来重复完整的措施,特定的声音,甚至声音的一部分。布莱叶盲文重复可以用来表示任意范围测量的重复现有员工人数。这意味着我们必须处理这两种表达方式:有一个处理阶段,所有这些重复指令存在(一旦解析阶段成功),我们将希望展开给定的抽象语法树,这样我们就可以看到这些缩写实际上暗示了所有的音符。我们显然需要一个展开“视图”以导出到除布莱叶盲文音乐代码以外的任何其他代码,因为大多数其他格式似乎缺乏这些压缩功能。例如,在生成MIDI消息时,我们需要将所有缩写扩展为我们知道需要生成的注释。然而,LilyPond输入数据允许一种特殊的重复,基本上起到类似的作用如盲文音乐,即减少重复的音符材料。如果我们有机会到了LilyPond出口的阶段,我们可能想使用一些盲文作为提示重复以生成更多人类可读的LilyPond文件。
  • 可可港触摸:iOS可以按照预期处理Unicode盲文。它显示在屏幕上使用合适的字体,并与外部布莱叶盲文显示器配合使用好。考虑到这一点,建立一个通往Cocoa Touch的港口似乎是可行的。