augene is an experimental compound music authoring toolchain that brings old-fashion MML (music macro language) compiler integrated into modern sequencer that is also used in DAWs. It is nothing but a proof of concept. There isn't even a room for improvement - it is just living in a wild.
You can also have a quick glance at the project by my slides for lightening talk at ADC 2019
It uses the following software and libraries behind:
The most difficult part for anyone but me is to learn how to use MML and compiler.
NOTE: before using augene, you most likely have to build things (explained in the next section).
launch Augene.exe
application. It is a cross-platform .NET desktop GUI application (actually not in this repository; it's ntractive
submodule).
By default those lists are actually empty. It's a screenshot of the app that has loaded sample data that makes use of Collective (bundled with Tracktion Waveform).
To use this app, there are couple of things to do - Configure the app. Namely paths to two external tools are needed:
The next step is to build a list of locally installed audio plugins. Begin with "Plugins" button to start the process.
Once you are done with above, then you're ready to use the app. You can open a *.tracktionedit
file and play it. Note that if you don't have the audio plugins specified in the edit file, you are unable to play it.
To compose your own music, create new audiograph and new MML for each list, which can be performed via each context menu. Then use "Compile" command from the main menu.
There are two repositories for this "augene" application. This repository only contains "augene-player" part of the entire system, which is a JUCE based C++ application. It is a typical JUCE application project so you can build it with the following steps:
AugenePlayer.jucer
, and save projects, or run Projucer --resave AugenePlayer.jucer
.Build/*
e.g. Build/LinuxMakefile
.For Linux environment there is a shorthand script build.sh
and for Mac environment there is build-osx.sh
(not actively maintained, so it might need some fixes from time to time). Since LV2 integration via lvtk/jlv2 is enabled, you'll need LV2 packages installed on MacOS too.
It was planned to be a console tool at first, but ended up to be a GUI app because we need audio and plugin configuration settings.
If you have VST2 SDK and would like to add support for VST2, open AugenePlayer.jucer in Projucer (and probably AudioPluginHost.jucer if you once tried to build it from build.sh) on Projucer and select juce_audio_processors
module and enable VST(2) there, then save project.
Another one is .NET/Xwt based GUI app/tool in ntractive repository.
Build Augene.exe
with external/ntracktive
submodule, by:
nuget restore external/ntractive/ntracktive.sln
msbuild external/ntractive/ntracktive.sln
You need Mono locally installed. .NET Core does not work there, because Xwt does not support .NET Core.
AugenePlayer is being supported on Android (most likely ongoing work). It is done via aap-juce project. Audio plugins must be indicated as AAP (there is no VST 2/3 or other plugin formats that can run on Android).
An augene project is a simple set of XML described in a project file which looks like this:
<AugeneProject xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Includes>
<Include Bank="1" Source="Banks/SfzBanks.augene" />
<Include Bank="2" Source="Banks/SF2Banks.augene" />
<Include Bank="3" Source="Banks/SurgeBanks.augene" />
</Includes>
<MasterPlugins>
<MasterPlugin>MasterPlugin1.filtergraph</MasterPlugin>
</MasterPlugins>
<AudioGraphs>
<AudioGraph Id="GrandPiano1" Source="sfizz_city_piano_1.filtergraph" />
</AudioGraphs>
<Tracks>
<AugeneTrack>
<Id>1</Id>
<AudioGraph>Unnamed.filtergraph</AudioGraph>
</AugeneTrack>
</Tracks>
<MmlFiles>
<MmlFile>foobar.mugene</MmlFile>
</MmlFiles>
<MmlStrings>
<MmlString>![CDATA[ 1 @0 V110 v100 o5 l8 cegcegeg > c1 ]]></MmlString>
</MmlStrings>
</AugeneProject>
Here is a list of elements:
Element | feature |
---|---|
AugeneProject | the root element |
Includes | container of Include elements. |
Include | include other project files. They can also be a bank list of AudioGraph. See description below. |
AudioGraphs | container of AudioGraph elements. |
AudioGraph | gives a filtergraph a name so that it can be referenced by AudioGraph element within AugeneTrack element. |
MasterPlugins | holds a list of master plugins |
MasterPlugin | specifies an AudioGraph file that is used as a master plugin |
Tracks | holds a list of tracks |
AugeneTrack | a track definition specifier which holds an Id and an AudioGraph file (so far only one plugin is specified. Rooms for improvements. |
MmlFiles | holds a list of MML files |
MmlFile | specifies an MML source file to be compiled and converted to the edit file. |
MmlStrings | holds a list of MML strings |
MmlString | specifies an MML string to be compiled and converted to the edit file. |
An Augene project can include other Augene project files using Include
element. It is useful to represent a bank of preset filtergraphs. On an Include
element, Bank
and BankMsb
attributes indicate bank select MSB, BankLsb
attribute indicates bank select LSB (Bank
is equivalent to BankMsb
here). Source
attribute indicates the included file path, relative to the including file path.
An AudioGraph
can be referenced by its Id
attribute, by (1) mugene MIDI track with INSTRUMENTNAME
meta event, or (2) AudioGraph
attribute on AugeneTrack
elements.
All tracks in either MML format (file or string) are converted into tracktionedit. Then audio graphs in the project are interpreted and converted to PLUGIN
element in tracktionedit and then for each defined track by Tracks
elements, if there is any graph whose Id
is identical to the track's AudioGraph
then the audio graph is attached to the track.
One thing to note is that while mugene supports track number in double (floating point number) SMF does not have "track numbers" and numbers are counted only by sequential index (0, 1, 2...), the mappings could be totally different. It is always to indicate audio graph by INSTRUMENTNAME meta event in mugene MML, or supplementally use AugeneTrack
's mappings.
If you are Tracktion Waveform user, you would like to examine the output *.tracktionedit
file with Waveform. To do so, you will have to manually create a tracktion project (it is a binary file that Augene.exe does not support generation) and let it point to the edit file. To make it happen, you will most likely have to name your *.augene
project file as (projectname) Edit 1.augene
, or rename your edit in the track directly to match your project file.
augene-player is released under the GPLv3 license.
ntractive is released under the MIT license.
There are couple of dependencies in this application: