Step Sixteen | Making a Step Sequencer App With Unity & Wwise

게임 오디오

Introduction

Hi there, I’m Matt, a sound designer at Rogue Waves. We typically work on sound effects libraries for game audio and post production. Recently, however, we branched out and released Step Sixteen, a step sequencer app made with Unity and Wwise. 

Over the years, I’ve made many step sequencer prototypes. Some of these were hardware sequencers made with Arduino, while others were made in Pulp, Processing and Unity. Step Sixteen is the culmination of those prototypes and combines all the things I learned along the way. It was also a great opportunity to improve my C#, Unity and Wwise skills.

Step Sixteen

Step Sixteen is a 16-step sequencer music-making app inspired by classic hardware drum machines like the TR-909 and the Machinedrum. 

In Step Sixteen, the user can create their own beats like with a drum machine, but we added synths that run alongside it to play bass lines, arpeggios, chords or melodies. Having everything in one app makes it very easy to get something going quickly, without having to go too deep into learning to use a full DAW. Users can shape individual drum and synth sounds using the channel sliders or use several global performance-based controls to shape the whole mix.

Step Sixteen_img1

Wwise

In order to achieve all the features we wanted to include in Step Sixteen, we required a versatile audio engine and Wwise was the perfect choice. 

Wwise provided us with a great audio backbone for making an instrument-based app. The ability to add RTPCs, Modulator Envelopes, Switch Containers and built-in effects were all integral to making the sequencer we wanted. 

Switch_Containers

Clock

Early on in the project, one of the main issues that needed to be solved was achieving a solid clock to drive the sequencer. I tried using various methods of timing in Unity but these proved unstable; Ultimately, I came to the conclusion that it would work better to use Wwise for timing using an Interactive Music system.

In Wwise, I created a Music Playlist Container (with grid divisions set to 16ths and tempo at 100 BPM) which also contained an empty dummy Music Segment. The Music Playlist Container allowed us to infinitely loop the dummy Music Segment.

With Music Playlist Containers in Wwise, you unfortunately can’t add an RTPC to the BPM value. However, you can work around this by controlling Playback Speed with an RTPC. To start, we set the actual BPM of the Music Playlist Container to 100. The range of Playback Speed in Wwise is between 0.25 and 4, so a playback speed of 0.5 would be equivalent to 50 BPM.

In Unity, we were able to create a bpmPercentageTime variable which equaled the app’s BPM slider’s value divided by 100. So, for example, a BPM of 120 displayed in-app would then set Playback Speed in Wwise to 1.2.

bpmPercentageTime = bpmSlider.value / 100.0f;
AkSoundEngine.SetRTPCValue("Playback_BPM", bpmPercentageTime);

Infinite_Loop

Callbacks

Because we were making a 16-step sequencer, we needed to create a callback that would occur every 16th note. To solve this, we used the MusicSyncGrid callback type and our Music Playlist Container had its grid frequency set to 16. Now we could tell Unity to do something every 16th interval of our Music Playlist Container.

In our callback function in Unity, we created a counter which would reset after each bar. This allowed us to keep track of each step of the sequence and when sounds should play.

Initially, we tried posting our sounds immediately in our callback function; However, timing issues would arise, so we instead chose to trigger stingers set to Next Grid. This meant our sounds were scheduled in advance and would playback correctly.

Trigger_Stingers

RTPCs

Step Sixteen needed to give the user a lot of control over the various sliders for shaping sounds, so I ended up having to create a lot of RTPCs. The 16 channels alone required 19 RTPCs each, which was 304 RTPCs total.

On top of that, we had additional RTPCs for delay time, the global sliders, playback BPM and tape stop.

Synth_RTPCs

Effects

The built-in effects in Wwise offered a lot of versatility in shaping individual sounds and the whole mix. We made use of delays, reverb, flanger, distortion, parametric EQs and pitch shifters.

I’ve always really enjoyed the tape stop effect button on Teenage Engineering's OP-1, so I wanted to create a similar effect button for Step Sixteen. I was able to achieve this by using the Wwise Pitch Shifter plug-in on the Master Audio Bus. This was achieved by ramping down the Pitch Shift value via an RTPC and a timer in Unity.

The second effect button in Step Sixteen is the LFO button. With this, I wanted to create a sort of random drunken pitch. This was achieved by using a random LFO assigned to pitch and a random LFO modulating the frequency / rate of the first LFO.

Parametric EQs

In order to achieve more musical filtering, we made use of parametric EQs. By using two bands (one band set to low-pass/high-pass and the other band set to peaking) we could change the values in tandem and were able to create low- and high-pass filters with resonant boosts at the cutoff point. This is something you’ll often hear in electronic music and provides a better solution than the built-in low -and high-pass filters for shaping sounds. We used this method on the low- and high-pass filters for the drums for shaping sounds and on the global low- and high-pass filters for performing filter sweeps.

Delay Time Workaround

