2016-05-08 88 views
12

我正在播放一个带有默认正弦波的短音符音序列作为Swift Playground中的声音。稍后,我想用Soundfont替换声音,但目前我只是在制作一些声音而感到高兴。在雨燕游乐场播放音符

我希望这是一个MIDI的序列,可以直接控制音符,而不是纯粹基于音频的。 AudioToolbox似乎提供我正在寻找,但我有麻烦充分了解其用法。这是我目前正在尝试

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) 

正如你可以想象,没有声音播放。我很欣赏关于如何让这种声音顺序播放的任何想法。

回答

9

您必须为Playground启用异步模式。

在顶部加入这个(Xcode中7,斯威夫特2):

import XCPlayground 
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true 

和您的序列将发挥。

同为8的Xcode(SWIFT 3):

import PlaygroundSupport 
PlaygroundPage.current.needsIndefiniteExecution = true