Fork 0
Use Comment Macro syntax as a remote scripting language to control a Hog4 over the network via OSC.
Go to file
Kevin Matz 1c499437d7 ship an example config file 2022-05-13 00:01:26 -04:00
bacon log correct data type 2022-05-12 23:21:19 -04:00
examples re-organize file tree 2019-11-18 13:21:36 -05:00
.gitignore don't ship a server config file 2022-05-13 00:01:01 -04:00
LICENSE.md add license and manifest 2018-10-17 21:32:31 -04:00
MANIFEST.in update manifest 2019-11-18 13:21:47 -05:00
README.md key combo macros 2020-11-25 09:39:42 -05:00
__init__.py rename the config load function 2022-05-12 23:19:40 -04:00
bs.py rename the config load function 2022-05-12 23:19:40 -04:00
server.cfg don't ship a server config file 2022-05-13 00:01:01 -04:00
server.cfg.example ship an example config file 2022-05-13 00:01:26 -04:00
setup.py pep8 cleanups 2020-11-23 12:31:44 -05:00


Bacon Script

A theoretical exercise to control a Hog 4 via OSC, with comment macros.

The comment macro grammar described in CommentMacro.g4 is based upon the Hog 3.9 manual, Chapter 22.4. The python3 implementation in OscCommentMacroListener.py is based on Chapter 24.2 in the same manual.

Some macros are unsupported/unsupportable with this method. Some macro features, like timing, are not yet implemented. Refer to the Features table for specific notes.


Install Antlr4 for input and Python-OSC for output.

$ pip3 install antlr4-python3-runtime python-osc

Use git to retrieve a copy of the code.

$ git clone http://company235.com/git/kevin/baconscript.git
$ cd baconscript


Edit server.cfg to the correct values for your Hog4.

comment.py will accept macros on the command line, or will run an interactive prompt. Use the builtin command exit to quit the interactive prompt.

$ ./comment.py
Adding Hog device at net# 1
comment# GL1
Go on List 1
comment# exit

Run a baconscript file by passing the script file to comment.py as standard input.

$ ./comment.py < example.bs


You must also install the ANTLR tool. On a mac with homebrew, do:

$ brew install antlr

Update the lexer and parser for Python3

$ antlr -Dlanguage=Python3 CommentMacro.g4


Only features that are supported in both OSC and Comment Macros are able to be implemented in baconscript. This table lists all comment macros (as of 3.9) that are implemented in python.

Grammar Feature eg. Supported
fade times t5 no
multiple targets 1,2 Yes
ranges 1>4 Yes, intervals of 1
multiple macros GM1:GL3 Yes
network devices h4 Yes, H devices only
wait times WAIT1 BaconScript only; Continue script after n seconds.

Benefiting from the LL(*) parser provided by ANTLR, multiple targets and ranges may be combined ad infinitum. This is a known deviation from the Comment Macro syntax.

Standard Macros

Macro Function Supported Notes
GM Go Master Yes GOTO on current master only
HM Halt Master Yes
AM Assert Master Partial on current master only
RM Release Master Partial on current master only
RA Release All Yes
RO Release Others no
FM Fade Master Partial no times, no *
FGM Fade Grand Master Partial no times
CM Choose Master Yes
GL Go List Yes
HL Halt List Yes
AL Assert List no
RL Release List Yes
GB Go Batch no
HB Halt Batch no
AB Assert Batch no
RB Release Batch no
GS Go Scene Yes
HS Halt Scene Yes
AS Assert Scene no
RS Release Scene Yes
CP Change Page Partial only CP+ and CP-
RV Recall View no
ET Enable Timecode no
DT Disable Timecode no
OT Open Timecode Toolbar no
MS Midi String no possible?
MN Midi Note no
RN Reset Node no
GK Go Keystroke Macro Yes
HK Pause Keystroke Macro Yes
RK Stop Keystroke Macro Yes .

Additional Macros

BaconScript also supports several macros that aren't present on Hog4, but become possible/desirable when wrapping OSC.

Macro Function Notes
INT Select an Intensity Pallet keypress macro
POS Select a Position Pallet keypress macro
COLR Select a Colour Pallet keypress macro
BEAM Select a Beam Pallet keypress macro
WAIT Pause for n seconds
PASS Null instruction

Future Work

Pleas feel welcome to submit pull requests or patches that enable support for:

  • Sending target ranges as OSC arguments
  • Hog4 does not support multiple arguments to a single path.
  • Send multi-macro line as an OSC batch
  • HogOS 3.9 has a bug involving batches. Whereby only every-other member of the batch will be interpreted.
  • Timing on master fades