One limitation with Wwise is the delay plug-in not being able to assign an RTPC to delay time. There are ways around this by modifying the plug-ins xml file, but this leads to pops and clicks when changing delay time, so that method was out. If we had more time to spend, it is possible to create your own fractional delay plug-in that doesn’t produce artifacts when changing delay time, but this was outside the scope for this project. 

We opted instead to let the user choose between delay times by fading between 4 separate delays with different fixed delay times. This wasn’t the ideal solution, but it did enable us to have a degree of variable delay time in Step Sixteen without pops and clicks.

Conclusion

Step Sixteen was a challenge but a lot of fun to work on. Wwise allowed us to achieve the solid clock we needed through callbacks, stingers and the interactive music system. The built-in effects, RTPCs and modulation envelopes made it possible to give the user full control over shaping sounds. We love making music with it and are excited to hear what you’ll make with Step Sixteen.

Step Sixteen is now available on Steam: https://store.steampowered.com/app/2407480/Step_Sixteen/ 

Matt Sweeney

Creative Director & Sound Designer

Rogue Waves

Matt Sweeney

Creative Director & Sound Designer

Rogue Waves

Matt Sweeney is Creative Director and Sound Designer at Rogue Waves and is based in Dublin, Ireland. In his career he has worked in various roles across TV, Film, Animation and Game audio.

Since 2021 he has created SFX libraries and software at Rogue Waves providing powerful, useful, high quality content for post production houses, game development studios and freelance sound designers and editors.

Instagram

Website

 @RogueWavesSFX

댓글

댓글 달기

이메일 주소는 공개되지 않습니다.

다른 글

파이널 판타지 VII 리메이크의 사운드

수많은 사람들의 사랑을 받는 파이널 판타지 VII의 음악은 새로운 세대의 팬들이 경험할 수 있도록 수 년에 걸쳐 새롭게 재고되어 왔습니다. 최근 Square Enix(스퀘어...

4.5.2021 - 작성자: SQUARE ENIX (스퀘어 에닉스)

인디 개발자를 위한 무료 Wwise - 사운드 제한이 없는 전체 플랫폼 사용 권한. 이 라이선스를 내놓은 이유와 사용 방법.

안녕하세요!지난 4월 공유된 영상에 대해 더 자세한 정보를 전해드리기 위해 온 라이선스 담당자입니다. 예상치 못했던 깜짝 소식이었지만, 2022년 4월 1일에 저희는 에셋 제한이...

12.12.2022 - 작성자: 마이크 드러멜스미스 (Mike Drummelsmith)

Scars Above(스카스 어보브)에서의 Wwise Spatial Audio 구현 작업 과정

글 소개Spatial Audio API란?Spatial Audio API 작업 과정 Room과 Portal 에셋 구성 및 명명 규칙 명명 규칙...

30.1.2025 - 작성자: 밀란 앤틱(Milan Antić)

스타워즈 제다이: 서바이버(Star Wars Jedi: Survivor) | 오디오 팀과의 Q&A

'스타워즈 제다이: 서바이버(Star Wars Jedi: Survivor)'는 Respawn Entertainment가 Lucasfilm Games와 협력해 개발한 3인칭 액션...

2.7.2025 - 작성자: 리스폰 엔터테인먼트 (Respawn Entertainment)

Wwise Time Stretch 플러그인을 활용한 인게임 시네마틱 제어

소개 이 글은 제이터 (루오하오) 쉬(Jater (Ruohao) Xu)가 역붕괴: 베이커리 작전(Reverse Collapse: Code Name Bakery)에서 진행한 작업을...

9.7.2025 - 작성자: Ruohao (Jater) Xu (루오하오 (제이터) 쉬)

콘도르 히어로즈 (射雕)의 상호작용 음악 시스템 설계 철학 및 구현

프롤로그소개음악 시스템 개요콘텐츠 NPC와 음악의 동기화 《일전매(一剪梅)》와 같은 사패 음악 랜덤 재생 《망해조(望海潮)》음악과 동기화되거나 일시...

1.10.2025 - 작성자: 치메이 시(Qimei Shi) & 유진 체르니(Eugene Cherny)

다른 글

파이널 판타지 VII 리메이크의 사운드

수많은 사람들의 사랑을 받는 파이널 판타지 VII의 음악은 새로운 세대의 팬들이 경험할 수 있도록 수 년에 걸쳐 새롭게 재고되어 왔습니다. 최근 Square Enix(스퀘어...

인디 개발자를 위한 무료 Wwise - 사운드 제한이 없는 전체 플랫폼 사용 권한. 이 라이선스를 내놓은 이유와 사용 방법.

안녕하세요!지난 4월 공유된 영상에 대해 더 자세한 정보를 전해드리기 위해 온 라이선스 담당자입니다. 예상치 못했던 깜짝 소식이었지만, 2022년 4월 1일에 저희는 에셋 제한이...

Scars Above(스카스 어보브)에서의 Wwise Spatial Audio 구현 작업 과정

글 소개Spatial Audio API란?Spatial Audio API 작업 과정 Room과 Portal 에셋 구성 및 명명 규칙 명명 규칙...