2016-05-08 60 views
12

Próbuję odtworzyć krótką nutę muzyczną z domyślną falą sinusoidalną jako dźwiękiem wewnątrz Swift Playground. W późniejszym momencie chciałbym zamienić dźwięk na Soundfont, ale w tej chwili byłbym zadowolony z tego, że wyprodukowałem jakiś dźwięk.Odtwarzanie nut na Placu Swift

Chcę, aby była to sekwencja typu midi z bezpośrednią kontrolą nad nutami, a nie czymś czysto audio. Wydaje się, że AudioToolbox zapewnia to, czego szukam, ale mam problemy z pełnym zrozumieniem jego użycia. Oto, czego aktualnie próbuję:

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) 

Jak można sobie wyobrazić, nie słychać dźwięku. Doceniam wszelkie pomysły na głośne odtwarzanie tej sekwencji dźwiękowej.

Odpowiedz

9

Musisz włączyć tryb asynchroniczny w Playground.

Dodaj ten u góry (Xcode 7, Swift 2):

import XCPlayground 
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true 

a sekwencja zostanie odtworzona.

To samo dotyczy Xcode 8 (Swift 3):

import PlaygroundSupport 
PlaygroundPage.current.needsIndefiniteExecution = true