2015-03-31 2 views
1

Почему следующий код не воспроизводит звук? Он возвращает «true» для play(), но я ничего не слышу.AVAudioPlayer.play() не воспроизводит звук

let path = "/Users/account/Music/sound.mp3"; 
    let fileURL = NSURL(fileURLWithPath: path) 
    var Player = AVAudioPlayer(contentsOfURL:fileURL, error:nil); 

    Player.delegate = self; 
    Player.prepareToPlay(); 
    Player.volume = 1.0; 
    var res = Player.play(); 
    println(res); 

Если вместо этого я использую следующий код, я слышу звук.

var inFileURL:CFURL = fileURL!; 
    var mySound = UnsafeMutablePointer<SystemSoundID>.alloc(sizeof(SystemSoundID)); 
    AudioServicesCreateSystemSoundID(inFileURL, mySound); 
    AudioServicesPlaySystemSound(mySound.memory) 
  • OS X Yosemite 10.10.3
  • Xcode 6,2

ответ

1

Проблема заключается в том, что Player, ваш AVAudioPlayer, является локальная переменная. Таким образом, он сразу же выходит из жизни - прежде чем он даже начнет играть, не говоря уже о том, чтобы закончить игру.

Решение: сделать это недвижимость вместо этого, чтобы оно было persist.

+0

И за решающую разницу в жизни между локальной (автоматической) переменной и свойством см. В моей книге: http://www.apeth.com/swiftBook/ch03.html#_variable_scope_and_lifetime – matt

+0

Я добавил var Player: AVAudioPlayer = AVAudioPlayer(); вне функции, а затем она сработала. –

Смежные вопросы