A library for audio game development
Over the past year I’ve used web technologies to create audio games like soundStrider and participate in numerous game jams. With syngen I’m releasing my tools as open-source so folks can join me in crafting dynamic audio experiences and games for the web. Continue reading to dive into its features, view example code, and learn more about its future.
What I learned from hosting an audio gam jam without graphics
Last month it was my pleasure to host the No Video Jam, an audio game jam featuring accessible games without graphics. In two weeks dozens of developers created 20 games that were accessible to gamers who are blind. We had a variety of submissions, from action games to interactive fiction, that surprised and delighted. Continue reading to learn more about how it went and the lessons I learned from organizing my first jam.
A relaxing generative audio toy
Manipulate time to explore ambient soundscapes in this submission to LOWREZJAM, Brackeys Jam, and AGJam. Kaleidophone is an audio toy designed for deep thinking, meditation, and relaxation that’s best experienced with headphones.
An audio game jam without graphics
Please join us on Friday, August 14, for the No Video Jam, an audio game jam featuring accessible games without graphics. Participants will create blind-friendly games of any genre using audio and accessible text. Submissions will then be judged by the public based on criteria like accessibility, fun, originality, and sound.
Since I began making audio games I’ve learned that it’s a niche and neglected market. Gamers who are blind often feel isolated from the mainstream gaming community and have few games made specifically for them. My hope with organizing this jam is to give them visibility by normalizing audio games with sighted developers and gamers. Then when it’s over they’ll have more games in their canon to enjoy and discuss.
I’m looking forward to hearing what everyone creates!
Starting with nothing for Ludum Dare 45
Last month I participated in Ludum Dare 45. Over its 48 arduous hours there were many challenges to overcome and insights to gain as I built a game completely from scratch.
As an accessibility advocate with a background in digital signal processing, I wanted to explore how the Web Audio API could be leveraged to build spatial audio experiences. The result was Soundsearcher, a minimalist exploration game designed for playing with your eyes closed.
A minimalist auditory exploration game
Explore a procedurally-generated world of synthesized sounds in this submission for Ludum Dare 45. Soundsearcher is designed for playing with your eyes closed. Headphones are strongly recommended.
Where have you been all my life?
Today I installed Python for the first time.
Whenever I learn something new I like to stay motivated with a small project. A friend and data engineer told me that Python excels at crunching numbers—and lately I’ve been quite a Numberphile—so I built a small library for generating my favorite OEIS integer sequences. When I encounter exciting sequences in the future they’ll surely get added.
You can explore the result at this GitHub repository.
An empathetic pitch
Unlimited data and processing power is a privilege.
Ignoring this privilege adversely affects: user experience because true performance is the foundation of perceived performance; accessibility because every requirement for a baseline experience is exclusionary; the economy as long as our users are paying for each web request with their labor; and the environment because every web request has material costs.
It’s easy to forget that the web is for all people. So it’s a moral imperative to prioritize performance when we develop for the web.
Crafting a lazy loader for lazy folks
Lazy loading is one of the best accessibility wins available to front-end developers. By deferring the loading of assets until we need them, we save our users’ data—and consequently their money. For folks who pay disproportionately more for their data, this can be invaluable.
In this tutorial we will craft a lazy loader that can be deployed with minimal effort on any site. Because we’re lazy folks. So we’ll leverage the MutationObserver and IntersectionObserver interfaces to lazily lazy load lazy-loadable elements whenever they’re added to the DOM.
Please feel free to skip to the result at this GitHub repository.
Conjuring a Web 1.0 staple
The thing I miss most about the web before social media was everyone having their own blog or personal site. It was decentralized and punk.
The URL made it all work. One inbound link and you were in. And every outbound link made it stronger. So we all linked to our friends and favorites to include, inform, and pay respect. We called them blogrolls.
Let’s unpack some teachable moments that I encountered while implementing my links page.