2017-03-30 4 views
1

私のモールスコードトランスレータは、サウンドを出力しません。私はこの機能を使わないでスピーカーと私の方法をテストしましたが、完璧に機能しますが、プログラムの残りの部分とは関連していません。コンパイラは私にエラーを与えず、プレイグラウンドはクラッシュしません。ただサウンドが再生されません。ボリュームと呼び出し音がいっぱいです。遊び場のSwift AVFoundationがサウンドを出力しない

私は今何時間もコードを使いこなしていますが、何も問題はありません。何が(もし何か)私は間違っていますか?

答えて

0

再生中に再生音に関する問題が発生しているようです。このスレッドを参照してください。

Playing a sound in a Swift Playground

しかし、私はあなたのコードに変更を加えると、それは仕事を得ることができました。私のコードは次のとおりです。

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 

コードを実行するためには、不定期実行を有効にする必要がありました。また、2番目のオーディオファイルの読み込みにいくつかの問題がありましたが、それが主に動作して以来、テストファイルやそれ以外のもので問題が発生したかどうかをさらに調査することはありませんでした。

-1

@Fahimはまだそれがエラー表示され

クラスモールス:NSObjectの、AVAudioPlayerDelegate { プライベートVARメッセージ= "" プライベートするvar dotSound:AVAudioPlayer! プライベートvar dashSound:AVAudioPlayer! プライベートletダッシュ=文字( " - ") プライベートletドット=文字( "。") プライベートvarインデックス: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 =モールス(メッセージ: "...---") m.playCharacter()

PlaygroundPage.current.needsIndefiniteExecution =真

+0

それは混乱ですあなたが正式な答えとしてコメントを投稿するとき。あなたのこの「答え」はFahimの答えに対するコメントでなければならず、あなたはこの更新されたコードを表示するためにあなたの質問を編集すべきです。 –

関連する問題