私は、一連のトーンが再生され、ユーザーがトーンを繰り返そうとするSimonライクなメモリゲームを持っています。問題は、私が時折、ひどくひどくひどい音を出すことです。それはちょうど少数の音符の後でもよいし、20音符の後でもよい。サウンドはすべて2秒間のwavファイルです。私は10人の選手を回り、どの音もクリッピングされないようにします。 (私は50まで試しましたが、何も役に立たなかった)audioPlayerDidFinishPlaying
を実装しようとしました。サウンドが完成してもプレイヤーを止めることができましたが、それも役に立たなかった。最後に、私はprepareToPlay()
を追加しました - 悲しいことに、違いはありません。AVAudioPlayerクラックルとポップス
関連があるかもしれないし、関連していないかもしれない1つの興味深い問題は、約15音符のシーケンスの後に、音声がすべて一緒に働くことがなくなることです。アプリは普通のように続きますが、サウンドはありません。
func playSound(_ soundID: Int) {
var soundName = ""
switch soundID {
case 0:
soundName = "beep1"
case 1:
soundName = "beep2"
case 2:
soundName = "beep3"
case 3:
soundName = "beep4"
case 4:
soundName = "swish3"
default:
soundName = "clank"
}
guard let url = Bundle.main.url(forResource: soundName, withExtension: "wav") else { return }
do {
buttonSound.insert(try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.wav.rawValue), at: playerIndex)
buttonSound[playerIndex].prepareToPlay()
buttonSound[playerIndex].delegate = self
if playerIndex < 10 {
buttonSound[playerIndex].play()
playerIndex += 1
} else {
buttonSound[playerIndex].play()
playerIndex = 0
}
} catch {
// error
}
}
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
if flag {
player.stop()
}
}
/********私はAVAudioPlayerの作成を移動*********/
UPDATE:ここ
は、コードのオーディオ部分があります私はどこかで横断した古い例に基づいた独自のクラスです。それは15音の問題の後で完全に切り取ったオーディオを解決しましたが、クラックやポップはまだそこにあります!私も運がない音を再録音しようとしました。ここで
は、必要に応じてAVAudioPlayersを作成するためのクラスです:サウンドを再生
import UIKit
import AVFoundation
private var players: [AVAudioPlayer] = []
class AVAudioPlayerPool: NSObject {
class func playerWithURL(url: URL) -> AVAudioPlayer? {
let availablePlayers = players.filter { (player) -> Bool in
return player.isPlaying == false && player.url == url
}
if let playerToUse = availablePlayers.first {
playerToUse.prepareToPlay()
return playerToUse
}
do {
let newPlayer = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.wav.rawValue)
players.append(newPlayer)
newPlayer.prepareToPlay()
return newPlayer
} catch {
return nil
}
}
}
は単純です:
func playSound(_ soundID: Int) {
var soundName = ""
switch soundID {
case 0:
soundName = "tt1"
case 1:
soundName = "tt2"
case 2:
soundName = "tt3"
case 3:
soundName = "tt4"
case 4:
soundName = "swish3"
default:
soundName = "clank"
}
guard let url = Bundle.main.url(forResource: soundName, withExtension: "wav") else { return }
let player = AVAudioPlayerPool.playerWithURL(url: url)
player?.play()
}
誰がどんな考えを持っている場合 - それはあなたが試すかもしれないだけで、次のステップだ場合でも、 ...
バックグラウンドキューでファイルを再生する方法はありますか?メインスレッドがあなたのゲームを処理していて忙しいかもしれませんが、あなたが経験しているクラックルを引き起こす可能性があります – hhanesand
私はメインスレッドから動かしてみました。しかし、提案に感謝します。 – squarehippo10
OALSimpleAudioを使用しましたか? https://github.com/kstenerud/ObjectAL-for-iPhone私は現在のゲームプロジェクトでそれを使用していますが、それにはさまざまなサウンドがあります。これはObjective-Cコードですが、ブリッジヘッダーを使用して素早くプロジェクトに追加するのは簡単です。 – Woof