├── .idea
├── .name
├── scopes
│ └── CORE.xml
├── vcs.xml
├── copyright
│ ├── profiles_settings.xml
│ └── GPLv3.xml
├── modules.xml
├── misc.xml
├── pymidicontrol.iml
└── compiler.xml
├── docs
└── __init__.py
├── avio
├── __init__.py
├── trigger.py
├── events.py
├── bpm.py
├── combotrigger.py
├── library.py
├── videomixer.py
├── midi.py
├── sequencer.py
├── controller.py
└── router.py
├── bitwig
└── 00149_MusicForAGamepad
│ ├── .bitwig-project
│ └── 00149_MusicForAGamepad.bwproject
├── test.gif
├── library
├── fonts
│ ├── 1015sn.ttf
│ ├── 3dlet.ttf
│ ├── Blox2.ttf
│ ├── ataxia.ttf
│ ├── b2sq.ttf
│ ├── bocuma.ttf
│ ├── bumped.ttf
│ ├── ccaps.ttf
│ ├── claw1.ttf
│ ├── claw2.ttf
│ ├── dented.ttf
│ ├── fascii.ttf
│ ├── gather.ttf
│ ├── graze.ttf
│ ├── grudge.ttf
│ ├── gyrose.ttf
│ ├── hassle.ttf
│ ├── hbevel.ttf
│ ├── hearts.ttf
│ ├── hyde.ttf
│ ├── ilits.ttf
│ ├── imposs.ttf
│ ├── jagged.ttf
│ ├── janken.ttf
│ ├── jargon.ttf
│ ├── jasper.ttf
│ ├── jekyll.ttf
│ ├── knot.ttf
│ ├── loopy.ttf
│ ├── lucid.ttf
│ ├── lucid2.ttf
│ ├── lucido.ttf
│ ├── lynx.ttf
│ ├── mincer.ttf
│ ├── neural.ttf
│ ├── notqr.ttf
│ ├── pdark.ttf
│ ├── pseudo.ttf
│ ├── qlumpy.ttf
│ ├── queasy.ttf
│ ├── reason.ttf
│ ├── revert.ttf
│ ├── rotund.ttf
│ ├── ryuker.ttf
│ ├── tetri.ttf
│ ├── thwart.ttf
│ ├── tonik.ttf
│ ├── united.ttf
│ ├── wager.ttf
│ ├── waver.ttf
│ ├── weaver.ttf
│ ├── wobbly.ttf
│ ├── xhume.ttf
│ ├── yonder.ttf
│ ├── zenith.ttf
│ ├── zoidal.ttf
│ ├── 1015snr.ttf
│ ├── 18holes.ttf
│ ├── 36daysag.ttf
│ ├── 36daythk.ttf
│ ├── 4shadow.ttf
│ ├── 4shadowo.ttf
│ ├── 8bitlim.ttf
│ ├── 8bitlimo.ttf
│ ├── 8bitlimr.ttf
│ ├── 8blimro.ttf
│ ├── 90stars.ttf
│ ├── Condui2i.ttf
│ ├── Splatz2.ttf
│ ├── Strande2.ttf
│ ├── Swirled2.ttf
│ ├── Tragic2.ttf
│ ├── Unxgala.ttf
│ ├── Unxgalaw.ttf
│ ├── Unxgalo.ttf
│ ├── Unxgalwo.ttf
│ ├── acidrefl.ttf
│ ├── acknowtt.ttf
│ ├── aescrawl.ttf
│ ├── aesymatt.ttf
│ ├── aftermat.ttf
│ ├── alphbeta.ttf
│ ├── amalgama.ttf
│ ├── amalgamo.ttf
│ ├── amplitud.ttf
│ ├── arthriti.ttf
│ ├── aspartam.ttf
│ ├── ataxiao.ttf
│ ├── automati.ttf
│ ├── b2sqol1.ttf
│ ├── b2sqol2.ttf
│ ├── backlash.ttf
│ ├── bandless.ttf
│ ├── bandmess.ttf
│ ├── bandwdth.ttf
│ ├── bendable.ttf
│ ├── bewilder.ttf
│ ├── bewildet.ttf
│ ├── bin01st.ttf
│ ├── binaryt.ttf
│ ├── binaryx.ttf
│ ├── binchrt.ttf
│ ├── binx01s.ttf
│ ├── binxchr.ttf
│ ├── bitbttf.ttf
│ ├── bknuckss.ttf
│ ├── bknuckst.ttf
│ ├── blackoni.ttf
│ ├── bleakseg.ttf
│ ├── bloktilt.ttf
│ ├── blonibld.ttf
│ ├── blonirex.ttf
│ ├── bobcayge.ttf
│ ├── bobcaygr.ttf
│ ├── bocumaad.ttf
│ ├── bocumaba.ttf
│ ├── bocumade.ttf
│ ├── bocumang.ttf
│ ├── brassknu.ttf
│ ├── brigadom.ttf
│ ├── brigadow.ttf
│ ├── candystr.ttf
│ ├── ccapshad.ttf
│ ├── chemrea.ttf
│ ├── chemreb.ttf
│ ├── chintzy.ttf
│ ├── chintzys.ttf
│ ├── chumbly.ttf
│ ├── circulat.ttf
│ ├── clasict1.ttf
│ ├── clasict2.ttf
│ ├── cleavttr.ttf
│ ├── codelife.ttf
│ ├── collecro.ttf
│ ├── collecrs.ttf
│ ├── collecto.ttf
│ ├── collects.ttf
│ ├── combusii.ttf
│ ├── combuspl.ttf
│ ├── combusti.ttf
│ ├── combustt.ttf
│ ├── combustw.ttf
│ ├── compc1o.ttf
│ ├── compc1s.ttf
│ ├── compc2o.ttf
│ ├── compc2s.ttf
│ ├── compc3o.ttf
│ ├── compc3s.ttf
│ ├── conduit.ttf
│ ├── conduit2.ttf
│ ├── crackdr2.ttf
│ ├── crkdownr.ttf
│ ├── crkdwno1.ttf
│ ├── crkdwno2.ttf
│ ├── darkside.ttf
│ ├── dashdot.ttf
│ ├── dastardl.ttf
│ ├── dblayer1.ttf
│ ├── dblayer2.ttf
│ ├── dblayer3.ttf
│ ├── dblayer4.ttf
│ ├── dblbogey.ttf
│ ├── decrepit.ttf
│ ├── dephun2.ttf
│ ├── detonate.ttf
│ ├── discorda.ttf
│ ├── draggle.ttf
│ ├── draggleo.ttf
│ ├── dynamic.ttf
│ ├── dyphusio.ttf
│ ├── dystorqu.ttf
│ ├── ecliptic.ttf
│ ├── edundot.ttf
│ ├── edunline.ttf
│ ├── elsewhe2.ttf
│ ├── elsewher.ttf
│ ├── embosst1.ttf
│ ├── embosst2.ttf
│ ├── embosst3.ttf
│ ├── encappln.ttf
│ ├── encapsul.ttf
│ ├── entangle.ttf
│ ├── enthuse.ttf
│ ├── enthuses.ttf
│ ├── entlayra.ttf
│ ├── entlayrb.ttf
│ ├── entplain.ttf
│ ├── euphor3d.ttf
│ ├── euphoric.ttf
│ ├── exagger8.ttf
│ ├── extracti.ttf
│ ├── falsepos.ttf
│ ├── falsposr.ttf
│ ├── fasciicr.ttf
│ ├── fasciisc.ttf
│ ├── fasciism.ttf
│ ├── fasciitw.ttf
│ ├── fauxsnow.ttf
│ ├── fbsbltc.ttf
│ ├── fbsbltc2.ttf
│ ├── fidgety.ttf
│ ├── flipside.ttf
│ ├── forcible.ttf
│ ├── freaktur.ttf
│ ├── frizzed.ttf
│ ├── fullcomp.ttf
│ ├── galapogo.ttf
│ ├── galvaniz.ttf
│ ├── gaposiso.ttf
│ ├── gaposiss.ttf
│ ├── gasping.ttf
│ ├── gathrgap.ttf
│ ├── genotyph.ttf
│ ├── genotyps.ttf
│ ├── genotyrh.ttf
│ ├── genotyrs.ttf
│ ├── gesture.ttf
│ ├── gestures.ttf
│ ├── gesturet.ttf
│ ├── gesturts.ttf
│ ├── gosebmp2.ttf
│ ├── gosebmps.ttf
│ ├── gr8higts.ttf
│ ├── granular.ttf
│ ├── grapple.ttf
│ ├── graveyrd.ttf
│ ├── graviseg.ttf
│ ├── gravitat.ttf
│ ├── grotesq.ttf
│ ├── grudge2.ttf
│ ├── gyneric.ttf
│ ├── gyneric3.ttf
│ ├── gyroresh.ttf
│ ├── gyrosesq.ttf
│ ├── hackslsh.ttf
│ ├── hairball.ttf
│ ├── handmedo.ttf
│ ├── handmeds.ttf
│ ├── hdmaker.ttf
│ ├── hillock.ttf
│ ├── homespun.ttf
│ ├── hyperion.ttf
│ ├── inertia.ttf
│ ├── inevitab.ttf
│ ├── inkswipe.ttf
│ ├── inktank.ttf
│ ├── intersc.ttf
│ ├── intersec.ttf
│ ├── interso.ttf
│ ├── irritate.ttf
│ ├── jaspers.ttf
│ ├── jawbhard.ttf
│ ├── jawbreak.ttf
│ ├── jawbrko1.ttf
│ ├── jawbrko2.ttf
│ ├── jeopardi.ttf
│ ├── jeopardt.ttf
│ ├── jmacscrl.ttf
│ ├── joltcaff.ttf
│ ├── jupiterc.ttf
│ ├── kaliberr.ttf
│ ├── kalibers.ttf
│ ├── kaliberx.ttf
│ ├── kataacti.ttf
│ ├── katainac.ttf
│ ├── keyrialt.ttf
│ ├── keyridge.ttf
│ ├── kickflip.ttf
│ ├── kinkaid.ttf
│ ├── kirbyss.ttf
│ ├── konecto1.ttf
│ ├── konecto2.ttf
│ ├── konector.ttf
│ ├── koneerie.ttf
│ ├── kurvatur.ttf
│ ├── lakeshor.ttf
│ ├── lamebrai.ttf
│ ├── larkspur.ttf
│ ├── lethargi.ttf
│ ├── licostrg.ttf
│ ├── lightout.ttf
│ ├── lineding.ttf
│ ├── lowdown.ttf
│ ├── lucid2o.ttf
│ ├── lyneous.ttf
│ ├── lyneousl.ttf
│ ├── macropsi.ttf
│ ├── madscrwl.ttf
│ ├── mima4x4i.ttf
│ ├── mima4x4o.ttf
│ ├── mimaalt1.ttf
│ ├── mimaalt2.ttf
│ ├── mimafuse.ttf
│ ├── minikott.ttf
│ ├── minikstt.ttf
│ ├── mishmash.ttf
│ ├── mobilize.ttf
│ ├── monkphon.ttf
│ ├── moronmis.ttf
│ ├── mysteron.ttf
│ ├── nanosecw.ttf
│ ├── naughts.ttf
│ ├── neuralol.ttf
│ ├── nominal.ttf
│ ├── nostalgi.ttf
│ ├── nsecthck.ttf
│ ├── nsecthin.ttf
│ ├── nucleus.ttf
│ ├── numskull.ttf
│ ├── nymonak.ttf
│ ├── obloquyo.ttf
│ ├── obloquys.ttf
│ ├── obstacle.ttf
│ ├── obstacll.ttf
│ ├── offkiltl.ttf
│ ├── offkiltr.ttf
│ ├── opiated.ttf
│ ├── orbicula.ttf
│ ├── outersid.ttf
│ ├── overhead.ttf
│ ├── persuasi.ttf
│ ├── phorfeir.ttf
│ ├── phorfeis.ttf
│ ├── pincers.ttf
│ ├── pindown.ttf
│ ├── pindownp.ttf
│ ├── pindwnx.ttf
│ ├── pindwnxp.ttf
│ ├── pixlkrud.ttf
│ ├── plasdrip.ttf
│ ├── plasdrpe.ttf
│ ├── pneumati.ttf
│ ├── pneutall.ttf
│ ├── pneuwide.ttf
│ ├── powdwrk5.ttf
│ ├── qbicle1.ttf
│ ├── qbicle2.ttf
│ ├── qbicle3.ttf
│ ├── qbicle4.ttf
│ ├── qlumpysh.ttf
│ ├── quacksal.ttf
│ ├── quadrcal.ttf
│ ├── quadrtic.ttf
│ ├── quandary.ttf
│ ├── quantfh.ttf
│ ├── quantflt.ttf
│ ├── quantrh.ttf
│ ├── quantrnd.ttf
│ ├── quanttap.ttf
│ ├── quaranti.ttf
│ ├── quarthck.ttf
│ ├── quarthin.ttf
│ ├── queasyol.ttf
│ ├── quillexo.ttf
│ ├── quillexs.ttf
│ ├── rambling.ttf
│ ├── ravaged2.ttf
│ ├── ravcater.ttf
│ ├── raydiat2.ttf
│ ├── reasonsh.ttf
│ ├── redundan.ttf
│ ├── regenera.ttf
│ ├── registry.ttf
│ ├── rehearsc.ttf
│ ├── rehearso.ttf
│ ├── rehearsp.ttf
│ ├── relapse.ttf
│ ├── revertro.ttf
│ ├── rotundo.ttf
│ ├── roughday.ttf
│ ├── sarcasti.ttf
│ ├── saunder.ttf
│ ├── scalines.ttf
│ ├── sclnmaze.ttf
│ ├── sequence.ttf
│ ├── setbackt.ttf
│ ├── sideways.ttf
│ ├── simplto2.ttf
│ ├── skullcap.ttf
│ ├── slender.ttf
│ ├── slenderw.ttf
│ ├── slenmini.ttf
│ ├── slenstub.ttf
│ ├── snailets.ttf
│ ├── spaciouo.ttf
│ ├── spacious.ttf
│ ├── spastic2.ttf
│ ├── spheroid.ttf
│ ├── spheroix.ttf
│ ├── sqroute.ttf
│ ├── stagnati.ttf
│ ├── supragc.ttf
│ ├── supragl.ttf
│ ├── symmetry.ttf
│ ├── syndrome.ttf
│ ├── syntheti.ttf
│ ├── syracuse.ttf
│ ├── tearful.ttf
│ ├── techniqo.ttf
│ ├── techniqu.ttf
│ ├── techover.ttf
│ ├── telephas.ttf
│ ├── tsextolo.ttf
│ ├── tsextols.ttf
│ ├── turmoil.ttf
│ ├── ubiquity.ttf
│ ├── unanimo.ttf
│ ├── unanimoi.ttf
│ ├── underscr.ttf
│ ├── underwhe.ttf
│ ├── underwho.ttf
│ ├── undrscr2.ttf
│ ├── unlearn2.ttf
│ ├── unlearne.ttf
│ ├── unrespon.ttf
│ ├── upheavtt.ttf
│ ├── upraise.ttf
│ ├── urcompi.ttf
│ ├── urcompo.ttf
│ ├── vacantz.ttf
│ ├── vanished.ttf
│ ├── vantage.ttf
│ ├── variance.ttf
│ ├── vertigo.ttf
│ ├── vertigo2.ttf
│ ├── vertigup.ttf
│ ├── vertiup2.ttf
│ ├── vigilanc.ttf
│ ├── vindicti.ttf
│ ├── visitor1.ttf
│ ├── visitor2.ttf
│ ├── volatil1.ttf
│ ├── volatil2.ttf
│ ├── wagerlos.ttf
│ ├── wagerwon.ttf
│ ├── wayward.ttf
│ ├── waywards.ttf
│ ├── weatherd.ttf
│ ├── weathers.ttf
│ ├── whatever.ttf
│ ├── whipsnap.ttf
│ ├── wigsquig.ttf
│ ├── wincing.ttf
│ ├── withstan.ttf
│ ├── wyvernwi.ttf
│ ├── wyvernww.ttf
│ ├── xeroxmal.ttf
│ ├── xipital.ttf
│ ├── xmaslght.ttf
│ ├── xtrusion.ttf
│ ├── yearend.ttf
│ ├── yesterda.ttf
│ ├── yielding.ttf
│ ├── yoshisst.ttf
│ ├── yourcomp.ttf
│ ├── zeldadxt.ttf
│ ├── zephyrea.ttf
│ ├── zephyreg.ttf
│ ├── zerovelo.ttf
│ ├── zirccube.ttf
│ ├── zirconia.ttf
│ ├── zoetrope.ttf
│ ├── zurklezo.ttf
│ ├── zurklezs.ttf
│ └── editundo.ttf
└── matelight
│ └── 40x16
│ └── gif
│ ├── 34_5.gif
│ ├── 6183.gif
│ ├── Roots.gif
│ ├── Scene.gif
│ ├── laser2.gif
│ ├── ElectronSpin.gif
│ ├── OmegaPointWC.gif
│ ├── Unbenannt-1.gif
│ ├── FlowerOfLifeV2.gif
│ ├── RiemannFlower.gif
│ ├── SteinerChain2.gif
│ ├── SteinerOwl_oo.gif
│ ├── Triangulation.gif
│ ├── Triangulation2.gif
│ ├── QuantumTunnelv3_v23.gif
│ ├── RiemannRadio_I2_P+1.gif
│ ├── EveryWallIsADoorFAniC.gif
│ ├── FlowerOfLifeV2colalt.gif
│ ├── IndrasNet_HiTech_gif1.gif
│ └── 8a2bd6b580bc42799a6dd01c765acc8aed294516.gif
├── avio-legacy
├── avio-nogui
├── splash.py
├── component.py
├── install
├── avio_standalone
├── camera.py
├── matelight.py
├── logo.svg
├── app.py
└── logger.py
├── images
├── startscreen.png
└── startscreen_matelight.png
├── requirements.txt
├── .gitignore
├── frontend
├── avio.config.js
├── avio.module.js
├── avio
│ └── avio.scss
└── assets
│ └── avio_menu_logo.svg
├── README.rst
└── setup.py
/.idea/.name:
--------------------------------------------------------------------------------
1 | AVIO
--------------------------------------------------------------------------------
/docs/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/avio/__init__.py:
--------------------------------------------------------------------------------
1 | __author__ = 'riot'
2 |
--------------------------------------------------------------------------------
/bitwig/00149_MusicForAGamepad/.bitwig-project:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/test.gif
--------------------------------------------------------------------------------
/library/fonts/1015sn.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/1015sn.ttf
--------------------------------------------------------------------------------
/library/fonts/3dlet.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/3dlet.ttf
--------------------------------------------------------------------------------
/library/fonts/Blox2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/Blox2.ttf
--------------------------------------------------------------------------------
/library/fonts/ataxia.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/ataxia.ttf
--------------------------------------------------------------------------------
/library/fonts/b2sq.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/b2sq.ttf
--------------------------------------------------------------------------------
/library/fonts/bocuma.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bocuma.ttf
--------------------------------------------------------------------------------
/library/fonts/bumped.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bumped.ttf
--------------------------------------------------------------------------------
/library/fonts/ccaps.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/ccaps.ttf
--------------------------------------------------------------------------------
/library/fonts/claw1.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/claw1.ttf
--------------------------------------------------------------------------------
/library/fonts/claw2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/claw2.ttf
--------------------------------------------------------------------------------
/library/fonts/dented.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/dented.ttf
--------------------------------------------------------------------------------
/library/fonts/fascii.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/fascii.ttf
--------------------------------------------------------------------------------
/library/fonts/gather.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gather.ttf
--------------------------------------------------------------------------------
/library/fonts/graze.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/graze.ttf
--------------------------------------------------------------------------------
/library/fonts/grudge.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/grudge.ttf
--------------------------------------------------------------------------------
/library/fonts/gyrose.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gyrose.ttf
--------------------------------------------------------------------------------
/library/fonts/hassle.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/hassle.ttf
--------------------------------------------------------------------------------
/library/fonts/hbevel.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/hbevel.ttf
--------------------------------------------------------------------------------
/library/fonts/hearts.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/hearts.ttf
--------------------------------------------------------------------------------
/library/fonts/hyde.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/hyde.ttf
--------------------------------------------------------------------------------
/library/fonts/ilits.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/ilits.ttf
--------------------------------------------------------------------------------
/library/fonts/imposs.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/imposs.ttf
--------------------------------------------------------------------------------
/library/fonts/jagged.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/jagged.ttf
--------------------------------------------------------------------------------
/library/fonts/janken.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/janken.ttf
--------------------------------------------------------------------------------
/library/fonts/jargon.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/jargon.ttf
--------------------------------------------------------------------------------
/library/fonts/jasper.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/jasper.ttf
--------------------------------------------------------------------------------
/library/fonts/jekyll.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/jekyll.ttf
--------------------------------------------------------------------------------
/library/fonts/knot.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/knot.ttf
--------------------------------------------------------------------------------
/library/fonts/loopy.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/loopy.ttf
--------------------------------------------------------------------------------
/library/fonts/lucid.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/lucid.ttf
--------------------------------------------------------------------------------
/library/fonts/lucid2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/lucid2.ttf
--------------------------------------------------------------------------------
/library/fonts/lucido.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/lucido.ttf
--------------------------------------------------------------------------------
/library/fonts/lynx.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/lynx.ttf
--------------------------------------------------------------------------------
/library/fonts/mincer.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/mincer.ttf
--------------------------------------------------------------------------------
/library/fonts/neural.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/neural.ttf
--------------------------------------------------------------------------------
/library/fonts/notqr.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/notqr.ttf
--------------------------------------------------------------------------------
/library/fonts/pdark.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/pdark.ttf
--------------------------------------------------------------------------------
/library/fonts/pseudo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/pseudo.ttf
--------------------------------------------------------------------------------
/library/fonts/qlumpy.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/qlumpy.ttf
--------------------------------------------------------------------------------
/library/fonts/queasy.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/queasy.ttf
--------------------------------------------------------------------------------
/library/fonts/reason.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/reason.ttf
--------------------------------------------------------------------------------
/library/fonts/revert.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/revert.ttf
--------------------------------------------------------------------------------
/library/fonts/rotund.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/rotund.ttf
--------------------------------------------------------------------------------
/library/fonts/ryuker.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/ryuker.ttf
--------------------------------------------------------------------------------
/library/fonts/tetri.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/tetri.ttf
--------------------------------------------------------------------------------
/library/fonts/thwart.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/thwart.ttf
--------------------------------------------------------------------------------
/library/fonts/tonik.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/tonik.ttf
--------------------------------------------------------------------------------
/library/fonts/united.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/united.ttf
--------------------------------------------------------------------------------
/library/fonts/wager.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/wager.ttf
--------------------------------------------------------------------------------
/library/fonts/waver.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/waver.ttf
--------------------------------------------------------------------------------
/library/fonts/weaver.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/weaver.ttf
--------------------------------------------------------------------------------
/library/fonts/wobbly.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/wobbly.ttf
--------------------------------------------------------------------------------
/library/fonts/xhume.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/xhume.ttf
--------------------------------------------------------------------------------
/library/fonts/yonder.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/yonder.ttf
--------------------------------------------------------------------------------
/library/fonts/zenith.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/zenith.ttf
--------------------------------------------------------------------------------
/library/fonts/zoidal.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/zoidal.ttf
--------------------------------------------------------------------------------
/library/fonts/1015snr.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/1015snr.ttf
--------------------------------------------------------------------------------
/library/fonts/18holes.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/18holes.ttf
--------------------------------------------------------------------------------
/library/fonts/36daysag.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/36daysag.ttf
--------------------------------------------------------------------------------
/library/fonts/36daythk.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/36daythk.ttf
--------------------------------------------------------------------------------
/library/fonts/4shadow.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/4shadow.ttf
--------------------------------------------------------------------------------
/library/fonts/4shadowo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/4shadowo.ttf
--------------------------------------------------------------------------------
/library/fonts/8bitlim.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/8bitlim.ttf
--------------------------------------------------------------------------------
/library/fonts/8bitlimo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/8bitlimo.ttf
--------------------------------------------------------------------------------
/library/fonts/8bitlimr.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/8bitlimr.ttf
--------------------------------------------------------------------------------
/library/fonts/8blimro.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/8blimro.ttf
--------------------------------------------------------------------------------
/library/fonts/90stars.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/90stars.ttf
--------------------------------------------------------------------------------
/library/fonts/Condui2i.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/Condui2i.ttf
--------------------------------------------------------------------------------
/library/fonts/Splatz2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/Splatz2.ttf
--------------------------------------------------------------------------------
/library/fonts/Strande2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/Strande2.ttf
--------------------------------------------------------------------------------
/library/fonts/Swirled2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/Swirled2.ttf
--------------------------------------------------------------------------------
/library/fonts/Tragic2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/Tragic2.ttf
--------------------------------------------------------------------------------
/library/fonts/Unxgala.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/Unxgala.ttf
--------------------------------------------------------------------------------
/library/fonts/Unxgalaw.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/Unxgalaw.ttf
--------------------------------------------------------------------------------
/library/fonts/Unxgalo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/Unxgalo.ttf
--------------------------------------------------------------------------------
/library/fonts/Unxgalwo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/Unxgalwo.ttf
--------------------------------------------------------------------------------
/library/fonts/acidrefl.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/acidrefl.ttf
--------------------------------------------------------------------------------
/library/fonts/acknowtt.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/acknowtt.ttf
--------------------------------------------------------------------------------
/library/fonts/aescrawl.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/aescrawl.ttf
--------------------------------------------------------------------------------
/library/fonts/aesymatt.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/aesymatt.ttf
--------------------------------------------------------------------------------
/library/fonts/aftermat.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/aftermat.ttf
--------------------------------------------------------------------------------
/library/fonts/alphbeta.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/alphbeta.ttf
--------------------------------------------------------------------------------
/library/fonts/amalgama.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/amalgama.ttf
--------------------------------------------------------------------------------
/library/fonts/amalgamo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/amalgamo.ttf
--------------------------------------------------------------------------------
/library/fonts/amplitud.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/amplitud.ttf
--------------------------------------------------------------------------------
/library/fonts/arthriti.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/arthriti.ttf
--------------------------------------------------------------------------------
/library/fonts/aspartam.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/aspartam.ttf
--------------------------------------------------------------------------------
/library/fonts/ataxiao.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/ataxiao.ttf
--------------------------------------------------------------------------------
/library/fonts/automati.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/automati.ttf
--------------------------------------------------------------------------------
/library/fonts/b2sqol1.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/b2sqol1.ttf
--------------------------------------------------------------------------------
/library/fonts/b2sqol2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/b2sqol2.ttf
--------------------------------------------------------------------------------
/library/fonts/backlash.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/backlash.ttf
--------------------------------------------------------------------------------
/library/fonts/bandless.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bandless.ttf
--------------------------------------------------------------------------------
/library/fonts/bandmess.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bandmess.ttf
--------------------------------------------------------------------------------
/library/fonts/bandwdth.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bandwdth.ttf
--------------------------------------------------------------------------------
/library/fonts/bendable.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bendable.ttf
--------------------------------------------------------------------------------
/library/fonts/bewilder.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bewilder.ttf
--------------------------------------------------------------------------------
/library/fonts/bewildet.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bewildet.ttf
--------------------------------------------------------------------------------
/library/fonts/bin01st.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bin01st.ttf
--------------------------------------------------------------------------------
/library/fonts/binaryt.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/binaryt.ttf
--------------------------------------------------------------------------------
/library/fonts/binaryx.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/binaryx.ttf
--------------------------------------------------------------------------------
/library/fonts/binchrt.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/binchrt.ttf
--------------------------------------------------------------------------------
/library/fonts/binx01s.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/binx01s.ttf
--------------------------------------------------------------------------------
/library/fonts/binxchr.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/binxchr.ttf
--------------------------------------------------------------------------------
/library/fonts/bitbttf.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bitbttf.ttf
--------------------------------------------------------------------------------
/library/fonts/bknuckss.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bknuckss.ttf
--------------------------------------------------------------------------------
/library/fonts/bknuckst.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bknuckst.ttf
--------------------------------------------------------------------------------
/library/fonts/blackoni.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/blackoni.ttf
--------------------------------------------------------------------------------
/library/fonts/bleakseg.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bleakseg.ttf
--------------------------------------------------------------------------------
/library/fonts/bloktilt.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bloktilt.ttf
--------------------------------------------------------------------------------
/library/fonts/blonibld.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/blonibld.ttf
--------------------------------------------------------------------------------
/library/fonts/blonirex.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/blonirex.ttf
--------------------------------------------------------------------------------
/library/fonts/bobcayge.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bobcayge.ttf
--------------------------------------------------------------------------------
/library/fonts/bobcaygr.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bobcaygr.ttf
--------------------------------------------------------------------------------
/library/fonts/bocumaad.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bocumaad.ttf
--------------------------------------------------------------------------------
/library/fonts/bocumaba.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bocumaba.ttf
--------------------------------------------------------------------------------
/library/fonts/bocumade.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bocumade.ttf
--------------------------------------------------------------------------------
/library/fonts/bocumang.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/bocumang.ttf
--------------------------------------------------------------------------------
/library/fonts/brassknu.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/brassknu.ttf
--------------------------------------------------------------------------------
/library/fonts/brigadom.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/brigadom.ttf
--------------------------------------------------------------------------------
/library/fonts/brigadow.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/brigadow.ttf
--------------------------------------------------------------------------------
/library/fonts/candystr.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/candystr.ttf
--------------------------------------------------------------------------------
/library/fonts/ccapshad.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/ccapshad.ttf
--------------------------------------------------------------------------------
/library/fonts/chemrea.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/chemrea.ttf
--------------------------------------------------------------------------------
/library/fonts/chemreb.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/chemreb.ttf
--------------------------------------------------------------------------------
/library/fonts/chintzy.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/chintzy.ttf
--------------------------------------------------------------------------------
/library/fonts/chintzys.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/chintzys.ttf
--------------------------------------------------------------------------------
/library/fonts/chumbly.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/chumbly.ttf
--------------------------------------------------------------------------------
/library/fonts/circulat.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/circulat.ttf
--------------------------------------------------------------------------------
/library/fonts/clasict1.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/clasict1.ttf
--------------------------------------------------------------------------------
/library/fonts/clasict2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/clasict2.ttf
--------------------------------------------------------------------------------
/library/fonts/cleavttr.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/cleavttr.ttf
--------------------------------------------------------------------------------
/library/fonts/codelife.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/codelife.ttf
--------------------------------------------------------------------------------
/library/fonts/collecro.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/collecro.ttf
--------------------------------------------------------------------------------
/library/fonts/collecrs.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/collecrs.ttf
--------------------------------------------------------------------------------
/library/fonts/collecto.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/collecto.ttf
--------------------------------------------------------------------------------
/library/fonts/collects.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/collects.ttf
--------------------------------------------------------------------------------
/library/fonts/combusii.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/combusii.ttf
--------------------------------------------------------------------------------
/library/fonts/combuspl.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/combuspl.ttf
--------------------------------------------------------------------------------
/library/fonts/combusti.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/combusti.ttf
--------------------------------------------------------------------------------
/library/fonts/combustt.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/combustt.ttf
--------------------------------------------------------------------------------
/library/fonts/combustw.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/combustw.ttf
--------------------------------------------------------------------------------
/library/fonts/compc1o.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/compc1o.ttf
--------------------------------------------------------------------------------
/library/fonts/compc1s.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/compc1s.ttf
--------------------------------------------------------------------------------
/library/fonts/compc2o.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/compc2o.ttf
--------------------------------------------------------------------------------
/library/fonts/compc2s.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/compc2s.ttf
--------------------------------------------------------------------------------
/library/fonts/compc3o.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/compc3o.ttf
--------------------------------------------------------------------------------
/library/fonts/compc3s.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/compc3s.ttf
--------------------------------------------------------------------------------
/library/fonts/conduit.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/conduit.ttf
--------------------------------------------------------------------------------
/library/fonts/conduit2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/conduit2.ttf
--------------------------------------------------------------------------------
/library/fonts/crackdr2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/crackdr2.ttf
--------------------------------------------------------------------------------
/library/fonts/crkdownr.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/crkdownr.ttf
--------------------------------------------------------------------------------
/library/fonts/crkdwno1.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/crkdwno1.ttf
--------------------------------------------------------------------------------
/library/fonts/crkdwno2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/crkdwno2.ttf
--------------------------------------------------------------------------------
/library/fonts/darkside.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/darkside.ttf
--------------------------------------------------------------------------------
/library/fonts/dashdot.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/dashdot.ttf
--------------------------------------------------------------------------------
/library/fonts/dastardl.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/dastardl.ttf
--------------------------------------------------------------------------------
/library/fonts/dblayer1.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/dblayer1.ttf
--------------------------------------------------------------------------------
/library/fonts/dblayer2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/dblayer2.ttf
--------------------------------------------------------------------------------
/library/fonts/dblayer3.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/dblayer3.ttf
--------------------------------------------------------------------------------
/library/fonts/dblayer4.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/dblayer4.ttf
--------------------------------------------------------------------------------
/library/fonts/dblbogey.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/dblbogey.ttf
--------------------------------------------------------------------------------
/library/fonts/decrepit.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/decrepit.ttf
--------------------------------------------------------------------------------
/library/fonts/dephun2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/dephun2.ttf
--------------------------------------------------------------------------------
/library/fonts/detonate.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/detonate.ttf
--------------------------------------------------------------------------------
/library/fonts/discorda.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/discorda.ttf
--------------------------------------------------------------------------------
/library/fonts/draggle.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/draggle.ttf
--------------------------------------------------------------------------------
/library/fonts/draggleo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/draggleo.ttf
--------------------------------------------------------------------------------
/library/fonts/dynamic.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/dynamic.ttf
--------------------------------------------------------------------------------
/library/fonts/dyphusio.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/dyphusio.ttf
--------------------------------------------------------------------------------
/library/fonts/dystorqu.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/dystorqu.ttf
--------------------------------------------------------------------------------
/library/fonts/ecliptic.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/ecliptic.ttf
--------------------------------------------------------------------------------
/library/fonts/edundot.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/edundot.ttf
--------------------------------------------------------------------------------
/library/fonts/edunline.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/edunline.ttf
--------------------------------------------------------------------------------
/library/fonts/elsewhe2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/elsewhe2.ttf
--------------------------------------------------------------------------------
/library/fonts/elsewher.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/elsewher.ttf
--------------------------------------------------------------------------------
/library/fonts/embosst1.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/embosst1.ttf
--------------------------------------------------------------------------------
/library/fonts/embosst2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/embosst2.ttf
--------------------------------------------------------------------------------
/library/fonts/embosst3.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/embosst3.ttf
--------------------------------------------------------------------------------
/library/fonts/encappln.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/encappln.ttf
--------------------------------------------------------------------------------
/library/fonts/encapsul.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/encapsul.ttf
--------------------------------------------------------------------------------
/library/fonts/entangle.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/entangle.ttf
--------------------------------------------------------------------------------
/library/fonts/enthuse.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/enthuse.ttf
--------------------------------------------------------------------------------
/library/fonts/enthuses.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/enthuses.ttf
--------------------------------------------------------------------------------
/library/fonts/entlayra.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/entlayra.ttf
--------------------------------------------------------------------------------
/library/fonts/entlayrb.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/entlayrb.ttf
--------------------------------------------------------------------------------
/library/fonts/entplain.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/entplain.ttf
--------------------------------------------------------------------------------
/library/fonts/euphor3d.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/euphor3d.ttf
--------------------------------------------------------------------------------
/library/fonts/euphoric.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/euphoric.ttf
--------------------------------------------------------------------------------
/library/fonts/exagger8.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/exagger8.ttf
--------------------------------------------------------------------------------
/library/fonts/extracti.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/extracti.ttf
--------------------------------------------------------------------------------
/library/fonts/falsepos.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/falsepos.ttf
--------------------------------------------------------------------------------
/library/fonts/falsposr.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/falsposr.ttf
--------------------------------------------------------------------------------
/library/fonts/fasciicr.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/fasciicr.ttf
--------------------------------------------------------------------------------
/library/fonts/fasciisc.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/fasciisc.ttf
--------------------------------------------------------------------------------
/library/fonts/fasciism.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/fasciism.ttf
--------------------------------------------------------------------------------
/library/fonts/fasciitw.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/fasciitw.ttf
--------------------------------------------------------------------------------
/library/fonts/fauxsnow.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/fauxsnow.ttf
--------------------------------------------------------------------------------
/library/fonts/fbsbltc.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/fbsbltc.ttf
--------------------------------------------------------------------------------
/library/fonts/fbsbltc2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/fbsbltc2.ttf
--------------------------------------------------------------------------------
/library/fonts/fidgety.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/fidgety.ttf
--------------------------------------------------------------------------------
/library/fonts/flipside.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/flipside.ttf
--------------------------------------------------------------------------------
/library/fonts/forcible.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/forcible.ttf
--------------------------------------------------------------------------------
/library/fonts/freaktur.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/freaktur.ttf
--------------------------------------------------------------------------------
/library/fonts/frizzed.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/frizzed.ttf
--------------------------------------------------------------------------------
/library/fonts/fullcomp.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/fullcomp.ttf
--------------------------------------------------------------------------------
/library/fonts/galapogo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/galapogo.ttf
--------------------------------------------------------------------------------
/library/fonts/galvaniz.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/galvaniz.ttf
--------------------------------------------------------------------------------
/library/fonts/gaposiso.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gaposiso.ttf
--------------------------------------------------------------------------------
/library/fonts/gaposiss.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gaposiss.ttf
--------------------------------------------------------------------------------
/library/fonts/gasping.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gasping.ttf
--------------------------------------------------------------------------------
/library/fonts/gathrgap.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gathrgap.ttf
--------------------------------------------------------------------------------
/library/fonts/genotyph.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/genotyph.ttf
--------------------------------------------------------------------------------
/library/fonts/genotyps.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/genotyps.ttf
--------------------------------------------------------------------------------
/library/fonts/genotyrh.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/genotyrh.ttf
--------------------------------------------------------------------------------
/library/fonts/genotyrs.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/genotyrs.ttf
--------------------------------------------------------------------------------
/library/fonts/gesture.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gesture.ttf
--------------------------------------------------------------------------------
/library/fonts/gestures.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gestures.ttf
--------------------------------------------------------------------------------
/library/fonts/gesturet.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gesturet.ttf
--------------------------------------------------------------------------------
/library/fonts/gesturts.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gesturts.ttf
--------------------------------------------------------------------------------
/library/fonts/gosebmp2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gosebmp2.ttf
--------------------------------------------------------------------------------
/library/fonts/gosebmps.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gosebmps.ttf
--------------------------------------------------------------------------------
/library/fonts/gr8higts.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gr8higts.ttf
--------------------------------------------------------------------------------
/library/fonts/granular.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/granular.ttf
--------------------------------------------------------------------------------
/library/fonts/grapple.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/grapple.ttf
--------------------------------------------------------------------------------
/library/fonts/graveyrd.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/graveyrd.ttf
--------------------------------------------------------------------------------
/library/fonts/graviseg.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/graviseg.ttf
--------------------------------------------------------------------------------
/library/fonts/gravitat.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gravitat.ttf
--------------------------------------------------------------------------------
/library/fonts/grotesq.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/grotesq.ttf
--------------------------------------------------------------------------------
/library/fonts/grudge2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/grudge2.ttf
--------------------------------------------------------------------------------
/library/fonts/gyneric.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gyneric.ttf
--------------------------------------------------------------------------------
/library/fonts/gyneric3.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gyneric3.ttf
--------------------------------------------------------------------------------
/library/fonts/gyroresh.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gyroresh.ttf
--------------------------------------------------------------------------------
/library/fonts/gyrosesq.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/gyrosesq.ttf
--------------------------------------------------------------------------------
/library/fonts/hackslsh.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/hackslsh.ttf
--------------------------------------------------------------------------------
/library/fonts/hairball.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/hairball.ttf
--------------------------------------------------------------------------------
/library/fonts/handmedo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/handmedo.ttf
--------------------------------------------------------------------------------
/library/fonts/handmeds.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/handmeds.ttf
--------------------------------------------------------------------------------
/library/fonts/hdmaker.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/hdmaker.ttf
--------------------------------------------------------------------------------
/library/fonts/hillock.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/hillock.ttf
--------------------------------------------------------------------------------
/library/fonts/homespun.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/homespun.ttf
--------------------------------------------------------------------------------
/library/fonts/hyperion.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/hyperion.ttf
--------------------------------------------------------------------------------
/library/fonts/inertia.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/inertia.ttf
--------------------------------------------------------------------------------
/library/fonts/inevitab.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/inevitab.ttf
--------------------------------------------------------------------------------
/library/fonts/inkswipe.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/inkswipe.ttf
--------------------------------------------------------------------------------
/library/fonts/inktank.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/inktank.ttf
--------------------------------------------------------------------------------
/library/fonts/intersc.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/intersc.ttf
--------------------------------------------------------------------------------
/library/fonts/intersec.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/intersec.ttf
--------------------------------------------------------------------------------
/library/fonts/interso.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/interso.ttf
--------------------------------------------------------------------------------
/library/fonts/irritate.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/irritate.ttf
--------------------------------------------------------------------------------
/library/fonts/jaspers.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/jaspers.ttf
--------------------------------------------------------------------------------
/library/fonts/jawbhard.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/jawbhard.ttf
--------------------------------------------------------------------------------
/library/fonts/jawbreak.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/jawbreak.ttf
--------------------------------------------------------------------------------
/library/fonts/jawbrko1.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/jawbrko1.ttf
--------------------------------------------------------------------------------
/library/fonts/jawbrko2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/jawbrko2.ttf
--------------------------------------------------------------------------------
/library/fonts/jeopardi.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/jeopardi.ttf
--------------------------------------------------------------------------------
/library/fonts/jeopardt.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/jeopardt.ttf
--------------------------------------------------------------------------------
/library/fonts/jmacscrl.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/jmacscrl.ttf
--------------------------------------------------------------------------------
/library/fonts/joltcaff.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/joltcaff.ttf
--------------------------------------------------------------------------------
/library/fonts/jupiterc.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/jupiterc.ttf
--------------------------------------------------------------------------------
/library/fonts/kaliberr.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/kaliberr.ttf
--------------------------------------------------------------------------------
/library/fonts/kalibers.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/kalibers.ttf
--------------------------------------------------------------------------------
/library/fonts/kaliberx.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/kaliberx.ttf
--------------------------------------------------------------------------------
/library/fonts/kataacti.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/kataacti.ttf
--------------------------------------------------------------------------------
/library/fonts/katainac.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/katainac.ttf
--------------------------------------------------------------------------------
/library/fonts/keyrialt.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/keyrialt.ttf
--------------------------------------------------------------------------------
/library/fonts/keyridge.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/keyridge.ttf
--------------------------------------------------------------------------------
/library/fonts/kickflip.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/kickflip.ttf
--------------------------------------------------------------------------------
/library/fonts/kinkaid.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/kinkaid.ttf
--------------------------------------------------------------------------------
/library/fonts/kirbyss.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/kirbyss.ttf
--------------------------------------------------------------------------------
/library/fonts/konecto1.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/konecto1.ttf
--------------------------------------------------------------------------------
/library/fonts/konecto2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/konecto2.ttf
--------------------------------------------------------------------------------
/library/fonts/konector.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/konector.ttf
--------------------------------------------------------------------------------
/library/fonts/koneerie.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/koneerie.ttf
--------------------------------------------------------------------------------
/library/fonts/kurvatur.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/kurvatur.ttf
--------------------------------------------------------------------------------
/library/fonts/lakeshor.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/lakeshor.ttf
--------------------------------------------------------------------------------
/library/fonts/lamebrai.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/lamebrai.ttf
--------------------------------------------------------------------------------
/library/fonts/larkspur.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/larkspur.ttf
--------------------------------------------------------------------------------
/library/fonts/lethargi.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/lethargi.ttf
--------------------------------------------------------------------------------
/library/fonts/licostrg.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/licostrg.ttf
--------------------------------------------------------------------------------
/library/fonts/lightout.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/lightout.ttf
--------------------------------------------------------------------------------
/library/fonts/lineding.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/lineding.ttf
--------------------------------------------------------------------------------
/library/fonts/lowdown.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/lowdown.ttf
--------------------------------------------------------------------------------
/library/fonts/lucid2o.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/lucid2o.ttf
--------------------------------------------------------------------------------
/library/fonts/lyneous.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/lyneous.ttf
--------------------------------------------------------------------------------
/library/fonts/lyneousl.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/lyneousl.ttf
--------------------------------------------------------------------------------
/library/fonts/macropsi.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/macropsi.ttf
--------------------------------------------------------------------------------
/library/fonts/madscrwl.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/madscrwl.ttf
--------------------------------------------------------------------------------
/library/fonts/mima4x4i.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/mima4x4i.ttf
--------------------------------------------------------------------------------
/library/fonts/mima4x4o.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/mima4x4o.ttf
--------------------------------------------------------------------------------
/library/fonts/mimaalt1.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/mimaalt1.ttf
--------------------------------------------------------------------------------
/library/fonts/mimaalt2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/mimaalt2.ttf
--------------------------------------------------------------------------------
/library/fonts/mimafuse.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/mimafuse.ttf
--------------------------------------------------------------------------------
/library/fonts/minikott.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/minikott.ttf
--------------------------------------------------------------------------------
/library/fonts/minikstt.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/minikstt.ttf
--------------------------------------------------------------------------------
/library/fonts/mishmash.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/mishmash.ttf
--------------------------------------------------------------------------------
/library/fonts/mobilize.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/mobilize.ttf
--------------------------------------------------------------------------------
/library/fonts/monkphon.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/monkphon.ttf
--------------------------------------------------------------------------------
/library/fonts/moronmis.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/moronmis.ttf
--------------------------------------------------------------------------------
/library/fonts/mysteron.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/mysteron.ttf
--------------------------------------------------------------------------------
/library/fonts/nanosecw.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/nanosecw.ttf
--------------------------------------------------------------------------------
/library/fonts/naughts.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/naughts.ttf
--------------------------------------------------------------------------------
/library/fonts/neuralol.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/neuralol.ttf
--------------------------------------------------------------------------------
/library/fonts/nominal.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/nominal.ttf
--------------------------------------------------------------------------------
/library/fonts/nostalgi.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/nostalgi.ttf
--------------------------------------------------------------------------------
/library/fonts/nsecthck.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/nsecthck.ttf
--------------------------------------------------------------------------------
/library/fonts/nsecthin.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/nsecthin.ttf
--------------------------------------------------------------------------------
/library/fonts/nucleus.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/nucleus.ttf
--------------------------------------------------------------------------------
/library/fonts/numskull.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/numskull.ttf
--------------------------------------------------------------------------------
/library/fonts/nymonak.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/nymonak.ttf
--------------------------------------------------------------------------------
/library/fonts/obloquyo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/obloquyo.ttf
--------------------------------------------------------------------------------
/library/fonts/obloquys.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/obloquys.ttf
--------------------------------------------------------------------------------
/library/fonts/obstacle.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/obstacle.ttf
--------------------------------------------------------------------------------
/library/fonts/obstacll.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/obstacll.ttf
--------------------------------------------------------------------------------
/library/fonts/offkiltl.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/offkiltl.ttf
--------------------------------------------------------------------------------
/library/fonts/offkiltr.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/offkiltr.ttf
--------------------------------------------------------------------------------
/library/fonts/opiated.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/opiated.ttf
--------------------------------------------------------------------------------
/library/fonts/orbicula.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/orbicula.ttf
--------------------------------------------------------------------------------
/library/fonts/outersid.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/outersid.ttf
--------------------------------------------------------------------------------
/library/fonts/overhead.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/overhead.ttf
--------------------------------------------------------------------------------
/library/fonts/persuasi.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/persuasi.ttf
--------------------------------------------------------------------------------
/library/fonts/phorfeir.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/phorfeir.ttf
--------------------------------------------------------------------------------
/library/fonts/phorfeis.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/phorfeis.ttf
--------------------------------------------------------------------------------
/library/fonts/pincers.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/pincers.ttf
--------------------------------------------------------------------------------
/library/fonts/pindown.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/pindown.ttf
--------------------------------------------------------------------------------
/library/fonts/pindownp.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/pindownp.ttf
--------------------------------------------------------------------------------
/library/fonts/pindwnx.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/pindwnx.ttf
--------------------------------------------------------------------------------
/library/fonts/pindwnxp.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/pindwnxp.ttf
--------------------------------------------------------------------------------
/library/fonts/pixlkrud.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/pixlkrud.ttf
--------------------------------------------------------------------------------
/library/fonts/plasdrip.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/plasdrip.ttf
--------------------------------------------------------------------------------
/library/fonts/plasdrpe.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/plasdrpe.ttf
--------------------------------------------------------------------------------
/library/fonts/pneumati.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/pneumati.ttf
--------------------------------------------------------------------------------
/library/fonts/pneutall.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/pneutall.ttf
--------------------------------------------------------------------------------
/library/fonts/pneuwide.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/pneuwide.ttf
--------------------------------------------------------------------------------
/library/fonts/powdwrk5.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/powdwrk5.ttf
--------------------------------------------------------------------------------
/library/fonts/qbicle1.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/qbicle1.ttf
--------------------------------------------------------------------------------
/library/fonts/qbicle2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/qbicle2.ttf
--------------------------------------------------------------------------------
/library/fonts/qbicle3.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/qbicle3.ttf
--------------------------------------------------------------------------------
/library/fonts/qbicle4.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/qbicle4.ttf
--------------------------------------------------------------------------------
/library/fonts/qlumpysh.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/qlumpysh.ttf
--------------------------------------------------------------------------------
/library/fonts/quacksal.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/quacksal.ttf
--------------------------------------------------------------------------------
/library/fonts/quadrcal.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/quadrcal.ttf
--------------------------------------------------------------------------------
/library/fonts/quadrtic.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/quadrtic.ttf
--------------------------------------------------------------------------------
/library/fonts/quandary.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/quandary.ttf
--------------------------------------------------------------------------------
/library/fonts/quantfh.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/quantfh.ttf
--------------------------------------------------------------------------------
/library/fonts/quantflt.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/quantflt.ttf
--------------------------------------------------------------------------------
/library/fonts/quantrh.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/quantrh.ttf
--------------------------------------------------------------------------------
/library/fonts/quantrnd.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/quantrnd.ttf
--------------------------------------------------------------------------------
/library/fonts/quanttap.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/quanttap.ttf
--------------------------------------------------------------------------------
/library/fonts/quaranti.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/quaranti.ttf
--------------------------------------------------------------------------------
/library/fonts/quarthck.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/quarthck.ttf
--------------------------------------------------------------------------------
/library/fonts/quarthin.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/quarthin.ttf
--------------------------------------------------------------------------------
/library/fonts/queasyol.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/queasyol.ttf
--------------------------------------------------------------------------------
/library/fonts/quillexo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/quillexo.ttf
--------------------------------------------------------------------------------
/library/fonts/quillexs.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/quillexs.ttf
--------------------------------------------------------------------------------
/library/fonts/rambling.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/rambling.ttf
--------------------------------------------------------------------------------
/library/fonts/ravaged2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/ravaged2.ttf
--------------------------------------------------------------------------------
/library/fonts/ravcater.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/ravcater.ttf
--------------------------------------------------------------------------------
/library/fonts/raydiat2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/raydiat2.ttf
--------------------------------------------------------------------------------
/library/fonts/reasonsh.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/reasonsh.ttf
--------------------------------------------------------------------------------
/library/fonts/redundan.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/redundan.ttf
--------------------------------------------------------------------------------
/library/fonts/regenera.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/regenera.ttf
--------------------------------------------------------------------------------
/library/fonts/registry.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/registry.ttf
--------------------------------------------------------------------------------
/library/fonts/rehearsc.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/rehearsc.ttf
--------------------------------------------------------------------------------
/library/fonts/rehearso.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/rehearso.ttf
--------------------------------------------------------------------------------
/library/fonts/rehearsp.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/rehearsp.ttf
--------------------------------------------------------------------------------
/library/fonts/relapse.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/relapse.ttf
--------------------------------------------------------------------------------
/library/fonts/revertro.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/revertro.ttf
--------------------------------------------------------------------------------
/library/fonts/rotundo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/rotundo.ttf
--------------------------------------------------------------------------------
/library/fonts/roughday.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/roughday.ttf
--------------------------------------------------------------------------------
/library/fonts/sarcasti.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/sarcasti.ttf
--------------------------------------------------------------------------------
/library/fonts/saunder.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/saunder.ttf
--------------------------------------------------------------------------------
/library/fonts/scalines.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/scalines.ttf
--------------------------------------------------------------------------------
/library/fonts/sclnmaze.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/sclnmaze.ttf
--------------------------------------------------------------------------------
/library/fonts/sequence.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/sequence.ttf
--------------------------------------------------------------------------------
/library/fonts/setbackt.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/setbackt.ttf
--------------------------------------------------------------------------------
/library/fonts/sideways.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/sideways.ttf
--------------------------------------------------------------------------------
/library/fonts/simplto2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/simplto2.ttf
--------------------------------------------------------------------------------
/library/fonts/skullcap.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/skullcap.ttf
--------------------------------------------------------------------------------
/library/fonts/slender.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/slender.ttf
--------------------------------------------------------------------------------
/library/fonts/slenderw.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/slenderw.ttf
--------------------------------------------------------------------------------
/library/fonts/slenmini.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/slenmini.ttf
--------------------------------------------------------------------------------
/library/fonts/slenstub.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/slenstub.ttf
--------------------------------------------------------------------------------
/library/fonts/snailets.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/snailets.ttf
--------------------------------------------------------------------------------
/library/fonts/spaciouo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/spaciouo.ttf
--------------------------------------------------------------------------------
/library/fonts/spacious.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/spacious.ttf
--------------------------------------------------------------------------------
/library/fonts/spastic2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/spastic2.ttf
--------------------------------------------------------------------------------
/library/fonts/spheroid.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/spheroid.ttf
--------------------------------------------------------------------------------
/library/fonts/spheroix.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/spheroix.ttf
--------------------------------------------------------------------------------
/library/fonts/sqroute.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/sqroute.ttf
--------------------------------------------------------------------------------
/library/fonts/stagnati.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/stagnati.ttf
--------------------------------------------------------------------------------
/library/fonts/supragc.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/supragc.ttf
--------------------------------------------------------------------------------
/library/fonts/supragl.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/supragl.ttf
--------------------------------------------------------------------------------
/library/fonts/symmetry.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/symmetry.ttf
--------------------------------------------------------------------------------
/library/fonts/syndrome.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/syndrome.ttf
--------------------------------------------------------------------------------
/library/fonts/syntheti.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/syntheti.ttf
--------------------------------------------------------------------------------
/library/fonts/syracuse.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/syracuse.ttf
--------------------------------------------------------------------------------
/library/fonts/tearful.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/tearful.ttf
--------------------------------------------------------------------------------
/library/fonts/techniqo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/techniqo.ttf
--------------------------------------------------------------------------------
/library/fonts/techniqu.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/techniqu.ttf
--------------------------------------------------------------------------------
/library/fonts/techover.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/techover.ttf
--------------------------------------------------------------------------------
/library/fonts/telephas.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/telephas.ttf
--------------------------------------------------------------------------------
/library/fonts/tsextolo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/tsextolo.ttf
--------------------------------------------------------------------------------
/library/fonts/tsextols.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/tsextols.ttf
--------------------------------------------------------------------------------
/library/fonts/turmoil.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/turmoil.ttf
--------------------------------------------------------------------------------
/library/fonts/ubiquity.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/ubiquity.ttf
--------------------------------------------------------------------------------
/library/fonts/unanimo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/unanimo.ttf
--------------------------------------------------------------------------------
/library/fonts/unanimoi.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/unanimoi.ttf
--------------------------------------------------------------------------------
/library/fonts/underscr.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/underscr.ttf
--------------------------------------------------------------------------------
/library/fonts/underwhe.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/underwhe.ttf
--------------------------------------------------------------------------------
/library/fonts/underwho.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/underwho.ttf
--------------------------------------------------------------------------------
/library/fonts/undrscr2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/undrscr2.ttf
--------------------------------------------------------------------------------
/library/fonts/unlearn2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/unlearn2.ttf
--------------------------------------------------------------------------------
/library/fonts/unlearne.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/unlearne.ttf
--------------------------------------------------------------------------------
/library/fonts/unrespon.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/unrespon.ttf
--------------------------------------------------------------------------------
/library/fonts/upheavtt.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/upheavtt.ttf
--------------------------------------------------------------------------------
/library/fonts/upraise.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/upraise.ttf
--------------------------------------------------------------------------------
/library/fonts/urcompi.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/urcompi.ttf
--------------------------------------------------------------------------------
/library/fonts/urcompo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/urcompo.ttf
--------------------------------------------------------------------------------
/library/fonts/vacantz.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/vacantz.ttf
--------------------------------------------------------------------------------
/library/fonts/vanished.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/vanished.ttf
--------------------------------------------------------------------------------
/library/fonts/vantage.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/vantage.ttf
--------------------------------------------------------------------------------
/library/fonts/variance.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/variance.ttf
--------------------------------------------------------------------------------
/library/fonts/vertigo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/vertigo.ttf
--------------------------------------------------------------------------------
/library/fonts/vertigo2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/vertigo2.ttf
--------------------------------------------------------------------------------
/library/fonts/vertigup.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/vertigup.ttf
--------------------------------------------------------------------------------
/library/fonts/vertiup2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/vertiup2.ttf
--------------------------------------------------------------------------------
/library/fonts/vigilanc.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/vigilanc.ttf
--------------------------------------------------------------------------------
/library/fonts/vindicti.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/vindicti.ttf
--------------------------------------------------------------------------------
/library/fonts/visitor1.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/visitor1.ttf
--------------------------------------------------------------------------------
/library/fonts/visitor2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/visitor2.ttf
--------------------------------------------------------------------------------
/library/fonts/volatil1.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/volatil1.ttf
--------------------------------------------------------------------------------
/library/fonts/volatil2.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/volatil2.ttf
--------------------------------------------------------------------------------
/library/fonts/wagerlos.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/wagerlos.ttf
--------------------------------------------------------------------------------
/library/fonts/wagerwon.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/wagerwon.ttf
--------------------------------------------------------------------------------
/library/fonts/wayward.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/wayward.ttf
--------------------------------------------------------------------------------
/library/fonts/waywards.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/waywards.ttf
--------------------------------------------------------------------------------
/library/fonts/weatherd.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/weatherd.ttf
--------------------------------------------------------------------------------
/library/fonts/weathers.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/weathers.ttf
--------------------------------------------------------------------------------
/library/fonts/whatever.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/whatever.ttf
--------------------------------------------------------------------------------
/library/fonts/whipsnap.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/whipsnap.ttf
--------------------------------------------------------------------------------
/library/fonts/wigsquig.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/wigsquig.ttf
--------------------------------------------------------------------------------
/library/fonts/wincing.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/wincing.ttf
--------------------------------------------------------------------------------
/library/fonts/withstan.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/withstan.ttf
--------------------------------------------------------------------------------
/library/fonts/wyvernwi.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/wyvernwi.ttf
--------------------------------------------------------------------------------
/library/fonts/wyvernww.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/wyvernww.ttf
--------------------------------------------------------------------------------
/library/fonts/xeroxmal.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/xeroxmal.ttf
--------------------------------------------------------------------------------
/library/fonts/xipital.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/xipital.ttf
--------------------------------------------------------------------------------
/library/fonts/xmaslght.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/xmaslght.ttf
--------------------------------------------------------------------------------
/library/fonts/xtrusion.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/xtrusion.ttf
--------------------------------------------------------------------------------
/library/fonts/yearend.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/yearend.ttf
--------------------------------------------------------------------------------
/library/fonts/yesterda.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/yesterda.ttf
--------------------------------------------------------------------------------
/library/fonts/yielding.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/yielding.ttf
--------------------------------------------------------------------------------
/library/fonts/yoshisst.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/yoshisst.ttf
--------------------------------------------------------------------------------
/library/fonts/yourcomp.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/yourcomp.ttf
--------------------------------------------------------------------------------
/library/fonts/zeldadxt.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/zeldadxt.ttf
--------------------------------------------------------------------------------
/library/fonts/zephyrea.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/zephyrea.ttf
--------------------------------------------------------------------------------
/library/fonts/zephyreg.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/zephyreg.ttf
--------------------------------------------------------------------------------
/library/fonts/zerovelo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/zerovelo.ttf
--------------------------------------------------------------------------------
/library/fonts/zirccube.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/zirccube.ttf
--------------------------------------------------------------------------------
/library/fonts/zirconia.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/zirconia.ttf
--------------------------------------------------------------------------------
/library/fonts/zoetrope.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/zoetrope.ttf
--------------------------------------------------------------------------------
/library/fonts/zurklezo.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/zurklezo.ttf
--------------------------------------------------------------------------------
/library/fonts/zurklezs.ttf:
--------------------------------------------------------------------------------
1 | /usr/share/fonts/truetype/aenigma/zurklezs.ttf
--------------------------------------------------------------------------------
/avio-legacy/avio-nogui:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export SDL_VIDEODRIVER=dummy
4 |
5 | ./avio
6 |
--------------------------------------------------------------------------------
/images/startscreen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/images/startscreen.png
--------------------------------------------------------------------------------
/library/fonts/editundo.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/fonts/editundo.ttf
--------------------------------------------------------------------------------
/images/startscreen_matelight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/images/startscreen_matelight.png
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/34_5.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/34_5.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/6183.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/6183.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/Roots.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/Roots.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/Scene.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/Scene.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/laser2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/laser2.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/ElectronSpin.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/ElectronSpin.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/OmegaPointWC.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/OmegaPointWC.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/Unbenannt-1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/Unbenannt-1.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/FlowerOfLifeV2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/FlowerOfLifeV2.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/RiemannFlower.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/RiemannFlower.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/SteinerChain2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/SteinerChain2.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/SteinerOwl_oo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/SteinerOwl_oo.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/Triangulation.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/Triangulation.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/Triangulation2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/Triangulation2.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/QuantumTunnelv3_v23.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/QuantumTunnelv3_v23.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/RiemannRadio_I2_P+1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/RiemannRadio_I2_P+1.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/EveryWallIsADoorFAniC.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/EveryWallIsADoorFAniC.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/FlowerOfLifeV2colalt.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/FlowerOfLifeV2colalt.gif
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/IndrasNet_HiTech_gif1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/IndrasNet_HiTech_gif1.gif
--------------------------------------------------------------------------------
/.idea/scopes/CORE.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/bitwig/00149_MusicForAGamepad/00149_MusicForAGamepad.bwproject:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/bitwig/00149_MusicForAGamepad/00149_MusicForAGamepad.bwproject
--------------------------------------------------------------------------------
/library/matelight/40x16/gif/8a2bd6b580bc42799a6dd01c765acc8aed294516.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ri0t/avio/HEAD/library/matelight/40x16/gif/8a2bd6b580bc42799a6dd01c765acc8aed294516.gif
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | # Basics
2 | #pygame==1.9.1release
3 | #screeninfo==0.3
4 | isomer>=1.0.10
5 |
6 |
7 | # Video & CV
8 | #cv2>=2.4.9
9 | imageio>=2.8.0
10 |
11 |
12 | # Audio
13 | -e git+https://github.com/belangeo/pyo.git#egg=pyo
14 |
--------------------------------------------------------------------------------
/.idea/copyright/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # build data
2 | build
3 | dist
4 | docs/build
5 | __pycache__
6 | *.egg*
7 |
8 | # cache
9 | *.pyc
10 |
11 | # Testing stuff
12 | .tox
13 | coverage
14 | .coverage
15 |
16 | # IntelliJ IDEA
17 | workspace.xml
18 | tasks.xml
19 | shelf
20 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/frontend/avio.config.js:
--------------------------------------------------------------------------------
1 | import icon from './assets/avio_menu_logo.svg';
2 |
3 | export function routing($stateProvider) {
4 |
5 | $stateProvider
6 | .state('app.avio', {
7 | url: '/avio',
8 | template: '',
9 | label: 'AVIO',
10 | icon: icon
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/frontend/avio.module.js:
--------------------------------------------------------------------------------
1 | import angular from 'angular';
2 | import uirouter from 'angular-ui-router';
3 |
4 | import {routing} from './avio.config.js';
5 |
6 | import './avio/avio.scss';
7 |
8 | import aviocomponent from './avio/avio.js';
9 | import template from './avio/avio.tpl.html';
10 |
11 | export default angular
12 | .module('main.app.avio', [uirouter])
13 | .config(routing)
14 | .component('avio', {controller: aviocomponent, template: template})
15 | .name;
16 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.idea/pymidicontrol.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/frontend/avio/avio.scss:
--------------------------------------------------------------------------------
1 | .avio-row {
2 | height:16px;
3 | min-height:16px;
4 | max-height:16px;
5 | margin: 0px;
6 | padding: 0px;
7 | }
8 |
9 | .avio-cell {
10 | width: 16px;
11 | min-width: 16px;
12 | max-width: 16px;
13 | display: inline-block;
14 | background: black;
15 | margin: 0px;
16 | padding: 0px;
17 | }
18 |
19 | .avio-small-row {
20 | height:12px;
21 | min-height:12px;
22 | max-height:12px;
23 | margin: 0px;
24 | padding: 0px;
25 | }
26 |
27 | .avio-small-cell {
28 | width: 12px;
29 | min-width: 12px;
30 | max-width: 12px;
31 | display: inline-block;
32 | background: black;
33 | margin: 0px;
34 | padding: 0px;
35 | }
36 |
37 | .avio-thumbnail img {
38 | width: 100%;
39 | image-rendering: pixelated;
40 | }
41 |
42 | .avio-mode_active {
43 | color: black;
44 | }
45 |
46 | .avio-modes span {
47 | color: gray;
48 | }
49 |
--------------------------------------------------------------------------------
/.idea/copyright/GPLv3.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/avio-legacy/splash.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | import time
4 | import pygame
5 | import os
6 | import screeninfo
7 |
8 | splash_width = 555
9 | splash_height = 542
10 | duration = 10.0
11 |
12 |
13 | def splash_screen():
14 | m = screeninfo.get_monitors()
15 |
16 | if len(m) > 1:
17 | # Find first screen and center splash there
18 | for screen in m:
19 | if screen.x == 0:
20 | x = (screen.width / 2) - (splash_width / 2.0)
21 | y = (screen.height / 2) - (splash_height / 2.0)
22 | os.environ['SDL_VIDEO_WINDOW_POS'] = str((x, y))
23 | else:
24 | os.environ['SDL_VIDEO_CENTERED'] = '1'
25 |
26 | pygame.init()
27 |
28 | pygame.display.set_caption('AVIO Splashscreen')
29 |
30 | screen = pygame.display.set_mode((splash_width, splash_height), pygame.NOFRAME)
31 | # TODO: Get correct image path
32 | background_image = pygame.image.load('images/startscreen.png')
33 | screen.blit(background_image, (0, 0))
34 |
35 | start = time.time()
36 | waited = 0
37 | clicked = False
38 |
39 | while waited < duration and not clicked:
40 | pygame.display.update()
41 |
42 | if pygame.event.peek():
43 | for event in pygame.event.get():
44 | if event.type in (pygame.KEYUP, pygame.MOUSEBUTTONDOWN):
45 | clicked = True
46 | waited = time.time() - start
47 |
48 |
49 | if __name__ == '__main__':
50 | splash_screen()
51 |
--------------------------------------------------------------------------------
/avio-legacy/component.py:
--------------------------------------------------------------------------------
1 | from random import randint
2 | from circuits import Component
3 | from avio_core.logger import hfoslog
4 | import inspect
5 | import traceback
6 | from sys import exc_info
7 |
8 |
9 | class AVIOComponent(Component):
10 | debug = False
11 |
12 | names = []
13 |
14 | def __init__(self, uniquename=None, *args, **kwargs):
15 | super(AVIOComponent, self).__init__(*args, **kwargs)
16 |
17 | if not uniquename:
18 | uniquename = self.name
19 |
20 | if uniquename in self.names:
21 | new_uniquename = uniquename
22 | while new_uniquename in self.names:
23 | new_uniquename = uniquename + str(randint(2 ** 16))
24 | uniquename = new_uniquename
25 |
26 | self.uniquename = uniquename
27 |
28 | def log(self, *args, **kwargs):
29 | """Log a statement from this component"""
30 |
31 | func = inspect.currentframe().f_back.f_code
32 | # Dump the message + the name of this function to the log.
33 |
34 | if 'exc' in kwargs and kwargs['exc'] is True:
35 | exc_type, exc_obj, exc_tb = exc_info()
36 | line_no = exc_tb.tb_lineno
37 | # print('EXCEPTION DATA:', line_no, exc_type, exc_obj, exc_tb)
38 | args += traceback.extract_tb(exc_tb),
39 | else:
40 | line_no = func.co_firstlineno
41 |
42 | sourceloc = "[%.10s@%s:%i]" % (
43 | func.co_name,
44 | func.co_filename,
45 | line_no
46 | )
47 | hfoslog(sourceloc=sourceloc, emitter=self.uniquename, *args, **kwargs)
48 |
--------------------------------------------------------------------------------
/avio-legacy/install:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | DEBIAN_PKGS="python3.5 python3-pip virtualenv python3-pygame \
6 | python3-numpy python3-opencv"
7 |
8 | if [ ${1^^} == "-Y" ]
9 | then
10 | AUTO=1
11 | else
12 | AUTO=0
13 | fi
14 |
15 |
16 | # Check if root
17 | if [ "$EUID" -ne 0 ]
18 | then
19 | echo "You need root privileges to install AVIO. Use su or sudo."
20 | exit
21 | fi
22 |
23 | echo "If you run into any trouble, please read the documentation at"
24 | echo -e "\nhttps://avio.readthedocs.io/en/latest/start/index.html\n"
25 |
26 | # Find our package manager
27 | if VERB="$( which apt-get )" 2> /dev/null; then
28 | echo "Proceeding with autodetected Debian based installation. Please be patient."
29 |
30 | if [ -n $AUTO ]
31 | then
32 | echo -e "\nAbout to install Debian packages: $DEBIAN_PKGS"
33 | echo -n "Ok? [Y/N] "
34 | read confirmation
35 |
36 | if [ ! ${confirmation^^} == 'Y' ]
37 | then
38 | exit
39 | fi
40 | echo "Installing"
41 | fi
42 |
43 | apt-get install -y $DEBIAN_PKGS &>> output.log
44 |
45 | virtualenv -p /usr/bin/python3.5 --system-site-packages venv &>> output.log
46 | source venv/bin/activate &>> output.log
47 | pip install -Ur requirements.txt &>> output.log
48 | python setup.py develop &>> output.log
49 |
50 | echo "All Done!"
51 |
52 | elif VERB="$( which yum )" 2> /dev/null; then
53 | echo "Modern Red Hat-based - NOT SUPPORTED YET"
54 | elif VERB="$( which portage )" 2> /dev/null; then
55 | echo "Gentoo-based - NOT SUPPORTED YET"
56 | elif VERB="$( which pacman )" 2> /dev/null; then
57 | echo "Arch-based - NOT SUPPORTED YET"
58 | else
59 | echo "Your distribution is not yet supported." >&2
60 | exit 1
61 | fi
62 |
63 |
64 |
--------------------------------------------------------------------------------
/avio-legacy/avio_standalone:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | __author__ = 'riot'
4 |
5 | from os import environ
6 |
7 | import argparse
8 |
9 | if __name__ == "__main__":
10 | parser = argparse.ArgumentParser()
11 | parser.add_argument("--debug", help="Show debug outout",
12 | action="store_true")
13 | parser.add_argument("--io", help="Show io options", action="store_true")
14 | parser.add_argument("--gui", help="Activate GUI (EXPERIMENTAL!)",
15 | action="store_true")
16 | parser.add_argument("--cam", help="Activate Camera",
17 | action="store_true")
18 | parser.add_argument("--nosplash", help="Disable splash screen",
19 | action="store_true")
20 | parser.add_argument("--midiout", help="Select MIDI output device id",
21 | type=int, default=None)
22 | parser.add_argument("--midiin", help="Select MIDI input device id",
23 | type=int, default=None)
24 | parser.add_argument("--width", help="Output renderer width",
25 | type=int, default=1920)
26 | parser.add_argument("--height", help="Output renderer height",
27 | type=int, default=1200)
28 | parser.add_argument("--host", help="Output matelight host(name)",
29 | type=str, default="matelight")
30 | parser.add_argument("--port", help="Output matelight port",
31 | type=int, default=1337)
32 | parser.add_argument("--program",
33 | help="Load named router program from "
34 | "~/.avio/router_*.json",
35 | type=str,
36 | default='default')
37 |
38 |
39 | args = parser.parse_args()
40 |
41 | if not args.gui:
42 | environ['SDL_VIDEODRIVER'] = 'dummy'
43 | print("Headless mode. To exit, hit CTRL-C.")
44 |
45 | from avio_core.app import Launch
46 |
47 | Launch(args)
48 |
--------------------------------------------------------------------------------
/avio-legacy/camera.py:
--------------------------------------------------------------------------------
1 | import pygame
2 | import cv2
3 | import numpy
4 |
5 | from circuits import Timer, Event, handler, Worker, task
6 |
7 | from avio_core.component import AVIOComponent
8 | from avio_core.gui import GUIComponent, paintrequest
9 |
10 |
11 | # Camera events
12 |
13 | class cameraframe(Event):
14 | def __init__(self, frame, *args):
15 | super(cameraframe, self).__init__(*args)
16 | self.frame = frame
17 |
18 | def take_picture(cam):
19 | err, frame = cam.read()
20 |
21 | return frame
22 |
23 |
24 | class CVCamera(AVIOComponent):
25 | def __init__(self, device_id=0, targetresolution=(40, 16), *args,
26 | **kwargs):
27 | super(CVCamera, self).__init__(*args, **kwargs)
28 | self.targetresolution = targetresolution
29 | self.cam = cv2.VideoCapture(device_id)
30 | self.cam.set(3, 320)
31 | self.cam.set(4, 240)
32 |
33 | self.framerate = 20 / 1000.0
34 |
35 | self.recording = True
36 |
37 | self.worker = Worker(process=False, workers=1,
38 | channel="camera").register(self)
39 |
40 | self.cam_timer = Timer(2, Event.create('takepicture')).register(
41 | self)
42 |
43 | self.surface = pygame.Surface(targetresolution)
44 | self.log('Camera started')
45 |
46 | def takepicture(self):
47 | if self.recording:
48 | self.log('Taking a pic')
49 | self.fireEvent(task(take_picture, self.cam), 'camera')
50 |
51 |
52 | @handler('task_success', channel='camera')
53 | def task_success(self, event, call, result):
54 | frame = result
55 |
56 | if frame is None:
57 | self.log("Oh, no camera attached! Change this and rerun!")
58 | self.cam_timer.unregister()
59 |
60 | return
61 |
62 | newframe = numpy.rot90(frame)
63 | #newframe = cv2.resize(frame, self.targetresolution)
64 | surfarr = pygame.surfarray.make_surface(newframe)
65 | srf = pygame.transform.scale(surfarr, self.targetresolution)
66 |
67 | self.fireEvent(cameraframe(srf))
68 | self.fireEvent(Event.create('takepicture'))
69 |
70 |
71 | class CameraDisplay(GUIComponent):
72 | def cameraframe(self, event):
73 | #self.log('New camera frame received:', event)
74 | self.fireEvent(paintrequest(event.frame, self.x, self.y), 'gui')
75 |
--------------------------------------------------------------------------------
/avio/trigger.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: UTF-8 -*-
3 |
4 | # AVIO - The Python Audio Video Input Output Suite
5 | # ================================================
6 | # Copyright (C) 2015-2020 riot
7 | #
8 | # This program is free software: you can redistribute it and/or modify
9 | # it under the terms of the GNU General Public License as published by
10 | # the Free Software Foundation, either version 3 of the License, or
11 | # (at your option) any later version.
12 | #
13 | # This program is distributed in the hope that it will be useful,
14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 | # GNU General Public License for more details.
17 | #
18 | # You should have received a copy of the GNU General Public License
19 | # along with this program. If not, see .
20 |
21 | import pygame
22 |
23 | from circuits import Timer, Event
24 | from isomer.component import ConfigurableComponent, handler
25 | from isomer.logger import debug
26 |
27 |
28 | class Trigger(ConfigurableComponent):
29 | """Listens for configurable joystick/gamepad button combos and triggers
30 | preconfigured events"""
31 |
32 | channel = "AVIO"
33 |
34 | configprops = {
35 | 'triggers': {
36 | 'type': 'array',
37 | 'default': [{'button': 'X', 'event': 'tap'}],
38 | 'items': {
39 | 'type': 'object',
40 | 'properties': {
41 | 'button': {
42 | 'type': 'string',
43 | 'maxLength': 1,
44 | 'minLength': 1,
45 | 'description':
46 | 'X = X key, O = O key, A = Triangle key, S = Square key'},
47 | 'event': {'type': 'string'}
48 | }
49 | }
50 | }
51 | }
52 |
53 | def __init__(self, *args):
54 | super(Trigger, self).__init__("TRIGGER", args)
55 | self.log("Initializing Trigger controller")
56 |
57 | self.triggers = {}
58 | self._build_combo_lookup()
59 |
60 | @handler("reload_configuration", channel="isomer-web")
61 | def reload_configuration(self, event):
62 | """Reload the current configuration and set up everything depending on it"""
63 |
64 | super(Trigger, self).reload_configuration(event)
65 | if event.target != self.uniquename:
66 | return
67 |
68 | self._build_combo_lookup()
69 |
70 | def _build_combo_lookup(self):
71 | self.log("Updating trigger lookup")
72 | self.triggers = {}
73 | for item in self.config.triggers:
74 | self.triggers[item['button']] = item['event']
75 |
76 | @handler("joystickchange")
77 | def joystickchange(self, event):
78 | if event.input.type != pygame.JOYBUTTONDOWN:
79 | return
80 |
81 | button = event.input.button
82 | key = ""
83 |
84 | if button == 0:
85 | key = "X"
86 | elif button == 1:
87 | key = "O"
88 | elif button == 2:
89 | key = "A"
90 | elif button == 3:
91 | key = "S"
92 |
93 | if key in self.triggers:
94 | self.log("Firing trigger:", key, lvl=debug)
95 | self.fireEvent(Event.create(self.triggers[key]))
96 |
--------------------------------------------------------------------------------
/README.rst:
--------------------------------------------------------------------------------
1 | AVIO
2 | ====
3 |
4 | The AVIO Suite is an experimental approach to the concept of a live stage
5 | performance. AVIO stands for "Audio Visual Input Output" and the suite is
6 | a component (event) based agglomeration of tools to work with Controller,
7 | Midi, Audio and Visual data.
8 |
9 |
10 | Installation
11 | ============
12 |
13 | Since, AVIO is a plugin collection for Isomer, you'll need a working Isomer
14 | instance first.
15 |
16 | Isomer
17 | ------
18 |
19 | To install Isomer and create an instance to work with AVIO, follow the
20 | `quick start tutorial `_.
21 |
22 | The quickest way to get AVIO is through Isomer's builtin store system, but that
23 | is not yet completely done, so right now, you'll have to do that manually:
24 |
25 | Dependencies
26 | ------------
27 |
28 | Before installing AVIO, you should furthermore have these packages installed:
29 |
30 | * liblo-dev
31 | * libportmidi-dev
32 | * libsndfile1-dev
33 | * python3-pygame
34 | * python3-numpy
35 | * python3-opencv
36 |
37 | Install AVIO
38 | ------------
39 |
40 | Once you have set up Isomer correctly use this command line to install it into your
41 | default instance/environment:
42 |
43 | .. code-block:: bash
44 |
45 | iso -e current instance install-module -i -s github https://github.com/ri0t/avio
46 |
47 | This will (currently) require a frontend rebuild:
48 |
49 | .. code-block:: bash
50 |
51 | iso -e current environment install-frontend
52 |
53 | You can use `-i INSTANCENAME` and `-e ENVIRONMENTNAME` to specify which instance should
54 | be used.
55 |
56 | Running
57 | =======
58 |
59 | Restart your Isomer instance and log in to it, to access the AVIO modules.
60 |
61 | Controlling
62 | ===========
63 |
64 | MIDI
65 | ----
66 |
67 | To actually use MIDI data e.g. in Bitwig Studio, you may need to
68 | load the alsa midi loopback module:
69 |
70 | .. code-block:: bash
71 |
72 | sudo modprobe snd_virmidi
73 |
74 | This should enable four virtual loopback devices. With a tool like
75 | patchage, you can now route AVIO's output midi channel to a loopback
76 | device, which you can select as MIDI input in BWS.
77 |
78 | Joysticks & Gamepads
79 | --------------------
80 |
81 | tbd
82 |
83 | User Interface
84 | --------------
85 |
86 | tbd
87 |
88 | Development
89 | ===========
90 |
91 | First, you'll need `Isomer set up for development
92 | `_.
93 |
94 | Then, manually grab AVIO:
95 |
96 | .. code-block:: bash
97 |
98 | git clone https://github.com/ri0t/avio avio
99 |
100 | Then run (probably best done in your Isomer virtual environment):
101 |
102 | .. code-block:: bash
103 |
104 | cd avio
105 | python setup.py develop
106 |
107 |
108 |
109 | License
110 | =======
111 |
112 | Copyright (C) 2015-2020 riot
113 |
114 | This program is free software: you can redistribute it and/or modify
115 | it under the terms of the GNU General Public License as published by
116 | the Free Software Foundation, either version 3 of the License, or
117 | (at your option) any later version.
118 |
119 | This program is distributed in the hope that it will be useful,
120 | but WITHOUT ANY WARRANTY; without even the implied warranty of
121 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
122 | GNU General Public License for more details.
123 |
124 | You should have received a copy of the GNU General Public License
125 | along with this program. If not, see .
126 |
127 | 3rd Party Licenses
128 | ==================
129 |
130 | Includes a few fonts from the ttf-aenigma pack, a great font pack
131 | sporting 465 free TrueType fonts by Brian Ken.
132 |
--------------------------------------------------------------------------------
/avio/events.py:
--------------------------------------------------------------------------------
1 | # AVIO - The Python Audio Video Input Output Suite
2 | # ================================================
3 | # Copyright (C) 2015 riot
4 | #
5 | # This program is free software: you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License as published by
7 | # the Free Software Foundation, either version 3 of the License, or
8 | # (at your option) any later version.
9 | #
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | # GNU General Public License for more details.
14 | #
15 | # You should have received a copy of the GNU General Public License
16 | # along with this program. If not, see .
17 |
18 | __author__ = 'riot'
19 |
20 | import pygame
21 | from circuits import Event
22 |
23 |
24 | # App/GUI management events
25 |
26 | class guiresize(Event):
27 | def __init__(self, width, height, *args):
28 | super(guiresize, self).__init__(*args)
29 | self.height = height
30 | self.width = width
31 |
32 |
33 | class guiquit(Event):
34 | def __init__(self, reason, *args):
35 | super(guiquit, self).__init__(*args)
36 | self.reason = reason
37 |
38 |
39 | # Control events
40 |
41 | class controlinput(Event):
42 | def __init__(self, inputevent, *args):
43 | super(controlinput, self).__init__(*args)
44 | self.input = inputevent
45 |
46 |
47 | class joystickchange(controlinput):
48 | def __init__(self, *args):
49 | super(joystickchange, self).__init__(*args)
50 |
51 |
52 | # Midi events
53 |
54 | class resetcclock(Event):
55 | pass
56 |
57 |
58 | class midicc(Event):
59 | def __init__(self, cc, data=None, force=False, *args):
60 | super(midicc, self).__init__(*args)
61 |
62 | self.cc = cc
63 | self.data = data
64 | self.force = force
65 |
66 |
67 | class midiinput(Event):
68 | def __init__(self, data, *args):
69 | super(midiinput, self).__init__(*args)
70 | self.code = data[0][0]
71 | self.data = data
72 |
73 |
74 | class midinote(Event):
75 | def __init__(self, note, velocity, midi_channel, length=None, *args):
76 | super(midinote, self).__init__(*args)
77 | self.note = note
78 | self.velocity = velocity
79 | self.midi_channel = midi_channel
80 | self.length = length
81 | self.start = 0
82 |
83 |
84 | # Router events
85 |
86 | class loadscene(Event):
87 | def __init__(self, scene, *args):
88 | super(loadscene, self).__init__(*args)
89 | self.scene = scene
90 |
91 |
92 | class loadprogram(Event):
93 | def __init__(self, program, *args):
94 | super(loadprogram, self).__init__(*args)
95 | self.program = program
96 |
97 |
98 | class saveprogram(loadprogram):
99 | pass
100 |
101 |
102 | # Keyboard
103 |
104 | class keypress(Event):
105 | def __init__(self, ev, *args):
106 | super(keypress, self).__init__(*args)
107 | self.ev = ev
108 |
109 | def __repr__(self):
110 |
111 | if len(self.channels) > 1:
112 | channels = repr(self.channels)
113 | elif len(self.channels) == 1:
114 | channels = str(self.channels[0])
115 | else:
116 | channels = ""
117 |
118 | data = "%s %s" % (
119 | ", ".join(repr(arg) for arg in self.args),
120 | ", ".join("%s=%s" % (k, repr(v)) for k, v in self.kwargs.items())
121 | )
122 |
123 | key = pygame.key.name(self.ev.key)
124 | ev = self.ev
125 |
126 | return "<%s_%s_%s[%s] (%s)>" % (self.name, key, ev, channels, data)
127 |
--------------------------------------------------------------------------------
/avio/bpm.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: UTF-8 -*-
3 |
4 | # AVIO - The Python Audio Video Input Output Suite
5 | # ================================================
6 | # Copyright (C) 2015-2020 riot
7 | #
8 | # This program is free software: you can redistribute it and/or modify
9 | # it under the terms of the GNU General Public License as published by
10 | # the Free Software Foundation, either version 3 of the License, or
11 | # (at your option) any later version.
12 | #
13 | # This program is distributed in the hope that it will be useful,
14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 | # GNU General Public License for more details.
17 | #
18 | # You should have received a copy of the GNU General Public License
19 | # along with this program. If not, see .
20 |
21 | from datetime import datetime
22 |
23 | from circuits import Event
24 | from isomer.component import ConfigurableComponent
25 |
26 |
27 | class bpm_tap(Event):
28 | pass
29 |
30 |
31 | class BPM(ConfigurableComponent):
32 | """Listens for configurable joystick/gamepad button combos and triggers
33 | preconfigured events"""
34 |
35 | channel = "AVIO"
36 |
37 | configprops = {
38 | }
39 |
40 | def __init__(self, *args):
41 | super(BPM, self).__init__("BPM", args)
42 | self.log("Initializing BPM controller")
43 |
44 | self.timer = None
45 |
46 | self.offset = 0
47 | self.bpm = 0
48 | # Historic reference over taps
49 | self.taps = []
50 | # Minimum tap count
51 | self.tapcount = 2
52 | # Factor oldtaptimeout gets multiplied with, when we're still accurate
53 | self.approximationprecision = 2
54 | self.oldtaptimeout = 5
55 |
56 | def tap(self, event):
57 | self.log("TAP")
58 |
59 | bpm = 0
60 |
61 | self.taps.append(datetime.now())
62 |
63 | # first: Weed out old data and analyze precision of last taps
64 | latest = self.taps[-1]
65 | if len(self.taps) > 1: # we have enough keys for a better approximation
66 | secondlatest = self.taps[-2]
67 |
68 | delta = latest - secondlatest
69 | deltamicroseconds = delta.seconds * 1000000 + delta.microseconds
70 |
71 | proposedbpm = 60000000.0 / deltamicroseconds
72 |
73 | if (proposedbpm - (proposedbpm * 0.1) < bpm) and \
74 | (proposedbpm + (proposedbpm * 0.1) > bpm):
75 | # we're in range (+- 10%)
76 | self.oldtaptimeout *= self.approximationprecision
77 |
78 | # second: weed out those old keytaps. They sure do not form the beat anymore.
79 | while ((latest - self.taps[0]).seconds > self.oldtaptimeout) and len(
80 | self.taps) > 0:
81 | del self.taps[0]
82 |
83 | # if we still have enough of them keytaps: go on, get some bpm
84 | if len(self.taps) > self.tapcount:
85 |
86 | # third: calculate average time-delta
87 | count = 0
88 | oldtap = self.taps[0]
89 | deltasum = 0
90 | for tap in self.taps[1:]:
91 | delta = tap - oldtap
92 | deltamicrosecs = delta.seconds * 1000000 + delta.microseconds
93 | deltasum += deltamicrosecs
94 | oldtap = tap
95 | count += 1
96 |
97 | avgdelta = deltasum / count
98 |
99 | # third: calculate the current bpm and set a reasonable oldtaptimeout
100 | bpm = 60000000.0 / avgdelta
101 |
102 | oldtaptimeout = pow((60 / bpm) + 1, 2)
103 |
104 | self.log("BPM:", bpm, len(self.taps))
105 | else:
106 | self.log("TAP SOME MORE!")
107 |
--------------------------------------------------------------------------------
/avio/combotrigger.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: UTF-8 -*-
3 |
4 | # AVIO - The Python Audio Video Input Output Suite
5 | # ================================================
6 | # Copyright (C) 2015-2020 riot
7 | #
8 | # This program is free software: you can redistribute it and/or modify
9 | # it under the terms of the GNU General Public License as published by
10 | # the Free Software Foundation, either version 3 of the License, or
11 | # (at your option) any later version.
12 | #
13 | # This program is distributed in the hope that it will be useful,
14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 | # GNU General Public License for more details.
17 | #
18 | # You should have received a copy of the GNU General Public License
19 | # along with this program. If not, see .
20 |
21 | import pygame
22 |
23 | from circuits import Timer, Event
24 | from isomer.component import ConfigurableComponent, handler
25 | from isomer.logger import debug
26 |
27 |
28 | class reset_combo_trigger(Event):
29 | pass
30 |
31 |
32 | class ComboTrigger(ConfigurableComponent):
33 | """Listens for configurable joystick/gamepad button combos and triggers
34 | preconfigured events"""
35 |
36 | channel = "AVIO"
37 |
38 | configprops = {
39 | 'combos': {
40 | 'type': 'array',
41 | 'default': [],
42 | 'items': {
43 | 'type': 'object',
44 | 'properties': {
45 | 'combo': {
46 | 'type': 'string',
47 | 'description':
48 | 'X = X key, O = O key, A = Triangle key, S = Square key'},
49 | 'event': {'type': 'string'}
50 | }
51 | }
52 | },
53 | 'timeout': {'type': 'number', 'default': 1.5}
54 | }
55 |
56 | def __init__(self, *args):
57 | super(ComboTrigger, self).__init__("COMBOTRIGGER", args)
58 | self.log("Initializing ComboTrigger controller")
59 |
60 | self.timer = None
61 | self.input = ""
62 |
63 | self._build_combo_lookup()
64 |
65 | @handler("reload_configuration", channel="isomer-web")
66 | def reload_configuration(self, event):
67 | """Reload the current configuration and set up everything depending on it"""
68 |
69 | super(ComboTrigger, self).reload_configuration(event)
70 | if event.target != self.uniquename:
71 | return
72 |
73 | self._build_combo_lookup()
74 |
75 | def _build_combo_lookup(self):
76 | self.log("Updating trigger lookup")
77 | self.combos = {}
78 | for item in self.config.combos:
79 | self.combos[item['combo']] = item['event']
80 |
81 | @handler("reset_combo_trigger")
82 | def reset(self, event):
83 | self.log("Resetting combo trigger. Input so far:", self.input, lvl=debug)
84 | self.input = ""
85 |
86 | @handler("joystickchange")
87 | def joystickchange(self, event):
88 | if event.input.type != pygame.JOYBUTTONUP:
89 | return
90 | # self.log(event.input, pretty=True)
91 |
92 | button = event.input.button
93 | key = ""
94 |
95 | if button == 0:
96 | key = "X"
97 | elif button == 1:
98 | key = "O"
99 | elif button == 2:
100 | key = "A"
101 | elif button == 3:
102 | key = "S"
103 | self.input += key
104 |
105 | if self.timer is not None:
106 | self.timer.unregister()
107 |
108 | if self.input in self.combos:
109 | self.log("Firing combo event for combo", self.input, lvl=debug)
110 | self.fireEvent(Event.create(self.combos[self.input]))
111 | self.input = ""
112 | else:
113 | self.timer = Timer(self.config.timeout, reset_combo_trigger()).register(self)
114 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: UTF-8 -*-
3 |
4 | # Isomer - The distributed application framework
5 | # ==============================================
6 | # Copyright (C) 2011-2019 Heiko 'riot' Weinen and others.
7 | #
8 | # This program is free software: you can redistribute it and/or modify
9 | # it under the terms of the GNU Affero General Public License as published by
10 | # the Free Software Foundation, either version 3 of the License, or
11 | # (at your option) any later version.
12 | #
13 | # This program is distributed in the hope that it will be useful,
14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 | # GNU Affero General Public License for more details.
17 | #
18 | # You should have received a copy of the GNU Affero General Public License
19 | # along with this program. If not, see .
20 |
21 | __author__ = "Heiko 'riot' Weinen"
22 | __license__ = "AGPLv3"
23 |
24 | from setuptools import setup, find_packages
25 |
26 | setup(
27 | name="avio",
28 | version="2.0.0",
29 | description="AVIO is a collection of general purpose audio/video/midi/controller "
30 | "components for Isomer",
31 | author="Heiko 'riot' Weinen",
32 | author_email="riot@c-base.org",
33 | url="https://github.com/ri0t/avio",
34 | license="GNU Affero General Public License v3",
35 | classifiers=[
36 | 'Development Status :: 2 - Pre-Alpha',
37 | 'Environment :: Web Environment',
38 | # 'Framework :: Isomer :: 1',
39 | 'License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)',
40 | 'Operating System :: POSIX :: Linux',
41 | 'Programming Language :: Python :: 3',
42 | 'Programming Language :: Python :: 3 :: Only',
43 | 'Programming Language :: Python :: 3.5',
44 | 'Programming Language :: Python :: 3.6',
45 | 'Programming Language :: Python :: 3.7',
46 | 'Programming Language :: Python :: 3.8',
47 | 'Programming Language :: Python :: Implementation :: PyPy',
48 | 'Programming Language :: Python :: Implementation :: CPython',
49 | 'Topic :: Multimedia',
50 | 'Topic :: Multimedia :: Graphics',
51 | 'Topic :: Multimedia :: Graphics :: Capture',
52 | 'Topic :: Multimedia :: Graphics :: Graphics Conversion',
53 | 'Topic :: Multimedia :: Sound/Audio',
54 | 'Topic :: Multimedia :: Sound/Audio :: Analysis',
55 | 'Topic :: Multimedia :: Sound/Audio :: Capture/Recording',
56 | 'Topic :: Multimedia :: Sound/Audio :: Conversion',
57 | 'Topic :: Multimedia :: Sound/Audio :: MIDI',
58 | 'Topic :: Multimedia :: Sound/Audio :: Mixers',
59 | 'Topic :: Multimedia :: Sound/Audio :: Players',
60 | 'Topic :: Multimedia :: Sound/Audio :: Sound Synthesis',
61 | 'Topic :: Multimedia :: Video',
62 | 'Topic :: Multimedia :: Video :: Capture',
63 | 'Topic :: Multimedia :: Video :: Conversion',
64 | 'Topic :: Multimedia :: Video :: Display'
65 | ],
66 | packages=find_packages(),
67 | package_data={'avio': ['../docs/*', '../frontend/*']},
68 | include_package_data=True,
69 | long_description=""""AVIO
70 | ====
71 |
72 | AVIO stands for Audio Video Input Output.
73 |
74 | This software package contains general purpose modules for working (and playing!)
75 | with mixed media data. It strives to cover most of the available dataformats and their
76 | various input and output methods.
77 | For example, there is a HID (Joysticks, Gamepads, etc) input component that you can wire
78 | up to transmit its data to a MIDI output to generate general MIDI modulation data or
79 | even notes. Other components work with image or video data.
80 |
81 | Read the paper online: https://riot.crew.c-base.org/avio.pdf
82 |
83 | This software package is a plugin module for Isomer.
84 | """,
85 | dependency_links=[],
86 | install_requires=[
87 | 'pygame>=1.9.1release',
88 | 'isomer>=1.0',
89 | 'isomer-camera>=0.0.1',
90 | 'isomer-audio>=0.0.1',
91 | 'isomer-protocols>=0.0.1',
92 | 'imageio>=2.8.0'
93 | ],
94 | entry_points="""[isomer.schemata]
95 | [isomer.components]
96 | midiinput=avio.midi:MidiInput
97 | midioutput=avio.midi:MidiOutput
98 | hidcontroller=avio.controller:HIDController
99 | trigger=avio.trigger:Trigger
100 | combotrigger=avio.combotrigger:ComboTrigger
101 | bpm=avio.bpm:BPM
102 | videomixer=avio.videomixer:VideoMixer
103 | library=avio.library:Library
104 | gifmaster=avio.gifplayer:GIFMaster
105 | [isomer.management]
106 | [isomer.provisions]
107 | """,
108 | test_suite="tests.main.main",
109 | )
110 |
--------------------------------------------------------------------------------
/frontend/assets/avio_menu_logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
94 |
--------------------------------------------------------------------------------
/avio-legacy/matelight.py:
--------------------------------------------------------------------------------
1 | # AVIO - The Python Audio Video Input Output Suite
2 | # ================================================
3 | # Copyright (C) 2015 riot
4 | #
5 | # This program is free software: you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License as published by
7 | # the Free Software Foundation, either version 3 of the License, or
8 | # (at your option) any later version.
9 | #
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | # GNU General Public License for more details.
14 | #
15 | # You should have received a copy of the GNU General Public License
16 | # along with this program. If not, see .
17 |
18 | __author__ = 'riot'
19 |
20 | import pygame
21 | import cv2 as cv
22 | import socket
23 | import os
24 | import numpy as np
25 |
26 | from circuits import Event, Timer, handler
27 |
28 | from avio_core.component import AVIOComponent
29 | from avio_core.logger import verbose
30 |
31 |
32 | class clear_ml(Event):
33 | """Send a black frame"""
34 | pass
35 |
36 |
37 | class fade_out_ml(Event):
38 | """Initiate hard fading out because of content loss or similar."""
39 | pass
40 |
41 |
42 | class refresh_ml(Event):
43 | """Periodically sent last frame, so there's no idle-mode when there are no updated frames"""
44 | pass
45 |
46 |
47 | class transmit_ml(Event):
48 | """Transmit a frame to the display"""
49 |
50 | def __init__(self, frame, *args, **kwargs):
51 | super(transmit_ml, self).__init__(*args, **kwargs)
52 | self.frame = frame
53 |
54 |
55 | class Matelight(AVIOComponent):
56 | """Matelight connector with some minimal extra facilities"""
57 |
58 | channel = "matelight"
59 |
60 | def __init__(self, host="matelight", port=1337, *args):
61 | super(Matelight, self).__init__(*args)
62 | self.log("Initializing matelight output")
63 |
64 | self.host = host
65 | self.port = port
66 |
67 | self.size = (40, 16)
68 | self.gamma = 0.5
69 |
70 | self.fading = None
71 |
72 | self.auto_restart = True
73 | self.output_broken = False
74 |
75 | self.last_frame = np.zeros(self.size, np.uint8)
76 |
77 | path = os.path.abspath("./images/startscreen_matelight.png")
78 | boot_image = cv.imread(path)
79 |
80 | self.boot_image = cv.cvtColor(boot_image, cv.COLOR_BGR2RGB)
81 | self._transmit(self.boot_image)
82 |
83 | self.fade_timer = None
84 | self.init_timer = Timer(5, fade_out_ml()).register(self)
85 | self.refresh_timer = Timer(1, refresh_ml(), persist=True).register(self)
86 |
87 | def started(self, *args):
88 | self.log("Starting matelight output on device %s:%i" % (self.host, self.port))
89 |
90 | def fade_out_ml(self, event):
91 | if self.fading is None:
92 | self.fading = 20
93 | self.fade_timer = Timer(1 / 60.0, fade_out_ml(), persist=True).register(self)
94 | elif self.fading > 0:
95 | new_frame = (self.last_frame * 0.9).astype(np.uint8)
96 | self._transmit(new_frame)
97 | self.fading -= 1
98 | elif self.fading <= 0:
99 | self._clear()
100 | self.fade_timer.unregister()
101 | self.fading = None
102 |
103 | def _clear(self):
104 | self.log('Clearing')
105 | img = np.zeros((40, 16, 3), np.uint8)
106 | self._transmit(img)
107 |
108 | def clear_ml(self, event):
109 | self._clear()
110 |
111 | @handler('refresh_ml')
112 | def refresh_ml(self, event):
113 | self._transmit(self.last_frame)
114 |
115 | def _transmit(self, image):
116 | if self.output_broken and not self.auto_restart:
117 | return
118 |
119 | self.log('Transmitting image, shape:', image.shape, lvl=verbose)
120 |
121 | self.last_frame = image
122 |
123 | if self.gamma != 1:
124 | image = (image * self.gamma).astype(np.uint8)
125 |
126 | ml_data = bytearray(image) + b"\00\00\00\00"
127 |
128 | try:
129 | sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
130 | sock.sendto(ml_data, (self.host, self.port))
131 | except Exception as e:
132 | self.log("Error during matelight transmission: ", e)
133 | self.output_broken = True
134 |
135 | def transmit_ml(self, event):
136 | if self.fade_timer is not None:
137 | self.fade_timer.unregister()
138 | self.fade_timer = None
139 |
140 | self._transmit(event.frame)
141 |
142 | @handler('keypress')
143 | def keypress(self, event):
144 | if event.ev.key == 223 and event.ev.mod == 1:
145 | self._transmit(self.boot_image)
146 | Timer(2, fade_out_ml()).register(self)
147 | if event.ev.mod & pygame.KMOD_LCTRL and event.ev.mod & pygame.KMOD_LSHIFT:
148 | if event.ev.key == pygame.K_MINUS:
149 | self.gamma = max(0.1, self.gamma - 0.1)
150 | elif event.ev.key == pygame.K_PLUS:
151 | self.gamma = min(1, self.gamma + 0.1)
152 | self.log(self.gamma)
153 |
--------------------------------------------------------------------------------
/avio/library.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: UTF-8 -*-
3 |
4 | # AVIO - The Python Audio Video Input Output Suite
5 | # ================================================
6 | # Copyright (C) 2015-2020 riot
7 | #
8 | # This program is free software: you can redistribute it and/or modify
9 | # it under the terms of the GNU General Public License as published by
10 | # the Free Software Foundation, either version 3 of the License, or
11 | # (at your option) any later version.
12 | #
13 | # This program is distributed in the hope that it will be useful,
14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 | # GNU General Public License for more details.
17 | #
18 | # You should have received a copy of the GNU General Public License
19 | # along with this program. If not, see .
20 |
21 | import os
22 | from base64 import b64encode
23 |
24 | import pygame
25 | from PIL import Image
26 | from isomer.component import ConfigurableComponent, handler, authorized_event
27 | from isomer.events.client import send
28 | from isomer.logger import verbose
29 |
30 |
31 | class unsubscribe(authorized_event):
32 | pass
33 |
34 |
35 | class subscribe(authorized_event):
36 | pass
37 |
38 |
39 | class Library(ConfigurableComponent):
40 | """"""
41 |
42 | channel = "AVIO"
43 |
44 | configprops = {
45 | 'cache_directory': {'type': 'string', 'default': '../../cache'}
46 | }
47 |
48 | def __init__(self, *args):
49 | super(Library, self).__init__("LIBRARY", args)
50 | self.log("Initializing Simple Library")
51 |
52 | pygame.font.init()
53 |
54 | self.clients = []
55 |
56 | self.storage_path = os.path.abspath(os.path.join(__file__, "../../library"))
57 |
58 | self.files = {
59 | 'gif': {},
60 | 'ttf': {},
61 | }
62 |
63 | for location in self.files:
64 | os.makedirs(
65 | os.path.abspath(
66 | os.path.join(__file__, self.config.cache_directory, location)
67 | ),
68 | exist_ok=True
69 | )
70 |
71 | for root, dirs, files in os.walk(self.storage_path):
72 | for file in files:
73 | extension = str(os.path.splitext(file)[1]).lstrip('.')
74 | self.log(extension, os.path.splitext(file), lvl=verbose)
75 | self.log(root, file, lvl=verbose)
76 | self.files[extension][os.path.join(root, file)] = {'image': ''}
77 |
78 | for filename, item in self.files['gif'].items():
79 | self.log("Scanning:", filename)
80 |
81 | with open(filename, "rb") as f:
82 | image = b64encode(f.read())
83 | base64 = image.decode('utf-8')
84 |
85 | item['image'] = base64
86 | item['name'] = os.path.basename(filename)
87 |
88 | for filename, item in self.files['ttf'].items():
89 | self.log("Scanning:", filename)
90 | preview_file = os.path.abspath(
91 | os.path.join(
92 | __file__, self.config.cache_directory, 'ttf',
93 | os.path.basename(filename) + ".jpg"
94 | )
95 | )
96 |
97 | try:
98 | with open(preview_file, "rb") as f:
99 | preview = b64encode(f.read())
100 |
101 | except FileNotFoundError:
102 | font = pygame.font.Font(filename, 12)
103 | rendered = font.render("AaBbCc", True, (255, 255, 255))
104 | surface = pygame.Surface((40, 16))
105 | surface.blit(rendered, (2, 2))
106 | data = pygame.image.tostring(surface, 'RGB')
107 | img = Image.frombytes('RGB', (40, 16), data)
108 |
109 | with open(preview_file, "wb") as f:
110 | img.save(f, 'JPEG')
111 |
112 | preview = b64encode(img.tobytes())
113 |
114 | base64 = preview.decode('utf-8')
115 | item['image'] = base64
116 | item['name'] = os.path.basename(filename)
117 |
118 | @handler(subscribe, channel="isomer-web")
119 | def subscribe(self, event):
120 | self.log("Subscription Event:", event.client)
121 | if event.client.uuid not in self.clients:
122 | self.clients.append(event.client.uuid)
123 | packet = {
124 | 'component': 'avio.library',
125 | 'action': 'library',
126 | 'data': self.files
127 | }
128 | self.fireEvent(send(event.client.uuid, packet), "isomer-web")
129 |
130 | @handler(unsubscribe, channel="isomer-web")
131 | def unsubscribe(self, event):
132 | self.log("Unsubscription Event:", event.client)
133 | if event.client.uuid in self.clients:
134 | self.clients.remove(event.client.uuid)
135 |
136 | @handler("userlogout", channel="isomer-web")
137 | def userlogout(self, event):
138 | self.stop_client(event)
139 |
140 | @handler("clientdisconnect", channel="isomer-web")
141 | def clientdisconnect(self, event):
142 | """Handler to deal with a possibly disconnected simulation frontend
143 |
144 | :param event: ClientDisconnect Event
145 | """
146 |
147 | self.stop_client(event)
148 |
149 | def stop_client(self, event):
150 | try:
151 | if event.clientuuid in self.clients:
152 | self.clients.remove(event.clientuuid)
153 |
154 | self.log("Remote simulator disconnected")
155 | else:
156 | self.log("Client not subscribed")
157 | except Exception as e:
158 | self.log("Strange thing while client disconnected", e, type(e))
159 |
--------------------------------------------------------------------------------
/avio/videomixer.py:
--------------------------------------------------------------------------------
1 | # AVIO - The Python Audio Video Input Output Suite
2 | # ================================================
3 | # Copyright (C) 2015 riot
4 | #
5 | # This program is free software: you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License as published by
7 | # the Free Software Foundation, either version 3 of the License, or
8 | # (at your option) any later version.
9 | #
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | # GNU General Public License for more details.
14 | #
15 | # You should have received a copy of the GNU General Public License
16 | # along with this program. If not, see .
17 |
18 | __author__ = 'riot'
19 |
20 | import numpy as np
21 | import cv2 as cv
22 |
23 | from circuits import Timer, Event
24 |
25 | from isomer.component import ConfigurableComponent, handler, authorized_event
26 | from isomer.events.client import broadcast, send
27 | from isomer.logger import verbose, hilight
28 |
29 | # from avio.gui import mouseevent
30 | from isomer.matelight import transmit_ml
31 |
32 |
33 | class mix_image(Event):
34 | pass
35 |
36 |
37 | class unsubscribe(authorized_event):
38 | pass
39 |
40 |
41 | class get_data(authorized_event):
42 | pass
43 |
44 |
45 | class subscribe(authorized_event):
46 | pass
47 |
48 |
49 | class update_channel(authorized_event):
50 | pass
51 |
52 |
53 | class VideoMixer(ConfigurableComponent):
54 | configprops = {
55 | 'channels': {
56 | 'type': 'array',
57 | 'default': [],
58 | 'items': {
59 | 'type': 'object',
60 | 'properties': {
61 | 'no': {'type': 'integer'},
62 | 'alpha': {'type': 'number', 'default': 0.5},
63 | 'gamma': {'type': 'number', 'default': 0.5},
64 |
65 | }
66 | }
67 | },
68 | 'fps': {'type': 'integer', 'default': 30}
69 | }
70 |
71 | channel = "AVIO"
72 |
73 | def __init__(self, delay=0.010, *args):
74 |
75 | super(VideoMixer, self).__init__("VIDEOMIXER", args)
76 | self.log("Initializing Videomixer")
77 |
78 | self.channels = {}
79 | self.images = {}
80 |
81 | self.clients = []
82 |
83 | self.timer = Timer(1.0 / self.config.fps, Event.create("mix"),
84 | persist=True).register(self)
85 |
86 | @handler(subscribe, channel="isomer-web")
87 | def subscribe(self, event):
88 | self.log("Subscription Event:", event.client)
89 | if event.client.uuid not in self.clients:
90 | self.clients.append(event.client.uuid)
91 |
92 | @handler(unsubscribe, channel="isomer-web")
93 | def unsubscribe(self, event):
94 | self.log("Unsubscription Event:", event.client)
95 | if event.client.uuid in self.clients:
96 | self.clients.remove(event.client.uuid)
97 |
98 | @handler("userlogout", channel="isomer-web")
99 | def userlogout(self, event):
100 | self.stop_client(event)
101 |
102 | @handler("clientdisconnect", channel="isomer-web")
103 | def clientdisconnect(self, event):
104 | """Handler to deal with a possibly disconnected simulation frontend
105 |
106 | :param event: ClientDisconnect Event
107 | """
108 |
109 | self.stop_client(event)
110 |
111 | @handler("reload_configuration", channel="isomer-web")
112 | def reload_configuration(self, event):
113 | """Reload the current configuration and set up everything depending on it"""
114 |
115 | super().reload_configuration(event)
116 |
117 | @handler(get_data, channel="isomer-web")
118 | def get_data(self, event):
119 | self.log("Providing mixer config:", event.client, pretty=True)
120 | response = {
121 | 'component': 'avio.videomixer',
122 | 'action': 'get_data',
123 | 'data': self.config.serializablefields()
124 | }
125 | self.fireEvent(send(event.client.uuid, response), "isomer-web")
126 |
127 | @handler(update_channel, channel="isomer-web")
128 | def update_channel(self, event):
129 | self.log('Updating channel:', event.data)
130 | self.channels[event.data['no']] = event.data['settings']
131 |
132 | def stop_client(self, event):
133 | try:
134 | if event.clientuuid in self.clients:
135 | self.clients.remove(event.clientuuid)
136 |
137 | self.log("Remote simulator disconnected")
138 | else:
139 | self.log("Client not subscribed")
140 | except Exception as e:
141 | self.log("Strange thing while client disconnected", e, type(e))
142 |
143 | def _notify_clients(self, event):
144 | if len(self.clients) == 0:
145 | return
146 |
147 | message = {
148 | 'component': 'avio.mixer',
149 | 'action': 'update',
150 | 'data': None
151 | }
152 | self.fireEvent(
153 | broadcast("clientgroup", message, group=self.clients),
154 | "isomer-web"
155 | )
156 |
157 | def mix_image(self, channel, frame):
158 | self.images[channel] = frame
159 |
160 | def mix(self):
161 | self.log('Mixing down', lvl=verbose)
162 | output = np.zeros((16, 40, 3), np.uint8)
163 |
164 | for channel in self.config.channels:
165 | try:
166 | frame = self.images[channel['no']]
167 | alpha = channel['alpha']
168 | gamma = channel['gamma']
169 | beta = 0.5
170 |
171 | output = cv.addWeighted(output, alpha, frame, beta, gamma)
172 | except KeyError:
173 | pass
174 |
175 | self.fireEvent(transmit_ml(output), 'matelight')
176 |
--------------------------------------------------------------------------------
/avio/midi.py:
--------------------------------------------------------------------------------
1 | # AVIO - The Python Audio Video Input Output Suite
2 | # ================================================
3 | # Copyright (C) 2015 riot
4 | #
5 | # This program is free software: you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License as published by
7 | # the Free Software Foundation, either version 3 of the License, or
8 | # (at your option) any later version.
9 | #
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | # GNU General Public License for more details.
14 | #
15 | # You should have received a copy of the GNU General Public License
16 | # along with this program. If not, see .
17 |
18 | __author__ = 'riot'
19 |
20 | import pygame
21 | import pygame.midi
22 |
23 | from circuits import Event, Timer
24 |
25 | from isomer.logger import verbose, warn
26 | from isomer.component import ConfigurableComponent, handler
27 |
28 | from avio.events import midiinput
29 |
30 |
31 | class MidiOutput(ConfigurableComponent):
32 | configprops = {
33 | 'deviceid': {
34 | 'type': 'number',
35 | 'default': 0
36 | },
37 | 'latency': {
38 | 'type': 'number',
39 | 'default': 0
40 | },
41 | 'buffer_size': {
42 | 'type': 'number',
43 | 'default': 4096
44 | }
45 | }
46 |
47 | def __init__(self, *args):
48 | super(MidiOutput, self).__init__("MIDIOUT", *args)
49 | self.log("Initializing midi output")
50 |
51 | pygame.init()
52 | pygame.midi.init()
53 |
54 | self.output = None
55 |
56 | self.total_ppn = 0
57 | self.ppn = 0
58 |
59 | self.deviceid = self.config.deviceid
60 | self.lastcc = {}
61 |
62 | self.notes_playing = []
63 |
64 | def started(self, *args):
65 | self.log("Starting midi output on device " + str(self.deviceid))
66 |
67 | self.output = pygame.midi.Output(
68 | self.config.deviceid, self.config.latency, self.config.buffer_size
69 | )
70 | self.output.set_instrument(0, 0)
71 |
72 | def midicc(self, event):
73 | # if not event.force and event.cc in self.lastcc:
74 | # if abs(self.lastcc[event.cc] - event.data) > 20:
75 | # #self.log("Not sending, due to too contrasting change")
76 | # return
77 |
78 | if event.cc in self.lastcc and self.lastcc[event.cc] == event.data:
79 | return
80 |
81 | self.log("Midi cc signal received: %i -> %i (%s) " % (
82 | event.cc, event.data, event.force))
83 |
84 | self.lastcc[event.cc] = event.data
85 | self.output.write_short(0xb0, event.cc, event.data)
86 |
87 | def midinote(self, event):
88 | event.start = self.total_ppn
89 | self.notes_playing.append(event)
90 | self.log('Playing note:', event.note, 'on', event.midi_channel, lvl=verbose)
91 | # self.output.note_on(event.note, event.velocity, event.midi_channel)
92 | self.output.write_short(0x90, event.note, event.velocity)
93 |
94 | def midiinput(self, event):
95 | if event.code == 248:
96 | self.total_ppn += 1
97 | self.ppn += 1
98 | self.ppn %= 24
99 | removable = []
100 | for note in self.notes_playing:
101 | self.log('PPN:', note.start + note.length, self.total_ppn, note.start,
102 | note.length)
103 | if note.start + note.length <= self.total_ppn:
104 | self.log('Note off again:', note.note, note.midi_channel)
105 | self.output.write_short(0x80, note.note, note.velocity)
106 | removable.append(note)
107 |
108 | for item in removable:
109 | self.notes_playing.remove(item)
110 |
111 | def resetcclock(self, event):
112 | self.log("Midi cc lock resetting")
113 | self.lastcc = {}
114 |
115 |
116 | class MidiInput(ConfigurableComponent):
117 | configprops = {
118 | 'deviceid': {
119 | 'type': 'number',
120 | 'default': 0
121 | },
122 | 'latency': {
123 | 'type': 'number',
124 | 'default': 0
125 | },
126 | 'delay': {
127 | 'type': 'number',
128 | 'default': 0.01
129 | }
130 | }
131 |
132 | def __init__(self, *args):
133 | super(MidiInput, self).__init__("MIDIIN", *args)
134 | self.log("Initializing midi input")
135 |
136 | pygame.init()
137 |
138 | self.input = None
139 |
140 | self.lastcc = {}
141 |
142 | self.deviceid = self.config.deviceid
143 | self.delay = self.config.delay
144 | self.ppn = 0
145 |
146 | @handler("ready", channel="*")
147 | def ready(self, *args):
148 | self.log(
149 | "Starting midi input on device " + str(self.deviceid) + " at %i Hz" % int(
150 | 1 / self.delay))
151 |
152 | try:
153 | self.input = pygame.midi.Input(self.config.deviceid, self.config.latency)
154 |
155 | Timer(self.delay, Event.create('peek'), self.channel, persist=True).register(
156 | self)
157 | except pygame.midi.MidiException:
158 | self.log("Could not open configured midi port:", self.config.deviceid,
159 | lvl=warn)
160 |
161 | def peek(self, event):
162 | if self.input and self.input.poll():
163 | while self.input.poll():
164 |
165 | mididata = self.input.read(1)
166 | if len(mididata) > 1:
167 | mididata = mididata[-1]
168 | else:
169 | mididata = mididata[0]
170 |
171 | if self.debug:
172 | self.log(mididata, pretty=True)
173 |
174 | self.fireEvent(midiinput(mididata))
175 |
--------------------------------------------------------------------------------
/avio/sequencer.py:
--------------------------------------------------------------------------------
1 | # AVIO - The Python Audio Video Input Output Suite
2 | # ================================================
3 | # Copyright (C) 2015 riot
4 | #
5 | # This program is free software: you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License as published by
7 | # the Free Software Foundation, either version 3 of the License, or
8 | # (at your option) any later version.
9 | #
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | # GNU General Public License for more details.
14 | #
15 | # You should have received a copy of the GNU General Public License
16 | # along with this program. If not, see .
17 |
18 | __author__ = 'riot'
19 |
20 | import pygame
21 | import cv2 as cv
22 | import socket
23 | import os
24 | import numpy as np
25 |
26 | from circuits import Event, Timer, handler
27 |
28 | from avio_core.component import AVIOComponent
29 | from avio_core.matelight import transmit_ml
30 | from avio_core.logger import verbose
31 | from avio_core.events import midinote
32 |
33 |
34 | def to_rgb1(im):
35 | """Convert grayscale image to RGB"""
36 | w, h = im.shape
37 | ret = np.empty((w, h, 3), dtype=np.uint8)
38 | ret[:, :, 0] = im
39 | ret[:, :, 1] = im
40 | ret[:, :, 2] = im
41 | return ret
42 |
43 |
44 | class Sequencer(AVIOComponent):
45 | def __init__(self, channel="matelight", *args):
46 | """Step sequencer"""
47 |
48 | super(Sequencer, self).__init__(*args)
49 | self.log("Initializing Sequencer component")
50 |
51 | self.channel = channel
52 | self.midi_channel = 0
53 |
54 | self.size = (16, 40, 3)
55 | self.matrix = self.frame = np.zeros(self.size, np.uint8)
56 |
57 | self.last_frame = None
58 |
59 | self.step = 0
60 | self.playing_row = 0
61 | self.ppn = 0
62 |
63 | self.mode = self.column = self.row = 0
64 |
65 | self.steps = np.zeros(self.size, np.uint8)
66 |
67 | self.default_note = 64
68 |
69 | self.last_note = None
70 |
71 | self.routing = {
72 | 0: 'note',
73 | 1: 'velocity',
74 | 2: 'channel'
75 | }
76 |
77 | def started(self, *args):
78 | self.log("Starting Sequencer. Output to:", self.channel)
79 |
80 | def _transmit(self):
81 | self.log('Transmitting frame', lvl=verbose)
82 | self.last_frame = self.frame
83 | self.fireEvent(transmit_ml(self.frame), self.channel)
84 | self.frame = np.zeros(self.size, np.uint8)
85 |
86 | def _send_step(self):
87 | step = self.steps[self.playing_row][self.step]
88 | if step[0] > 0:
89 | self.fireEvent(midinote(step[0], step[1], self.midi_channel, step[2]))
90 |
91 | @handler("midiinput")
92 | def midi_input(self, event):
93 | """Handles incoming midi data like clock"""
94 |
95 | if event.code == 248:
96 | self.ppn = self.ppn + 1
97 | self.ppn %= 24
98 | if self.debug:
99 | print("#" if self.ppn == 0 else ".", end="", flush=True)
100 | if self.ppn == 0:
101 | self.step = (self.step + 1) % self.size[1]
102 | self._send_step()
103 | self._render()
104 |
105 | def _render(self):
106 | self.frame = to_rgb1(self.steps[:, :, self.mode])
107 | self.frame[self.row][self.column] = [64, 196, 255]
108 | self.frame[self.playing_row][self.step] = [196, 64, 64]
109 | self._transmit()
110 |
111 | @handler("keypress")
112 | def keypress(self, event):
113 |
114 | step = self.steps[self.row][self.column][self.mode]
115 | mod = event.ev.mod
116 |
117 | move = 1
118 |
119 | matrix_changed = False
120 | old_row = self.row
121 | old_col = self.column
122 |
123 | alt = mod & pygame.KMOD_LALT
124 | lshift = mod & pygame.KMOD_LSHIFT
125 | ctrl = mod & pygame.KMOD_LCTRL
126 |
127 | # self.log('MODS:', alt, lshift, ctrl)
128 |
129 | if alt:
130 | move = 4
131 | if ctrl:
132 | move = move * 2
133 |
134 | if event.ev.key == pygame.K_RIGHT:
135 | self.column += move
136 | elif event.ev.key == pygame.K_LEFT:
137 | self.column -= move
138 | elif event.ev.key == pygame.K_DOWN:
139 | self.row += move
140 | elif event.ev.key == pygame.K_UP:
141 | self.row -= move
142 | elif event.ev.key == pygame.K_TAB:
143 | self.mode += 1
144 | self.mode = self.mode % 3
145 | matrix_changed = True
146 | elif event.ev.key == pygame.K_SPACE:
147 | if self.mode == 0:
148 | value = self.default_note
149 | elif self.mode == 1:
150 | value = 127
151 | elif self.mode == 2:
152 | value = 16
153 |
154 | self.steps[self.row][self.column][self.mode] = value
155 | matrix_changed = True
156 | elif event.ev.key == pygame.K_PLUS and mod == 0:
157 | value = step + 5 * ((1 + mod) * 5)
158 | self.steps[self.row][self.column][self.mode] = min(value, 127)
159 | matrix_changed = True
160 | elif event.ev.key == pygame.K_MINUS and mod == 0:
161 | value = step - 5 * ((1 + mod) * 5)
162 | self.steps[self.row][self.column][self.mode] = max(value, 0)
163 | matrix_changed = True
164 | elif event.ev.key == pygame.K_PRINT:
165 | for i in range(self.size[1]):
166 | line = ""
167 | for j in range(self.size[0]):
168 | data = self.steps[j][i][self.mode]
169 | line += "%s" % ("#" if data else "-")
170 | print(line)
171 |
172 | self.row = self.row % self.size[0]
173 | self.column = self.column % self.size[1]
174 |
175 |
176 | if matrix_changed or (self.row != old_row or self.column != old_col):
177 | self._render()
178 |
--------------------------------------------------------------------------------
/avio/controller.py:
--------------------------------------------------------------------------------
1 | # AVIO - The Python Audio Video Input Output Suite
2 | # ================================================
3 | # Copyright (C) 2015 riot
4 | #
5 | # This program is free software: you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License as published by
7 | # the Free Software Foundation, either version 3 of the License, or
8 | # (at your option) any later version.
9 | #
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | # GNU General Public License for more details.
14 | #
15 | # You should have received a copy of the GNU General Public License
16 | # along with this program. If not, see .
17 |
18 | __author__ = 'riot'
19 |
20 | import pygame
21 | import json
22 |
23 | from circuits import Timer, Event
24 |
25 | from isomer.component import ConfigurableComponent, handler, authorized_event
26 | from isomer.events.client import broadcast
27 | from avio.events import joystickchange, guiquit, guiresize, keypress
28 |
29 | # from avio.gui import mouseevent
30 |
31 |
32 | class unsubscribe(authorized_event):
33 | pass
34 |
35 |
36 | class subscribe(authorized_event):
37 | pass
38 |
39 |
40 | def getJoystick(no):
41 | joystick = pygame.joystick.Joystick(no)
42 | joystick.init()
43 |
44 | # Get the name from the OS for the controller/joystick
45 | name = joystick.get_name()
46 | axes = {}
47 | buttons = {}
48 | hats = {}
49 |
50 | # Usually axis run in pairs, up/down for one, and left/right for
51 | # the other.
52 | axesCount = joystick.get_numaxes()
53 |
54 | for i in range(axesCount):
55 | axis = joystick.get_axis(i)
56 | axes[i] = axis
57 |
58 | buttonsCount = joystick.get_numbuttons()
59 |
60 | for i in range(buttonsCount):
61 | button = joystick.get_button(i)
62 | buttons[i] = button
63 |
64 | # Hat switch. All or nothing for direction, not like joysticks.
65 | # Value comes back in an array.
66 | hatsCount = joystick.get_numhats()
67 |
68 | for i in range(hatsCount):
69 | hat = joystick.get_hat(i)
70 | hats[i] = hat
71 |
72 | return {'name': name, 'axes': axes, 'buttons': buttons, 'hats': hats}
73 |
74 |
75 | class HIDController(ConfigurableComponent):
76 |
77 | configprops = {
78 | 'dead_center': {'type': 'number', 'default': 0.1},
79 | }
80 |
81 | channel = "AVIO"
82 |
83 | def __init__(self, delay=0.010, *args):
84 |
85 | super(HIDController, self).__init__("HIDCONTROLLER", args)
86 | self.log("Initializing HID controller")
87 |
88 | self.delay = delay
89 | self.acting = True
90 |
91 | self.clients = []
92 |
93 | pygame.init()
94 | pygame.joystick.init()
95 |
96 | self.joystick_count = pygame.joystick.get_count()
97 | self.joysticks = {}
98 |
99 | # Initialize each joystick:
100 | for no in range(self.joystick_count):
101 | self.joysticks[no] = getJoystick(no)
102 |
103 | self.log("%i HID devices found" % self.joystick_count)
104 |
105 | @handler(subscribe, channel="isomer-web")
106 | def subscribe(self, event):
107 | self.log("Subscription Event:", event.client)
108 | if event.client.uuid not in self.clients:
109 | self.clients.append(event.client.uuid)
110 |
111 | @handler(unsubscribe, channel="isomer-web")
112 | def unsubscribe(self, event):
113 | self.log("Unsubscription Event:", event.client)
114 | if event.client.uuid in self.clients:
115 | self.clients.remove(event.client.uuid)
116 |
117 | @handler("userlogout", channel="isomer-web")
118 | def userlogout(self, event):
119 | self.stop_client(event)
120 |
121 | @handler("clientdisconnect", channel="isomer-web")
122 | def clientdisconnect(self, event):
123 | """Handler to deal with a possibly disconnected simulation frontend
124 |
125 | :param event: ClientDisconnect Event
126 | """
127 |
128 | self.stop_client(event)
129 |
130 | def stop_client(self, event):
131 | try:
132 | if event.clientuuid in self.clients:
133 | self.clients.remove(event.clientuuid)
134 |
135 | self.log("Remote simulator disconnected")
136 | else:
137 | self.log("Client not subscribed")
138 | except Exception as e:
139 | self.log("Strange thing while client disconnected", e, type(e))
140 |
141 | def _notify_clients(self, event):
142 | if len(self.clients) == 0:
143 | return
144 | # TODO: DIRTY HACK! DIIIIIRTY! REALLY DIRTY!
145 | # "}
146 | data = json.loads("{" + str(event).split("{")[1].rstrip(")>").replace("'", '"'))
147 | data['action'] = str(event).split("-")[1].split(" ")[0]
148 | message = {
149 | 'component': 'avio.controller',
150 | 'action': 'update',
151 | 'data': data
152 | }
153 | self.fireEvent(
154 | broadcast("clientgroup", message, group=self.clients),
155 | "isomer-web"
156 | )
157 |
158 | @handler("ready", channel="*")
159 | def ready(self, *args):
160 | self.log("Starting controller input loop at %i Hz" % int(1 / self.delay))
161 | Timer(self.delay, Event.create('peek'), self.channel, persist=True).register(self)
162 |
163 | @handler("peek")
164 | def peek(self, event):
165 | if pygame.event.peek():
166 | for event in pygame.event.get():
167 | #self.log("EVENT: " + str(event))
168 |
169 | if event.type in (pygame.JOYAXISMOTION,
170 | pygame.JOYHATMOTION,
171 | pygame.JOYBUTTONDOWN,
172 | pygame.JOYBUTTONUP,
173 | pygame.JOYBALLMOTION):
174 | if event.type in (pygame.JOYAXISMOTION,
175 | pygame.JOYBALLMOTION):
176 | if abs(event.value) < self.config.dead_center:
177 | return
178 | self.fireEvent(joystickchange(event))
179 | self._notify_clients(event)
180 |
181 |
182 |
--------------------------------------------------------------------------------
/avio-legacy/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
147 |
--------------------------------------------------------------------------------
/avio-legacy/app.py:
--------------------------------------------------------------------------------
1 | # AVIO - The Python Audio Video Input Output Suite
2 | # ================================================
3 | # Copyright (C) 2015 riot
4 | #
5 | # This program is free software: you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License as published by
7 | # the Free Software Foundation, either version 3 of the License, or
8 | # (at your option) any later version.
9 | #
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | # GNU General Public License for more details.
14 | #
15 | # You should have received a copy of the GNU General Public License
16 | # along with this program. If not, see .
17 |
18 | __author__ = 'riot'
19 |
20 | import subprocess
21 | import os
22 | import sys
23 |
24 | import pygame
25 |
26 | from circuits import Timer
27 | from avio_core.component import AVIOComponent
28 |
29 | from avio_core.controller import Controller, getJoystick
30 |
31 | from avio_core.camera import CVCamera, CameraDisplay
32 | from avio_core.gif import GIFImage
33 | from avio_core.midi import MidiOutput, MidiInput
34 | from avio_core.router import Router
35 | from avio_core.matelight import Matelight
36 | from avio_core.sequencer import Sequencer
37 | from avio_core.gui import GUI, Button, ButtonGrid, Label, Meter, setvalue
38 |
39 | from pprint import pprint
40 |
41 | from avio_core.events import guiquit, saveprogram
42 |
43 |
44 | class App(AVIOComponent):
45 | def __init__(self, sysargs, *args):
46 | super(App, self).__init__(args)
47 | self.log("Initializing core")
48 | self.sysargs = sysargs
49 | if sysargs.debug:
50 | AVIOComponent.debug = True
51 |
52 | def started(self, *args):
53 | self.log("Starting core")
54 |
55 | # Timer(0.5, setvalue('testmeter', 76), persist=True).register(self)
56 |
57 | configpath = os.path.abspath(os.path.expanduser("~/.avio"))
58 | if not os.path.exists(configpath):
59 | self.log("Creating configuration folder " + configpath)
60 | os.mkdir(configpath)
61 | if not os.path.exists(os.path.join(configpath, "router_default.json")):
62 | self.fireEvent(saveprogram('default'))
63 |
64 | def guiquit(self, *args):
65 | self.log("Quitting by request: " + str(args))
66 | sys.exit()
67 |
68 | def keypress(self, event):
69 | if event.ev.key == pygame.K_v:
70 | GIFImage('testgif5', 'test5.gif', immediately=True).register(self)
71 |
72 |
73 | def get_io():
74 | midicount = pygame.midi.get_count()
75 | joystickcount = pygame.joystick.get_count()
76 |
77 | mididevices = {}
78 | joystickdevices = {}
79 |
80 | for i in range(midicount):
81 | mididevice = pygame.midi.get_device_info(i)
82 | info = {
83 | 'type': mididevice[0],
84 | 'name': mididevice[1],
85 | }
86 | if mididevice[2] == 1:
87 | info['dir'] = 'input'
88 | else:
89 | info['dir'] = 'output'
90 | mididevices[i] = info
91 |
92 | for i in range(joystickcount):
93 | joystickdevice = getJoystick(i)
94 | joystickdevices[i] = joystickdevice
95 |
96 | return mididevices, joystickdevices
97 |
98 |
99 | def Launch(args):
100 | if not args.nosplash:
101 | # TODO: Get correct script path
102 | try:
103 | splash = subprocess.Popen([sys.executable, './avio_core/splash.py'])
104 | except:
105 | pass
106 |
107 | pygame.init()
108 | pygame.midi.init()
109 | pygame.joystick.init()
110 |
111 | mididevices, joystickdevices = get_io()
112 |
113 | if args.io:
114 | print("MIDI Devices:")
115 | pprint(mididevices)
116 | print("Joystick-like Devices:")
117 | pprint(joystickdevices)
118 | sys.exit()
119 |
120 | default_midiin = default_midiout = -1
121 |
122 | for key, item in mididevices.items():
123 | if item['name'] == b'Midi Through Port-0':
124 | if item['dir'] == 'output':
125 | default_midiout = key
126 | continue
127 | if item['dir'] == 'input':
128 | default_midiin = key
129 | continue
130 | else:
131 | continue
132 |
133 | if args.midiin is None:
134 | print('Using default midi input: %i' % default_midiin)
135 | args.midiin = default_midiin
136 | if args.midiout is None:
137 | print('Using default midi output: %i' % default_midiout)
138 | args.midiout = default_midiout
139 |
140 | fullscreen = args.width, args.height
141 | args.screensize = fullscreen
142 |
143 | app = App(args)
144 |
145 | if args.debug:
146 | from circuits import Debugger
147 | dbg = Debugger().register(app)
148 | dbg.IgnoreEvents.extend(["peek", "repaint", "paintrequest",
149 | "task_success",
150 | "read", "_read",
151 | "write", "_write",
152 | "stream_success", "stream_complete",
153 | "stream", "refresh_ml"])
154 |
155 | input = Controller().register(app)
156 | router = Router(program=args.program).register(app)
157 | midiout = MidiOutput(deviceid=args.midiout).register(app)
158 | midiin = MidiInput(deviceid=args.midiin).register(app)
159 | matelight = Matelight(host=args.host, port=args.port).register(app)
160 | sequencer = Sequencer().register(app)
161 | if args.cam:
162 | camera = CVCamera(targetresolution=fullscreen).register(app)
163 | camdisp = CameraDisplay().register(app)
164 |
165 | gui = GUI(fullscreen=fullscreen).register(app)
166 |
167 | if args.gui:
168 | pass
169 | # This is only a test setup.
170 | #hellobutton = Button('btnHello', 'Hello World!', (10, 10, 150, 20),
171 | # True).register(gui)
172 | #quitbutton = Button('btnQuit', 'Quit', (10, 32, 150, 42), False,
173 | # False).register(gui)
174 | #grid = ButtonGrid('beatGrid', 25, 100, 2, 2).register(gui)
175 | # qqqgrid2 = ButtonGrid('synthGrid', 285, 100, 3, 3).register(gui)
176 | #meter = Meter('testmeter', 'dB', 5, 100, max=100).register(gui)
177 | #gif = GIFImage('testgif1', 'test.gif').register(gui)
178 | #gif2 = GIFImage('testgif2', 'test2.gif').register(gui)
179 | #gif3 = GIFImage('testgif3', 'test3.gif').register(gui)
180 | #gif4 = GIFImage('testgif4', 'test4.gif').register(gui)
181 | # gif5 = GIFImage('testgif5', 'test5.gif').register(gui)
182 |
183 | app.run()
184 |
--------------------------------------------------------------------------------
/avio-legacy/logger.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: UTF-8 -*-
3 |
4 | # AVIO
5 | # ====
6 | # Copyright (C) 2011-2017 Heiko 'riot' Weinen and others.
7 | #
8 | # This program is free software: you can redistribute it and/or modify
9 | # it under the terms of the GNU General Public License as published by
10 | # the Free Software Foundation, either version 3 of the License, or
11 | # (at your option) any later version.
12 | #
13 | # This program is distributed in the hope that it will be useful,
14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 | # GNU General Public License for more details.
17 | #
18 | # You should have received a copy of the GNU General Public License
19 | # along with this program. If not, see .
20 |
21 | __author__ = "Heiko 'riot' Weinen"
22 | __license__ = "GPLv3"
23 |
24 | """
25 | Module: Logger
26 | ==============
27 |
28 | AVIO logger to avoid namespace clashes etc. Comes with some fancy
29 | functions. Copied from Hackerfleet Operating System.
30 |
31 | Log Levels
32 | ----------
33 |
34 | verbose = 5
35 | debug = 10
36 | info = 20
37 | warn = 30
38 | error = 40
39 | critical = 50
40 | off = 100
41 |
42 |
43 | """
44 |
45 | from circuits.core import Event
46 | import pprint
47 | # from circuits import Component, handler
48 | # from uuid import uuid4
49 | # import json
50 |
51 |
52 | import time
53 | import sys
54 | import inspect
55 | import six
56 |
57 | # import os
58 |
59 | root = None
60 |
61 | events = 2
62 | network = 4
63 | verbose = 5
64 | debug = 10
65 | info = 20
66 | warn = 30
67 | error = 40
68 | critical = 50
69 | hilight = 60
70 | off = 100
71 |
72 | # https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
73 | lvldata = {
74 | events: ['EVENT', '\033[1:36m'],
75 | verbose: ['VERB', '\033[1;30m'],
76 | network: ['NET', '\033[1;34m'],
77 | debug: ['DEBUG', '\033[1;97m'],
78 | info: ['INFO', '\033[1;92m'],
79 | warn: ['WARN', '\033[1;93m'],
80 | error: ['ERROR', '\033[1;31;43m'],
81 | critical: ['CRIT', '\033[1;33;41m'],
82 | hilight: ['HILIGHT', '\033[1;4;30;106m']
83 | }
84 |
85 | terminator = '\033[0m'
86 |
87 | count = 0
88 |
89 | logfile = "/var/log/hfos/service.log"
90 |
91 | console = verbose
92 | live = False
93 |
94 | verbosity = {'global': console,
95 | 'file': off,
96 | 'system': info,
97 | 'console': console
98 | }
99 |
100 | uncut = True
101 | color = True # TODO: Make this switchable via args
102 |
103 | mute = []
104 | solo = []
105 |
106 | LiveLog = []
107 |
108 | start = time.time()
109 |
110 |
111 | def set_logfile(path):
112 | global logfile
113 | logfile = path
114 |
115 |
116 | def ismuted(what):
117 | """
118 | Checks if a logged event is to be muted for debugging purposes.
119 |
120 | Also goes through the solo list - only items in there will be logged!
121 |
122 | :param what:
123 | :return:
124 | """
125 |
126 | state = False
127 |
128 | for item in solo:
129 | if item not in what:
130 | state = True
131 | else:
132 | state = False
133 | break
134 |
135 | for item in mute:
136 | if item in what:
137 | state = True
138 | break
139 |
140 | return state
141 |
142 |
143 | def setup_root(newroot):
144 | """
145 | Sets up the root component, so the logger knows where to send logging
146 | signals.
147 |
148 | :param newroot:
149 | """
150 | global root
151 |
152 | root = newroot
153 |
154 |
155 | def hfoslog(*what, **kwargs):
156 | """Logs all *what arguments.
157 |
158 | :param *what: Loggable objects (i.e. they have a string representation)
159 | :param lvl: Debug message level
160 | :param exc: Switch to better handle exceptions, use if logging in an
161 | except clause
162 | :param emitter: Optional log source, where this can't be determined
163 | automatically
164 | :param sourceloc: Give specific source code location hints, used internally
165 | """
166 |
167 | # Count all messages (missing numbers give a hint at too high log level)
168 | global count
169 | count += 1
170 |
171 | if 'lvl' in kwargs:
172 | lvl = kwargs['lvl']
173 | if lvl < verbosity['global']:
174 | return
175 | else:
176 | lvl = info
177 |
178 | if 'emitter' in kwargs:
179 | emitter = kwargs['emitter']
180 | else:
181 | emitter = 'UNKNOWN'
182 |
183 | if 'exc' in kwargs:
184 | exception = True
185 | else:
186 | exception = False
187 |
188 | output = None
189 |
190 | timestamp = time.time()
191 | runtime = timestamp - start
192 |
193 | callee = None
194 |
195 | if verbosity['global'] <= debug:
196 | # Automatically log the current function details.
197 |
198 | if 'sourceloc' not in kwargs:
199 |
200 | # Get the previous frame in the stack, otherwise it would
201 | # be this function
202 | func = inspect.currentframe().f_back.f_code
203 | # Dump the message + the name of this function to the log.
204 |
205 | if exception:
206 | exc_type, exc_obj, exc_tb = sys.exc_info() # NOQA
207 | line_no = exc_tb.tb_lineno
208 | lvl = error
209 | else:
210 | line_no = func.co_firstlineno
211 |
212 | callee = "[%.10s@%s:%i]" % (
213 | func.co_name,
214 | func.co_filename,
215 | line_no
216 | )
217 | else:
218 | callee = kwargs['sourceloc']
219 |
220 | msg = "[%s] : %5s : %.5f : %3i : [%5s]" % (time.asctime(),
221 | lvldata[lvl][0],
222 | runtime,
223 | count,
224 | emitter)
225 |
226 | content = ""
227 |
228 | if callee:
229 | if not uncut and lvl > 10:
230 | msg += "%-60s" % callee
231 | else:
232 | msg += "%s" % callee
233 |
234 | for thing in what:
235 | content += " "
236 | if kwargs.get('pretty', False):
237 | content += pprint.pformat(thing)
238 | else:
239 | content += str(thing)
240 |
241 | msg += content
242 |
243 | if ismuted(msg):
244 | return
245 |
246 | if not uncut and lvl > 10 and len(msg) > 1000:
247 | msg = msg[:1000]
248 |
249 | if lvl >= verbosity['file']:
250 | try:
251 | f = open(logfile, "a")
252 | f.write(msg + '\n')
253 | f.flush()
254 | f.close()
255 | except IOError:
256 | print("Can't open logfile %s for writing!" % logfile)
257 | # sys.exit(23)
258 |
259 | if lvl >= verbosity['console']:
260 | output = str(msg)
261 | if six.PY3 and color:
262 | output = lvldata[lvl][1] + output + terminator
263 | try:
264 | print(output)
265 | except UnicodeEncodeError as e:
266 | print(output.encode("utf-8"))
267 | hfoslog("Bad encoding encountered on previous message:", e,
268 | lvl=error)
269 | except BlockingIOError:
270 | hfoslog("Too long log line encountered:", output[:20], lvl=error)
271 |
272 | if live:
273 | LiveLog.append(output)
274 |
--------------------------------------------------------------------------------
/avio/router.py:
--------------------------------------------------------------------------------
1 | # AVIO - The Python Audio Video Input Output Suite
2 | # ================================================
3 | # Copyright (C) 2015 riot
4 | #
5 | # This program is free software: you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License as published by
7 | # the Free Software Foundation, either version 3 of the License, or
8 | # (at your option) any later version.
9 | #
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | # GNU General Public License for more details.
14 | #
15 | # You should have received a copy of the GNU General Public License
16 | # along with this program. If not, see .
17 |
18 | __author__ = 'riot'
19 |
20 | import pygame
21 | import json
22 | import os.path
23 |
24 | from avio_core.component import AVIOComponent
25 |
26 | from avio_core.events import midicc, resetcclock, loadscene
27 |
28 | from circuits import Timer, Event
29 |
30 | from pprint import pprint
31 |
32 | routerevents = {
33 | 'midicc': midicc,
34 | 'loadscene': loadscene,
35 | 'resetcclock': resetcclock
36 | }
37 |
38 |
39 | class Router(AVIOComponent):
40 | def __init__(self, program='default', *args):
41 | super(Router, self).__init__(*args)
42 | self.log("Initializing router")
43 |
44 | self.scenes = {
45 | 'default': {
46 | 'axis': {
47 | '0': {'event': 'midicc', 'args': 20},
48 | '1': {'event': 'midicc', 'args': 21},
49 | '2': {'event': 'midicc', 'args': 22},
50 | '3': {'event': 'midicc', 'args': 23},
51 | '12': {'event': 'midicc', 'args': 24},
52 | '13': {'event': 'midicc', 'args': 25},
53 | '14': {'event': 'midicc', 'args': 26},
54 | '15': {'event': 'midicc', 'args': 27},
55 | '23': {'event': 'midicc', 'args': 28},
56 | '24': {'event': 'midicc', 'args': 29},
57 | '25': {'event': 'midicc', 'args': 30},
58 | '17': {'event': 'midicc', 'args': 31},
59 | },
60 | 'buttons': {
61 | '0': {'shiftcc': 4},
62 | '1': {'mute': True},
63 | '2': {'event': 'loadscene', 'args': 'second', 'mode': 'down'},
64 | '3': {'nop': None},
65 | '4': {'nop': None},
66 | '5': {'nop': None},
67 | '6': {'nop': None},
68 | '7': {'nop': None},
69 | '8': {'nop': None},
70 | '9': {'nop': None},
71 | '10': {'nop': None},
72 | '11': {'nop': None}
73 | },
74 | 'hat': {
75 | }
76 | },
77 | 'second': {
78 | 'buttons': {
79 | '7': {'event': 'loadscene', 'args': 'default'},
80 | '8': {'event': 'loadscene', 'args': 'third'}
81 | }
82 | },
83 | 'third': {
84 | 'buttons': {
85 | '0': {'event': 'loadscene', 'args': 'default'}
86 | }
87 |
88 | }
89 | }
90 | self.routes = self.scenes['default']
91 |
92 | self._saveprogram('default')
93 |
94 | if program:
95 | self._loadprogram(program)
96 |
97 | try:
98 | self.routes = self.scenes['default']
99 | except KeyError:
100 | self.log("Router has no valid default program!")
101 |
102 | self.shiftcc = {}
103 | self.warned = []
104 | self.muted = False
105 |
106 | self.warningtimer = Timer(5, Event.create('reset_warnings'), persistent=True).register(self)
107 |
108 | def started(self, *args):
109 | self.log("Starting router")
110 |
111 | def getshift(self):
112 | shift = 0
113 | for item in self.shiftcc.values():
114 | shift += item
115 |
116 | return shift
117 |
118 | def reset_warnings(self):
119 | self.warned = []
120 |
121 | def _saveprogram(self, programname):
122 | realname = os.path.abspath(os.path.expanduser("~/.avio/router_" + programname + ".json"))
123 | self.log("Router storing program " + programname + " to " + realname)
124 | try:
125 | with open(realname, "w") as fp:
126 | json.dump(self.scenes, fp, indent=4)
127 | # except IOError as e:
128 |
129 | except Exception as e:
130 | self.log("Program save failed for %s: %s (%s)" % (programname, e, type(e)))
131 |
132 | def _loadprogram(self, programname):
133 | backup = (self.scenes, self.routes)
134 | realname = os.path.abspath(os.path.expanduser("~/.avio/router_" + programname + ".json"))
135 | self.log("Router loading program " + programname + " from " + realname)
136 | try:
137 | with open(realname, 'r') as fp:
138 | self.scenes = json.load(fp)
139 | self.routes = self.scenes['default']
140 | except Exception as e:
141 | self.log("Program load failed for %s: %s (%s)" % (programname, e, type(e)))
142 | self.scenes, self.routes = backup
143 |
144 | def saveprogram(self, event):
145 | self._saveprogram(event.program)
146 |
147 | def loadprogram(self, event):
148 | self._loadprogram(event.program)
149 |
150 | def loadscene(self, event):
151 | self.log("Loading new scene: " + str(event.scene))
152 | self.routes = self.scenes[event.scene]
153 |
154 | def joystickchange(self, event):
155 | # self.log("Router change received: " + str(event.input))
156 |
157 | key = None
158 | identity = None
159 |
160 | if event.input.type == pygame.JOYAXISMOTION:
161 | key = 'axis'
162 | identity = event.input.axis
163 | elif event.input.type in (pygame.JOYBUTTONDOWN, pygame.JOYBUTTONUP):
164 | # self.log("Button action")
165 | key = 'buttons'
166 | identity = event.input.button
167 |
168 | # self.log(key, identity)
169 | if key != None and identity != None:
170 | cat = self.routes.get(key, None)
171 | str_id = str(identity)
172 |
173 | if not cat:
174 | self.log('Unknown category!', key, str_id)
175 | return
176 |
177 | if not str_id in cat:
178 | if str_id not in self.warned:
179 | self.log("No routing rule for %s - %s" % (key, str_id))
180 | self.warned.append(str_id)
181 | return
182 | route = cat[str(identity)]
183 |
184 | evtype = event.input.type
185 |
186 | if 'mute' in route:
187 | self.log("Muted control")
188 | self.muted = evtype == pygame.JOYBUTTONDOWN
189 |
190 | if 'shiftcc' in route:
191 | self.log("Shifting CC")
192 | if evtype == pygame.JOYBUTTONDOWN:
193 | self.shiftcc[identity] = route['shiftcc']
194 | else:
195 | del (self.shiftcc[identity])
196 |
197 | if not self.muted and 'event' in route:
198 | signal = routerevents[route['event']](route['args'])
199 | if 'mode' in route:
200 | if (route['mode'] == 'down' and evtype == pygame.JOYBUTTONUP) or (
201 | route['mode'] == 'up' and evtype == pygame.JOYBUTTONDOWN):
202 | self.log("Wrong mode for route: " + str(route))
203 | return
204 | if type(signal) == midicc:
205 | if len(self.shiftcc) > 0:
206 | signal.cc += self.getshift()
207 | signal.data = int(127 * abs((event.input.value + 1) / 2))
208 |
209 | self.fireEvent(signal)
210 |
--------------------------------------------------------------------------------