2016-02-04 4 views
0
import CoreMotion  
var ButtonAudio4URL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Swing", ofType: "wav")!) 
var ButtonAudioPlayer4 = AVAudioPlayer() 
do { 
     try ButtonAudioPlayer4 = AVAudioPlayer(contentsOfURL: ButtonAudio4URL) 
     ButtonAudioPlayer4.prepareToPlay() 
    } catch { 
     print("audioPlayer failure") 
    } 
func play() { 
    ButtonAudioPlayer4.currentTime = 0 
    ButtonAudioPlayer4.play() 
} 
func play2() { 
    ButtonAudioPlayer4.currentTime = 0 
    ButtonAudioPlayer4.play() 
} 
func play3() { 
    ButtonAudioPlayer4.currentTime = 0 
    ButtonAudioPlayer4.play() 
} 
func stop() { 
    ButtonAudioPlayer4.currentTime = 0 
    ButtonAudioPlayer4.stop() 
} 
func stop2() { 
    ButtonAudioPlayer4.currentTime = 0 
    ButtonAudioPlayer4.stop() 
} 
func stop3() { 
    ButtonAudioPlayer4.currentTime = 0 
    ButtonAudioPlayer4.stop() 
} 
lastDirection = 0 //Idle accel 
    threshold = 1.0 //Minimum positive(right) accel 
    nthreshold = -1.0 //Minimum negative(left) accel 

    if motionManager.accelerometerAvailable { 
     let queue = NSOperationQueue() 
     motionManager.startAccelerometerUpdatesToQueue(queue, withHandler: { 
      data, error in 
      guard let data = data else{ 
       return 
      } 

    // Get the acceleration 
    let xAccel = data.acceleration.x //X accel 
    let yAccel = data.acceleration.y //Y accel 
    let zAccel = data.acceleration.z //Z accel 
    let xPositive = xAccel > 0 //Positive(right) x accel 
    let xNegative = xAccel < 0 //Negative(left) x accel 
    let yPositive = yAccel > 0 //Positive(up) y accel 
    let yNegative = yAccel < 0 //Negative(down) y accel 
    let zPositive = zAccel > 0 //Positive(front) z accel 
    let zNegative = zAccel < 0 //Negative(back) z accel 

    // Run if the acceleration is higher than theshold 
    if abs(xAccel) > self.threshold { 

     //If moved right 
     dispatch_async(dispatch_get_main_queue()) { 
      if self.lastDirection != 1 && xPositive { 
       self.lastDirection = 1 
       print("Up") 
       self.play() 
     } else if self.lastDirection !=  -1 && !xPositive { 
      self.lastDirection = -1 
      print("Down") 
      self.play() 
     } 
     } 
    } 

    // Run if the acceleration is higher than ntheshold 
    if abs(xAccel) < self.nthreshold { 

     //If moved left 
     dispatch_async(dispatch_get_main_queue()) { 
      if self.lastDirection != 1 && xNegative { 
       self.lastDirection = 1 
       print("Up") 
       self.play2() 
     } else if self.lastDirection !=  -1 && !xNegative { 
      self.lastDirection = -1 
      print("Down") 
      self.play2() 
     } 
     } 
    } 

    // Run if the acceleration is higher than theshold 
    if abs(yAccel) > self.threshold { 

     //If moved up 
     dispatch_async(dispatch_get_main_queue()) { 
      if self.lastDirection != 1 && yPositive { 
       self.lastDirection = 1 
       print("Up") 
       self.play() 
     } else if self.lastDirection !=  -1 && !yPositive { 
      self.lastDirection = -1 
      print("Down") 
      self.play() 
     } 
     } 
    } 

    // Run if the acceleration is higher than ntheshold 
    if abs(yAccel) < self.nthreshold { 

     //If moved left 
     dispatch_async(dispatch_get_main_queue()) { 
      if self.lastDirection != 1 && yNegative { 
       self.lastDirection = 1 
       print("Up") 
       self.play2() 
     } else if self.lastDirection !=  -1 && !yNegative { 
      self.lastDirection = -1 
      print("Down") 
      self.play2() 
    } 
    } 
    } 

    // Run if the acceleration is higher than theshold 
    if abs(zAccel) > self.threshold { 

    //If moved front 
    dispatch_async(dispatch_get_main_queue()) { 
    if self.lastDirection != 1 && zPositive { 
    self.lastDirection = 1 
    print("Up") 
    self.play() 
    } else if self.lastDirection !=  -1 && !zPositive { 
    self.lastDirection = -1 
    print("Down") 
    self.play() 
    } 
    } 
    } 

    // Run if the acceleration is higher than theshold 
    if abs(zAccel) < self.nthreshold { 

    //If moved back 
    dispatch_async(dispatch_get_main_queue()) { 
    if self.lastDirection != 1 && zNegative { 
    self.lastDirection = 1 
    print("Up") 
    self.play2() 
    } else if self.lastDirection !=  -1 && !zNegative { 
    self.lastDirection = -1 
    print("Down") 
    self.play2() 
    } 
    } 
    } 

    }) 

    } 

Здравствуйте, Я построил приложение IOS с Xcode 7.2, Swift 2.0, для i0S 9.2 Я хотел бы добавить функцию, где, когда пользователь волны их устройство в воздухе, Звуковой сигнал играть. Моя проблема в том, что, хотя звук воспроизводится, он внезапно останавливается и воспроизводится при повторном воспроизведении в процессе воспроизведения звука. Я хотел бы, чтобы звук просто воспроизводился один раз, без каких-либо перекрытий или остановки. Я включил весь код, связанный с CoreMotion, и исключил все остальные. Спасибо.Интеграция аудио и акселерометра для Swift 2.0? (Использование CoreMotion)

ответ

1

Если я понимаю вашу цель, вы, вероятно, хотели бы иметь булевский барьер, чтобы предотвратить дублирование игры.

Ex:


    var isPlaying1 = false 

    func play() { 
     if self.isPlaying1 == true { 
      return 
     } 
     ButtonAudioPlayer4.currentTime = 0 
     ButtonAudioPlayer4.play() 
     self.isPlaying1 = true 
    } 

    func stop() { 
     if self.isPlaying1 == false { 
      return 
     } 
     ButtonAudioPlayer4.currentTime = 0 
     ButtonAudioPlayer4.stop() 
     self.isPlaying1 = false 
    } 

+0

Спасибо так много. Не уверен, что это сработает, но я скоро проверю его, как только я получу время. –

+1

Хорошая идея, но вам не нужно создавать новое логическое значение, у AVAudioPlayer уже есть свойство 'playing' bool. – Moritz

+0

@EricD Как бы это реализовать? Звучит интересно. –

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

  • Нет связанных вопросов^_^