2017-03-30 3 views
1

Mein Morse-Code-Übersetzer gibt den Ton nicht so aus, wie er sollte. Ich habe die Lautsprecher und meine Methoden ohne diese Funktion getestet und es funktioniert einwandfrei, aber es ist nicht im Zusammenhang mit dem Rest des Programms. Der Compiler gibt mir keine Fehler und der Spielplatz stürzt nicht ab, es spielt einfach keinen Ton. Lautstärke und Klingelton sind voll.Swift AVFoundation im Spielplatz gibt keinen Ton aus

Ich habe seit Stunden mit dem Code herum und jetzt nichts funktioniert. Was (wenn überhaupt) mache ich falsch?

Antwort

0

Es scheint auf einigen Spielplätzen Probleme mit dem Abspielen von Audio. Siehe dieses Thema anschauen:

Playing a sound in a Swift Playground

Allerdings konnte ich einige Änderungen an Ihrem Code machen und damit es funktioniert. Hier ist mein Code:

class Morse:NSObject, AVAudioPlayerDelegate { 
    private var message = "" 
    private var dotSound:AVAudioPlayer! 
    private var dashSound:AVAudioPlayer! 
    private let dash = Character("-") 
    private let dot = Character(".") 
    private var index:String.Index! 

    init(message:String) { 
     super.init() 
     do { 
      if let url = Bundle.main.url(forResource:"beep_short", withExtension:"mp3") { 
       self.dotSound = try AVAudioPlayer(contentsOf:url) 
       self.dotSound.delegate = self 
       self.dotSound.prepareToPlay() 
      } 
     } catch { 
      NSLog("Error loading dot audio!") 
     } 
     do { 
      if let url = Bundle.main.url(forResource:"beep_long", withExtension:"mp3") { 
       self.dashSound = try AVAudioPlayer(contentsOf:url) 
       self.dashSound.delegate = self 
       self.dashSound.prepareToPlay() 
      } 
     } catch { 
      NSLog("Error loading dash audio!") 
     } 
     self.message = message 
     self.index = message.startIndex 
    } 

    func playCharacter() { 
     let character = message.characters[index] 
     NSLog("Character: \(character)") 
     if character == dash { 
      dashSound.play() 
     } else if character == dot { 
      dotSound.play() 
     } 
    } 

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { 
     NSLog("Finished playing") 
     if index != message.endIndex { 
      self.index = message.index(after:index) 
      playCharacter() 
     } 
    } 
} 

let m = Morse(message:"...---") 
m.playCharacter() 

PlaygroundPage.current.needsIndefiniteExecution = true 

Ich musste indefinite Ausführung aktivieren, um den Code überhaupt ausführen zu lassen. Außerdem hatte ich einige Probleme mit der zweiten Audiodatei, die geladen wurde, aber ich untersuchte nicht weiter, um zu sehen, ob es ein Problem mit meiner Testdatei oder etwas anderem war, da es meistens funktionierte.

-1

@Fahim noch es zeigt Fehler

Klasse Morse: NSObject, AVAudioPlayerDelegate { private var message = "" private var dotSound: AVAudioPlayer! private var dashSound: AVAudioPlayer! private let dash = Zeichen ("-") private let dot = Zeichen (".") private var index: String.Index!

init(message:String) { 
    super.init() 
    do { 
     if let url = Bundle.main.url(forResource:"beep_short", withExtension:"mp3") { 
      self.dotSound = try AVAudioPlayer(contentsOf:url) 
      self.dotSound.delegate = self 
      self.dotSound.prepareToPlay() 
     } 
    } catch { 
     NSLog("Error loading dot audio!") 
    } 
    do { 
     if let url = Bundle.main.url(forResource:"beep_long", withExtension:"mp3") { 
      self.dashSound = try AVAudioPlayer(contentsOf:url) 
      self.dashSound.delegate = self 
      self.dashSound.prepareToPlay() 
     } 
    } catch { 
     NSLog("Error loading dash audio!") 
    } 
    self.message = message 
    self.index = message.startIndex 
} 

func playCharacter() { 
    let character = message.characters[index] 
    NSLog("Character: \(character)") 
    if character == dash { 
     dashSound.play() 
    } else if character == dot { 
     dotSound.play() 
    } 
} 

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { 
    NSLog("Finished playing") 
    if index != message.endIndex { 
     self.index = message.index(after:index) 
     playCharacter() 
    } 
} 

}

let m = Morse (Meldung: "...---") m.playCharacter()

PlaygroundPage.current.needsIndefiniteExecution true =

+0

Es ist verwirrend wenn Sie Kommentare als offizielle Antwort posten. Diese "Antwort" von Ihnen sollte ein Kommentar zu Fahims Antwort sein und Sie sollten Ihre Frage bearbeiten, um diesen aktualisierten Code anzuzeigen. –