私はそれがまだ同じかどうかわからないiTunesに似た何かをしようとしています。曲をクリックすると、オーディオファイルのサンプルが提供されます。これは私のコードです。オーディオファイルのサンプルを再生する方法
音楽ファイルは、長い2-3minのようなものです。開始時間は42秒で開始しました。しかし、曲は最後まで終わります。私はオーディオファイルを30秒のサンプルにしようとしています。したがって、42秒で開始し、1分12秒で終了する必要があります。
ご協力いただきありがとうございます。
私はそれがまだ同じかどうかわからないiTunesに似た何かをしようとしています。曲をクリックすると、オーディオファイルのサンプルが提供されます。これは私のコードです。オーディオファイルのサンプルを再生する方法
音楽ファイルは、長い2-3minのようなものです。開始時間は42秒で開始しました。しかし、曲は最後まで終わります。私はオーディオファイルを30秒のサンプルにしようとしています。したがって、42秒で開始し、1分12秒で終了する必要があります。
ご協力いただきありがとうございます。
オーディオサンプルが再生されるたびに、一定時間内にプレーヤーを停止させるTimer
オブジェクトを作成できます。
var audioPlayer = AVAudioPlayer()
var timer: Timer?
func prepareMusic() {
....
// Your code to start playing sample
audioPlayer.currentTime = 42
audioPlayer.play()
// Here we are stopping previous timer if there was any, and creating new one for 30 seconds. It will make player stop.
timer?.invalidate()
timer = Timer(fire: Date.init(timeIntervalSinceNow: 30), interval: 0, repeats: false) { (timer) in
if self.audioPlayer.isPlaying {
self.audioPlayer.stop()
}
}
RunLoop.main.add(timer!, forMode: .defaultRunLoopMode)
}
func musicButton(sender: UIButton) {
....
// If sample is stopped by user — stop timer as well
if audioPlayer.isPlaying {
audioPlayer.stop()
timer?.invalidate()
}
}
私が考えることができるもう1つのケースがあります - 表示コントローラを隠す/閉じると、そのタイマーを停止することもできます。
override func viewWillDisappear(_ animated: Bool) {
timer?.invalidate()
}
nshumanありがとう、それは完全に動作します。私はAVFoundationの原因とタイマーの詳細については読む必要があります。私は何が起こっているのか完全にはわからないから。ありがとうございました。 :) –
「タイマー」を使用することをお勧めします。ユーザーが途中で再生を停止した場合は、無効にする必要があります。 – nshuman
こんにちはnshuman、AVFoundation私には新しいです。ですから、サンプルコードを私に提供してもかまわないのであれば、私はそれを感謝します。その間、私はAVFondationについてもっと読んでいくつもりです。 –
ちょっと@ luis-ramirez、私はサンプルコードで答えを投稿しました、それをチェックしてください。 – nshuman