Geoff Groberg

Currently browsing code

The Silence of War

The Silence of War is a transmedia storytelling project about a small group of African American Vietnam Veterans from rural Eastern North Carolina. Their stories are told through interviews, photos, videos and other media.

The project was created by faculty and students at Wake Forest University. I was a co-director and also led the web development and design.

The technical side of things

One of the fun things about the project for me was creating the web framework. It’s a single-page application designed for the presentation of rich media. And it’s based entirely on front-end technologies: HTML5, CSS, and Javascript. It was refreshing since I usually do a lot of backend programming.

The framework is built for storytelling. Stories are created with a series of slides that contain all kinds of rich media. Video, audio, images, text, gradients, and more can be layered in interesting ways and navigated with smooth transitions in between. There are lots of interesting techniques I used to help with things like positioning text, creating rich full-screen backgrounds (including video backgrounds), overlaying transparent vignettes and gradients, and creating smooth background audio transitions.

In order to deal with all of the large video files and other media I created a custom lazy-loader in javascript. The lazy-loader basically downloads large media files just before they are needed, rather than trying to download everything at once. It looks ahead to see what slides the viewer can potentially view next and downloads only the media for those.

Building the framework gave me some new ideas and changed the way I think about storytelling on the web. Background audio is especially interesting to me in this type of application and I’m planning on doing more with it in the future.

View the The Silence of War.


Transcribe is a web app I built while working for the Lee Library. It’s been one of the more rewarding apps I’ve built because it’s a crowd-sourcing application that continues to be used.

What does it do?

Transcribe was built for Special Collections. They have a lot of old books and manuscripts that are not available electronically. Transcribe allows students to help get these documents transcribed, making them searchable and much more available for research and scholarship.

How does it work?

It’s an application that employs crowd-sourcing. A student logs in and grabs a “task,” in this case usually a single page to be transcribed. The application also allows for transcribing time-based media (video and audio).

Each task gets completed twice, by different people. So for every page, there will be two transcriptions. The two transcriptions are then “diffed,” highlighting any discrepancies between the two.

At this point, a new task is made available to a reviewer. The reviewer can quickly see highlighted discrepancies and choose between them, along with making any other changes. The reviewer can also easily point and click to add XML tags, identifying people, places, and dates, for example, to make the document more searchable.

Rather than using a textarea tag, we used HTML5’s contenteditable attribute. This allowed us to style transcribed text in ways that wouldn’t have been possible using a textarea. Another interesting UI/UX feature is that the transcription interface can be toggled by the user to be side-by-side or up-down.

After all pages in a project have been transcribed, reviewed, and tagged, the application compiles them into an XML file (adhering to the TEI Lite standard) that the library can use to make the document electronically available and searchable. I built the application in 2014 and I’m happy to see that as of 2017 it is very much alive and being used to make rare documents more available.

I was the lead developer on Transcribe and I worked closely with the fantastic Grant Zabriskie for front-end design.

Final Limit

Final Limit is an audio effects processing plugin. It’s a “limiter” designed to be the final element in your signal chain. It brings the overall volume up, without distorting. (Unless you want a bit of distortion, which it also provides.) I created the plugin using SonicBirth.

How it works

The main slider increases the gain of the input signal which is then processed with a compression algorithm I designed. Any leftover peaks are attenuated using a shaper function curve. There are also options for EQ, attack and release characteristics, and maximum output level.

The user interface is inspired by an old Ensoniq synth I used to own. I avoided naming the limiter’s attack and release characteristics with technical numbers and labels (like milliseconds). Instead the controls are labelled with fun/zany titles like “Dog Slow” and “Burnt Toast.” They sound funny, but the idea is that they actually describe the sound better than a label like “80ms.” The UI was also designed with the idea of minimizing visual feedback. All too often audio engineers make adjustments based on what they see (like the curve of an EQ) instead of what they actually hear.

You can download it here. It runs on OS X as an AudioUnits plugin, but unfortunately it is 32 bit only because sonic birth doesn’t allow exporting 64 bit plugins. It won’t run in hosts that are 64 bit applications.