2
2
BMC -- Braille Music Compiler
3
3
=============================
4
4
5
- .. image :: https://secure.travis-ci.org/mlang/bmc.png?branch=master
5
+ .. image :: https://secure.travis-ci.org/mlang/bmc.svg?branch=master
6
+ :alt: Travis CI build status (Linux and Mac OS X)
6
7
:target: http://travis-ci.org/mlang/bmc
7
8
8
- BMC aims to become a system for parsing and generating braille music code.
9
+ .. image :: https://ci.appveyor.com/api/projects/status/17o8stcrhi3cy8bw?svg=true
10
+ :alt: AppVeyor CI build status (Windows)
11
+ :target: https://ci.appveyor.com/project/mlang/bmc
9
12
13
+ BMC aims to become a system for parsing and generating braille music code.
10
14
11
15
History
12
- -------
16
+ =======
13
17
14
18
A predecessor to this project is FreeDots _, a Java-based program for
15
- converting MusicXML Documents to Braille Music code, as well as offering
19
+ converting MusicXML to Braille Music code, as well as offering
16
20
playback and some interactive editing capabilities.
17
21
18
22
.. _FreeDots : http://code.google.com/p/freedots/
@@ -25,50 +29,36 @@ eventually cover both directions.
25
29
26
30
27
31
Dependencies
28
- ------------
32
+ ============
29
33
30
34
Being a C++ program, BMC naturally uses the Standard Template Library (STL).
31
35
32
36
In addition to that some Boost _ C++ Libraries are employed.
33
37
34
- .. _ Boost : http://www.boost.org/
35
-
38
+ The MusicXML backend makes use of ` CodeSynthesis XSD `_ to generate
39
+ C++ bindings for MusicXML documents.
36
40
37
- heterogeneous containers
38
- ------------------------
39
-
40
- A common problem arising in the sort of data structures required to represent
41
- parsed braille music is the heterogenuity of the underlying sequences
42
- of objects. Traditionally, virtual member functions and a common base class are
43
- used in C++ to implement a sequence of objects of varying purpose. However,
44
- this approach is rather error-prone and requires the differing object types to
45
- at least have something in common to allow for a meaningful interface.
46
- Fortunately, Boost offers a very elegant solution to this type of problem, the
47
- Boost.Variant discriminated union container class template. Boost.Variant is
48
- already implicitly used by Spirit to store alternative choices in the grammar.
49
- So it just falls naturally to use Boost.Variant for problems falling in the
50
- category of heterogeneous containers. Using Boost.Variant implies the visitor
51
- pattern is used to access the data structures. This is desireable because it
52
- results in type-safe code which eliminates a certain class of runtime bugs. It
53
- makes code a little bit more verbose to write, but for the better, actually.
41
+ The graphical user interface is implemented on top of Qt.
54
42
43
+ .. _Boost : http://www.boost.org/
44
+ .. _CodeSynthesis XSD : https://www.codesynthesis.com/products/xsd/
55
45
56
- Getting the source
57
- ------------------
46
+ Installing dependencies on Debian
47
+ ---------------------------------
58
48
59
- You need Git _ to retrieve the source repository.
49
+ On Debian GNU/Linux systems, you will need to install the following
50
+ dependencies:
60
51
61
52
.. code-block :: bash
62
53
63
- git clone --quiet https://github.com/mlang/bmc.git
64
- git submodule --quiet update --init --recursive
65
-
66
- .. _Git : https://git-scm.com/
54
+ sudo apt-get install cmake doxygen lib{boost-{program-options,test},fluidsynth,icu}-dev
67
55
68
- Building on Mac OS X
69
- --------------------
56
+ Installing dependencies on Mac OS X
57
+ -----------------------------------
70
58
71
- We assume you have Xcode installed. A nice package manager is Homebrew:
59
+ We assume you have Xcode installed. A nice package manager for Mac OS X is
60
+ `Homebrew <https://brew.sh/ >`__. If you don't have it installed yet,
61
+ here is how to do so:
72
62
73
63
.. code-block :: bash
74
64
@@ -87,43 +77,38 @@ all dependencies required to build and run BMC:
87
77
brew install boost --with-python
88
78
brew install boost-python
89
79
90
- You can now run CMake to generate a build system:
91
-
92
- .. code-block :: bash
93
-
94
- cd bmc
95
- cmake .
80
+ Getting the source
81
+ ==================
96
82
97
- When running the test suite, make sure you have a UTF-8 based locale:
83
+ You need Git _ to retrieve the source repository.
98
84
99
85
.. code-block :: bash
100
86
101
- export LANG=de_AT.UTF-8
102
- make check
103
-
104
- Build the command-line tool and the user interface:
87
+ git clone --quiet https://github.com/mlang/bmc.git
88
+ git submodule --quiet update --init --recursive
105
89
106
- .. code-block :: bash
90
+ .. _ Git : https://git-scm.com/
107
91
108
- make bmc bmc-ui
92
+ Running CMake
93
+ =============
109
94
110
- Building (on UNIX)
111
- ------------------
95
+ You can now run CMake to generate a build system for your platform:
112
96
113
- Compilation has only been tested with GCC 4.8 recently.
97
+ .. code-block :: bash
114
98
115
- On Debian GNU/Linux systems, you will need to install the following dependencies:
99
+ cd bmc
100
+ cmake .
116
101
117
- .. code-block :: bash
102
+ Building
103
+ ========
118
104
119
- sudo apt-get install cmake doxygen lib{boost-{program-options,test},fluidsynth,icu}-dev
105
+ UNIX and Mac OS X
106
+ -----------------
120
107
121
108
To build BMC, run the following commands:
122
109
123
110
.. code-block :: bash
124
111
125
- cd bmc
126
- cmake .
127
112
make
128
113
129
114
To execute the test-suite, run:
@@ -132,11 +117,10 @@ To execute the test-suite, run:
132
117
133
118
make check
134
119
120
+ Windows
121
+ -------
135
122
136
- Building (on Windows)
137
- ---------------------
138
-
139
- After configuring via cmake, either open the Solution bmc in VS2015 or
123
+ After configuring via CMake, either open the Solution bmc in Visual Studio 14 (2015) or
140
124
open a "MSBuild Command Prompt for VS2015" and run the following:
141
125
142
126
.. code-block :: console
@@ -145,7 +129,7 @@ open a "MSBuild Command Prompt for VS2015" and run the following:
145
129
146
130
147
131
TODO
148
- ----
132
+ ====
149
133
150
134
* Port current codebase to Windows:
151
135
0 commit comments