Bernd Bernd - 1 year ago 95
Swift Question

Play musical notes in Swift Playground

I am trying to play a short musical note sequence with a default sine wave as sound inside a Swift Playground. At a later point I'd like to replace the sound with a Soundfont but at the moment I'd be happy with just producing some sound.

I want this to be a midi like sequence with direct control over the notes, not something purely audio based. The

seems to provide what I am looking for but I have troubles fully understanding its usage. Here's what I am currently trying

import AudioToolbox

// Creating the sequence

var sequence:MusicSequence = nil
var musicSequence = NewMusicSequence(&sequence)

// Creating a track

var track:MusicTrack = nil
var musicTrack = MusicSequenceNewTrack(sequence, &track)

// Adding notes

var time = MusicTimeStamp(1.0)
for index:UInt8 in 60...72 {
var note = MIDINoteMessage(channel: 0,
note: index,
velocity: 64,
releaseVelocity: 0,
duration: 1.0 )
musicTrack = MusicTrackNewMIDINoteEvent(track, time, &note)
time += 1

// Creating a player

var musicPlayer:MusicPlayer = nil
var player = NewMusicPlayer(&musicPlayer)

player = MusicPlayerSetSequence(musicPlayer, sequence)
player = MusicPlayerStart(musicPlayer)

As you can imagine, there's no sound playing. I appreciate any ideas on how to have that sound sequence playing aloud.

Answer Source

You have to enable the asynchronous mode for the Playground.

Add this at the top:

import XCPlayground
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true

and your sequence will play.