2017-03-28 2 views
-1

Je suis en train de faire un convertisseur de code Morse dans un terrain de jeu rapide. J'ai eu la conversion au travail, mais j'ai besoin de faire le code "parler" avec AVFoundation. Comment puis-je décoder la chaîne de code morse pour jouer le bip court pour chaque '.' et le long bip pour chaque '-'?decode Morse code par caractère rapide

Voici mon code à ce jour:

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() 
} 

Répondre

1

juste essayer de décoder la chaîne à l'audio en conséquence.

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

Pourquoi "speaker" est-il déclaré en dehors de la boucle? Pourquoi créer une instance de 'AVAudioPlayer()'? – rmaddy

+0

Et l'appel à 'play()' ne bloque pas. La boucle fonctionnera très rapidement en lançant plusieurs instances simultanées de lecteurs audio. – rmaddy

+0

mes fautes, je prends juste le code d'origine par exemple, j'ai mis à jour ma réponse. Ce devrait être une séquence de joueurs. – WeiJay