2017-03-28 4 views
-1

Ich versuche, einen Morsecode-Konverter in einem schnellen Spielplatz zu machen. Ich habe die Konvertierung zur Arbeit, aber ich muss den Code mit AVFoundation "sprechen". Wie kann ich die Morse-Code-Zeichenfolge dekodieren, um den kurzen Piepton für jedes '.' und der lange Piepton für jedes '-'?decode morse code by character swift

Hier ist mein Code so weit:

func speakTheCode(message: String) { 
    var speaker = AVAudioPlayer() 

    let longBeep = URL(fileURLWithPath: Bundle.main.path(forResource: "beep_long", ofType: "mp3")!) 
    let shortBeep = URL(fileURLWithPath: Bundle.main.path(forResource: "beep_short", ofType: "mp3")!) 

    try! speaker = AVAudioPlayer(contentsOf: longBeep) 
    try! speaker = AVAudioPlayer(contentsOf: shortBeep) 

    speaker.prepareToPlay() 
} 

Antwort

1

Versuchen Sie einfach die Zeichenfolge an den entsprechenden Audio zu dekodieren.

func speakTheCode(message: String) { 
    var audioItems: [AVPlayerItem] = [] 

    guard let longPath = Bundle.main.path(forResource: "beep_long", ofType: "mp3"), 
    let shortPath = Bundle.main.path(forResource: "beep_short", ofType: "mp3") else { 
     print("Path is not availabel") 
     return 
    } 

    let longBeep = AVPlayerItem(url: URL(fileURLWithPath: longPath)) 
    let shortBeep = AVPlayerItem(url: URL(fileURLWithPath: shortPath)) 

    for character in message.characters { 
     if character == Character("-") { 
      audioItems.append(longBeep) 
     } else if character == Character(".") { 
      audioItems.append(shortBeep) 
     } 
    } 

    let player = AVQueuePlayer(items: audioItems) 
    player.play() 

} 

speakTheCode(message: "..--..") 
+0

Warum wird 'Lautsprecher' außerhalb der Schleife deklariert? Warum eine wegwerfbare Instanz von 'AVAudioPlayer()' erstellen? – rmaddy

+0

Und der Aufruf von 'play()' blockiert nicht. Die Schleife wird sehr schnell laufen und mehrere gleichzeitige Instanzen von Audio-Playern auslösen. – rmaddy

+0

meine Fehler, ich nehme nur den Ursprungscode zum Beispiel, habe ich meine Antwort aktualisiert. Es sollte eine Abfolge von Player-Elementen sein. – WeiJay