使用AVAudioEngine更改重复声音的音调

时间:2014-11-10 19:15:21

标签: ios swift repeat

所以我一直在努力让AVAudioEngine为我重复一个声音。我需要它一遍又一遍地播放曲目(约26秒)。它需要使用AVAudioEngine,而不是AVAudioPlayer,因为我需要能够改变它的音调。我找到了改变音调和强制声音重复的例子,但仅限于正弦波,下面的链接。

我的旧代码(在尝试实现问题之前)如下所示。按下按钮时,它会播放一次声音,但不会再次播放声音。

import UIKit
import AVFoundation
class aboutViewController: UIViewController {

    var audioUrl = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("chimes", ofType: "wav")!)
    var audioEngine = AVAudioEngine()
    var myPlayer = AVAudioPlayerNode()

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

        audioEngine.attachNode(myPlayer)
        var audioFile = AVAudioFile(forReading: audioUrl, error: nil)
        var audioError: NSError?
        audioEngine.connect(myPlayer, to: audioEngine.mainMixerNode, format: audioFile.processingFormat)
        myPlayer.scheduleFile(audioFile, atTime: nil, completionHandler: nil)
        audioEngine.startAndReturnError(&audioError)


    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func toggleSideMenu(sender: AnyObject) {
    toggleSideMenuView()
    }

    @IBAction func testSound(sender: AnyObject) {
    myPlayer.play()
    }
}

我的代码尝试在下面执行重复操作,但这并没有做任何事情(不会崩溃)。

import UIKit
import AVFoundation
class aboutViewController: UIViewController {

    var audioUrl = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("chimes", ofType: "wav")!)
    var audioEngine = AVAudioEngine()
    var myPlayer = AVAudioPlayerNode()
    var audioError: NSError?

    override func viewDidLoad() {
        super.viewDidLoad()

    // Do any additional setup after loading the view.

        audioEngine.attachNode(myPlayer)

        var buffer = AVAudioPCMBuffer(PCMFormat: myPlayer.outputFormatForBus(0),frameCapacity:100)
        buffer.frameLength = 100
        var mixer = audioEngine.mainMixerNode
        var audioFile = AVAudioFile(forReading: audioUrl, error: nil)

        audioEngine.connect(myPlayer, to: audioEngine.mainMixerNode, format: audioFile.processingFormat)

        audioEngine.startAndReturnError(&audioError)
        myPlayer.play()
        myPlayer.scheduleBuffer(buffer, atTime: nil, options:.Loops , completionHandler: nil)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
    }


    @IBAction func testSound(sender: AnyObject) {

    }

}

所以我要问的是:你能把一个反复播放音频文件的例子放在一起,并在顶部有一个变量(例如:let tone:Int = 100) ,设置音频文件将重复播放的音调。

感谢您的帮助!

链接:

重复正弦波示例:http://www.tmroyal.com/playing-sounds-in-swift-audioengine.html

音调变化示例:Using sound effects with AudioEngine

0 个答案:

没有答案