{"id":23190579,"url":"https://github.com/mlang/bmc","last_synced_at":"2025-08-18T19:31:56.064Z","repository":{"id":49034826,"uuid":"1959138","full_name":"mlang/bmc","owner":"mlang","description":"Braille Music Compiler","archived":false,"fork":false,"pushed_at":"2020-02-27T10:08:38.000Z","size":27503,"stargazers_count":37,"open_issues_count":0,"forks_count":7,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-08-14T00:30:49.217Z","etag":null,"topics":["blind","braille","c-plus-plus","lilypond","music","transcription"],"latest_commit_sha":null,"homepage":"http://bmc.blind.guru/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mlang.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-06-27T08:16:48.000Z","updated_at":"2024-02-06T15:21:31.000Z","dependencies_parsed_at":"2022-09-08T14:32:30.137Z","dependency_job_id":null,"html_url":"https://github.com/mlang/bmc","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlang%2Fbmc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlang%2Fbmc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlang%2Fbmc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlang%2Fbmc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mlang","download_url":"https://codeload.github.com/mlang/bmc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230268715,"owners_count":18199806,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blind","braille","c-plus-plus","lilypond","music","transcription"],"created_at":"2024-12-18T12:14:59.657Z","updated_at":"2024-12-18T12:15:01.185Z","avatar_url":"https://github.com/mlang.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"=============================\nBMC -- Braille Music Compiler\n=============================\n\n.. image:: https://secure.travis-ci.org/mlang/bmc.svg?branch=master\n   :alt: Travis CI build status (Linux and Mac OS X)\n   :target: http://travis-ci.org/mlang/bmc\n\n.. image:: https://ci.appveyor.com/api/projects/status/17o8stcrhi3cy8bw?svg=true\n   :alt: AppVeyor CI build status (Windows)\n   :target: https://ci.appveyor.com/project/mlang/bmc\n\nBMC aims to become a system for parsing and generating braille music code.\n\nHistory\n=======\n\nA predecessor to this project is FreeDots_, a Java-based program for\nconverting MusicXML to Braille Music code, as well as offering\nplayback and some interactive editing capabilities.\n\n.. _FreeDots: http://code.google.com/p/freedots/\n\nFreeDots has been very helpful in providing a general understanding of the\nvarious aspects of braille music code.  However, it was only designed to cover\none way of conversion, namely from some music notation source (like MusicXML) to\nbraille music code.  A full system for working with braille music code should\neventually cover both directions.\n\n\nDependencies\n============\n\nBeing a C++ program, BMC naturally uses the Standard Template Library (STL).\n\nIn addition to that some Boost_ C++ Libraries are employed.\n\nThe MusicXML backend makes use of `CodeSynthesis XSD`_ to generate\nC++ bindings for MusicXML documents.\n\nThe graphical user interface is implemented on top of Qt.\n\n.. _Boost: http://www.boost.org/\n.. _CodeSynthesis XSD: https://www.codesynthesis.com/products/xsd/\n\nInstalling dependencies on Debian\n---------------------------------\n\nOn Debian GNU/Linux systems, you will need to install the following\ndependencies:\n\n.. code-block:: bash\n\n   sudo apt-get install cmake doxygen lib{boost-{program-options,test},fluidsynth,icu}-dev\n\nInstalling dependencies on Mac OS X\n-----------------------------------\n\nWe assume you have Xcode installed.  A nice package manager for Mac OS X is\n`Homebrew \u003chttps://brew.sh/\u003e`__.  If you don't have it installed yet,\nhere is how to do so:\n\n.. code-block:: bash\n\n   ruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\"\n\nIf you have the Homebrew package manager, run the following commands to get\nall dependencies required to build and run BMC:\n\n.. code-block:: bash\n\n   xcode-select --install\n   brew install cmake lame pkg-config python3 qt5 timidity xerces-c xsd\n   pip3 install sphinx\n   brew install caskroom/cask/brew-cask\n   brew cask install lilypond\n   brew install boost --with-python\n   brew install boost-python\n\nGetting the source\n==================\n\nYou need Git_ to retrieve the source repository.\n\n.. code-block:: bash\n\n   git clone --quiet https://github.com/mlang/bmc.git\n   git submodule --quiet update --init --recursive\n\n.. _Git: https://git-scm.com/\n\nRunning CMake\n=============\n\nYou can now run CMake to generate a build system for your platform:\n\n.. code-block:: bash\n\n   cd bmc\n   cmake .\n\nBuilding\n========\n\nUNIX and Mac OS X\n-----------------\n\nTo build BMC, run the following commands:\n\n.. code-block:: bash\n\n   make\n\nTo execute the test-suite, run:\n\n.. code-block:: bash\n\n   make check\n\nWindows\n-------\n\nAfter configuring via CMake, either open the Solution bmc in Visual Studio 14 (2015) or\nopen a \"MSBuild Command Prompt for VS2015\" and run the following:\n\n.. code-block:: console\n\n   msbuild bmc.sln /t:bmc-ui /p:Configuration=Release\n\n\nTODO\n====\n\n* Port current codebase to Windows:\n\n  * Figure out how to mimmick the FluidSynth functionality currently used under\n    Linux under Windows.  Ideally, create a common class for realtime MIDI\n    playback which is platform independent, and implement FluidSynth (Linux) and\n    Windows backends on top of that.\n  * Investigate encoding compatibility: BMC tries to be Unicode-based internally.\n    On UNIX, wchar_t is 32bit wide, which allos for full Unicode compatibility.\n    On Windows, it is 16bit wide and implicitly UTF16 coded (that is my current\n    understanding).  Figure out what encodings we are to expect on\n    Windows and deal with them in the most flexible way.  Unicode\n    is to be prefered internally, always.  Is Unicode Braille supported\n    on Windows in the command prompt?  Currently unit test input data is\n    all encoded with UTF-8.  Figure out if this is a problem on Windows.\n\n* Improve error reporting during parsing: Some useful diagnostics\n  are already printed, but in many other cases the parser does not produce\n  helpful error messages.  It can be quite hard to start a braille music piece\n  from scratch if you have no idea why it is not accepted by BMC.\n* Implement Standard MIDI File (SMF) writing: In addition to real-time playback,\n  musical scores should also be exportable to MIDI files on disk such that\n  they can be played or imported with other programs.  Note that the current\n  playback code is only a proof of concept, and needs more work.  Its probably\n  best to write something that converts a bmc::midi::evenet_queue to\n  a suitable on-disk representation so that common code between real-time\n  playback and file export can be shared.\n* Handle tied-note playback correctly: As usual with prototypes, the playback\n  code does take shortcuts currently.  One typical problem when converting\n  note material to performance data is the interpretation of (usually visual)\n  cues on how to play the music.  Articulations are one (more advanced) instance\n  of this.  A more fundamental one is the interpretation of ties.\n  If a note is tied to another one, it is supposed to be played with both\n  note durations added.  Currently, the playback code ignores this and\n  plays tied notes as if they are two separate notes.  This needs to be fixed.\n  Note that ties can cross measure boundaries: A note at the end of one measure\n  can be tied to one of the first notes of the next measure.\n* Devise a method to specify subsets of the parsed note material for playback\n  or export.  For instance, the user might want to play starting from a certain\n  measure, or only listen to a certain staff (hand) in multistaff music.\n* Design the necessary components to handle unrolling: Braille music code\n  allows for specification of repeated note material in a much more fine-grained\n  way as visual music notation allows for.  Simile signs can be used to repeat\n  complete measures, particular voices, or even parts of a voice.  Braille\n  repeats can be used to indicate repetition of an arbitrary range of measures\n  of the current staff.  This implies that we will have to deal with data in\n  both representations somehow: There is a stage of processing where all these\n  repetition instructions are present (once the parse stage succeds), and we\n  will want to unroll the given abstract syntax tree such that we get a view of\n  all the notes actually implied by these contractions.  We obviously need an\n  unrolled \"view\" for export to anything other then braille music code, since\n  most other formats seem to lack these compression fascilities.  For instance,\n  when generating MIDI messages, we need to have all contractions expanded such\n  that we know the notes we need to generate.  However, LilyPond input data\n  allows for a special kind of repeat which basically serves a similar purpose\n  as in braille music, namely to reduce duplicated note material.  If we ever\n  get to the stage of LilyPond export, we might want to use some of the braille\n  repeats as cues to generate more human readable LilyPond files.\n* Port Cococa Touch:\n  iOS handles Unicode Braille just as expected.  It is displayed on screen\n  with an appropriate font and works together with external braille displays as\n  well.  Given that, a port to Cocoa Touch seem quite feasable.\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmlang%2Fbmc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmlang%2Fbmc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmlang%2Fbmc/lists"}