2017-03-28 1 views
-1

私はモールス符号変換器を素早い遊び場で作ろうとしています。私は変換することができますが、コードをAVFoundationで "話す"ようにする必要があります。モールスコードの文字列をデコードして、すべての '。'の短いビープ音を鳴らすことはできますか?すべての ' - 'の長いビープ音は?モールス符号を文字列でデコードする

はここで、これまでに私のコードです:

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

答えて

1

はちょうどそれに対応したオーディオに文字列をデコードしてみてください。

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

「スピーカー」がループ外で宣言されているのはなぜですか?なぜAVAudioPlayer()のインスタンスを作成するのですか? – rmaddy

+0

'play()'の呼び出しはブロックされません。このループは、オーディオプレーヤーのいくつかの同時インスタンスを実際に高速に起動します。 – rmaddy

+0

私の欠点は、私はちょうど起源コードを取る、私は私の答えを更新しました。これは一連のプレイヤーアイテムでなければなりません。 – WeiJay

関連する問題