2016-05-08 6 views
12

スウィフトプレイグラウンド内でデフォルトの正弦波を音として短い音符シーケンスを再生しようとしています。後でサウンドをSoundfontに置き換えたいと思っていますが、現時点ではちょうど音を出すことに満足しています。スウィフトプレイグラウンドで音符を再生

純粋なオーディオベースではなく、音符を直接コントロールしたミディのようなシーケンスにしたいと思っています。 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

プレイグランドの非同期モードを有効にする必要があります。

はトップ(Xcodeの7、スウィフト2)でこれを追加します。

import XCPlayground 
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true 

とあなたのシーケンスが再生されます。

のXcode 8(スイフト3)に対して同じ:

import PlaygroundSupport 
PlaygroundPage.current.needsIndefiniteExecution = true