2016-05-08 10 views
12

Sto provando a suonare una breve sequenza di note musicali con un'onda sinusoidale predefinita come suono all'interno di uno Swift Playground. In un secondo momento mi piacerebbe sostituire il suono con uno Soundfont ma al momento sarei felice di produrre solo del suono.Riproduci note musicali in Swift Playground

Voglio che questa sia una sequenza midi come con controllo diretto sulle note, non qualcosa di puramente audio basato. Il AudioToolbox sembra fornire quello che sto cercando, ma ho problemi a comprenderne pienamente l'utilizzo. Ecco cosa sto provando al momento

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) 

Come potete immaginare, non c'è audio. Apprezzo qualsiasi idea su come far suonare ad alta voce quella sequenza sonora.

risposta

9

È necessario abilitare la modalità asincrona per il parco giochi.

Aggiungere questo nella parte superiore (Xcode 7, Swift 2):

import XCPlayground 
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true 

e la sequenza giocherà.

Lo stesso per Xcode 8 (Swift 3):

import PlaygroundSupport 
PlaygroundPage.current.needsIndefiniteExecution = true 
Problemi correlati