2016-05-15 11 views
0

再生中にピッチを調整できるようにするために、いくつかのオーディオを取得しようとしています。私はSwiftとiOSの新機能ですが、最初の試みは再生中にtimePitchNode.pitchを変更することでした。ただし、再生中は更新されません。私の現在の試みは、audioEngineをリセットし、それが再生していたところから再開することです(下記参照)。どのようにオーディオが現在あるのかを判断するにはどうしたらいいですか?iOS AVAudioUnitTimePitchで再生中にピッチを調整する

var audioFile: AVAudioFile? 
var audioEngine: AVAudioEngine? 
var audioPlayerNode: AVAudioPlayerNode? 
var pitch: Int = 1 { 
    didSet { 
     playResumeAudio() 
    } 
} 

… 

func playResumeAudio() { 
    var currentTime: AVAudioTime? = nil 

    if audioPlayerNode != nil { 
     let nodeTime = audioPlayerNode!.lastRenderTime! 
     currentTime = audioPlayerNode!.playerTimeForNodeTime(nodeTime) 
    } 

    if audioEngine != nil { 
     audioEngine!.stop() 
     audioEngine!.reset() 
    } 

    audioEngine = AVAudioEngine() 

    audioPlayerNode = AVAudioPlayerNode() 
    audioEngine!.attachNode(audioPlayerNode!) 

    let timePitchNode = AVAudioUnitTimePitch() 
    timePitchNode.pitch = Float(pitch * 100) 
    timePitchNode.rate = rate 
    audioEngine!.attachNode(timePitchNode) 

    audioEngine!.connect(audioPlayerNode!, to: timePitchNode, format: nil) 
    audioEngine!.connect(timePitchNode, to: audioEngine!.outputNode, format: nil) 

    audioPlayerNode!.scheduleFile(audioFile!, atTime: nil, completionHandler: nil) 
    let _ = try? audioEngine?.start() 

    audioPlayerNode!.playAtTime(currentTime) 
} 
+0

ここで、「レート」は宣言されていますか? –

+0

これは単なる変数です – Jacob

答えて

0

私は明らかにダムになっていました。 再生中にピッチを変更し、更新します。オーディオをリセットする必要はありません。再生中のノードを変更するだけで、動作します。

関連する問題