This is yet another ascii-art generator and demo player that is highly configurable. Default setting of this demo emulates EGA text mode, with four shades of grey, and a Sound Blaster.
The video playback can be scaled to any console text mode size, can support any video framerate and any length.
You can alter the font set to whatever you want, the AA engine will adjust itself accordingly.
You can also make this demo to play completely different video and audio. Please refer to the
The demo is distributed under the MIT License. Please refer to
COPYING for the copy of the license.
How to run
Download the latest release from here (github)
Execute BaAA.jar by double-clicking on it or using terminal. Ignore anything else; they’re just bunch of libraries, natives and resources. If you’re not a programmer, just leave them as is.
Java SE version 8 or higher is required.
- SPACE: pause/resume (frequent pausing will make audio off-sync)
- F1: remove colour filter
- F2: Colour filter IBM (green)
- F3: Colour filter AMBER
- F4: User-defined colour filter
- H: Capture current screen into PNG
- T: Capture current screen into TXT (
If you’re done with the default configuration, it’s time to play with it!
When playing the demo, you can see STRM or PRLD on the window title. This indicates whether the video is streamed or preloaded. If streaming video is too choppy, you can try preload by setting
true, or pre-record everything beforehand. See section Record and play for instruction.
Note that the audio is always streamed from disk.
How to read window title for information
AA Player — S: 61(60) — M: 216M/1820M — F: 4932/13159 STRM — C: 4 — A: 12
- S indicates the current framerate: drawing framerate and video framerate. In this line, 61 is the drawing framerate and 60 is the video’s framerate.
- M indicates the memory usage information. Former is currently used by program (NOT by the Java applet), latter is the maximum amount of memory JVM can use in this applet.
- F indicates the index of frame currently playing. STRM indicates that each frame is streamed from the disk, calculated on the fly, PRLD indicates every frame is pre-loaded and pre-calculated, RECD indicates the frame is loaded from the record file.
- C indicates the number of greyscale tones currently using
- A indicates the current algorithms using. First number represents antialiasing, second is dithering
To changed the font colour, you’ll need to edit font files with your image editor.
font.3.png: full brightness (0xFF)
font.1.png: 33.3% (0x55)
font.2.png: 66.7% (0xAA)
(fonts are pre-coloured to make the demo run faster)
About Ascii Art Library
The library receives current font (as a SpriteSheet), apply colours, then calculate the luminosity of each glyph. No hand-crafted things other than certain glyphs are go unused.
The object must be initialised with
setProp() function before use, and
precalcFont() must be called before you can actually play with
The library supports Gamma Correction, but not the inverted mode (white background, black text)
In default setting, the library returns approximated solution (good enough answer, not exact). You can force it to return exact solution by
bNoApproximate=true in config.
The demo plays real 60-frame Bad Apple footage which was generated with SVPFlow.
Included audio faithfully emulates what the real Sound Blaster would do, sampling rate of 23 kHz, 8-bit, monoaural, then encoded with Vorbis
You can use your own series of images, frame size unlimited. (disk space and your GPU texture size has limit, however)
Built-in font “terminal.png” was from OSX’s single mode console. Didn’t dumped; it was a manual labour of tracing dot by dot. Non-ASCII letters are my own drawing.
Supported formats for frame: png (rgb or indexed), jpg, bmp, tga (uncompressed)
Supported formats for audio: ogg, mod, xm (please note that MOD/XM playback of IBXM is suck)
- I claim no copyright to the included assets of:
- The audio “Bad Apple!! (feat. nomico)” by Alstroemeria Records, original composition by ZUN
- The video, frame-doubled version of
These assets are copyrighted to the its copyright owner.
- Included OGG audio has low sound quality, which is intentional to achieve the retro vibe (Sound Blaster). If you don’t like it, get your own high quality audio and encode with OGG/Vorbis
Play from mp4: Tried JCodec, playback was very jittery
Inverted colour (white background): I’m exhausted. You clone it and try it ;)
How to use my own video and audio
To play your own video on the demo player, you’ll need to prepare them yourself.
Requirements: Your video file, FFmpeg, framerate for the video, Audacity
Open FFmpeg, type
ffmpeg -i input_file_name -vf fps=video_framerate out output_directory/prefix_of_your_own%08d.pnge.g. If I’m generating from Test.mp4,
ffmpeg -i test.mp4 -vf fps=30 out test%08d.png
Extract audio stream from your video file. Google
video_container demux audio(e.g.
mp4 demux audio) for instruction.
Transcode extracted audio to OGG/Vorbis. You cau use Audacity for the job.
Move directory that contains thousands of PNGs and converted OGG to demo’s
Configure the demo accordingly. You’ll need to change
Record and replay
bIsRecordMode is set to
true, the demo will record the frame into your hard disk.
Name for the file is auto-generated in the format of
To play from the record, specify
sRecordFileName as the filename of the aarec file. Note that you still have to give valid values in the config to the following:
The distribution of the demo will contain 5 aarec files which are:
2ndreal_CGA.png_132x74_C4_A23_fullcp.aarec: the demo Second Reality by Future Crew, in four greyscales, full code page. Use audio
2ndreal_CGA.png_132x74_C16_A23_fullcp.aarec: the demo Second Reality by Future Crew, in sixteen greyscales, full code page. Use audio
2ndreal_CGA.png_132x74_C4_A13.aarec: the demo Second Reality by Future Crew, in four greyscales, only using ASCII glyphs. Use audio
Bad_Apple_CGA.png_76x43_C4_A13.aarec: pre-recorded Bad Apple in 76x43, CGA font
Bad_Apple_CGA.png_132x74_C4_A11.aarec: pre-recorded Bad Apple in 132x74, CGA font