AudioPlayerNode - это переменная экземпляра, следующий код:
class HXAudioEngine {
private var audioEngine: AVAudioEngine = AVAudioEngine()
var digitFileUrl: URL? {
didSet {
if let digitUrl = digitFileUrl {
do {
digitAudioFile = try AVAudioFile(forReading: digitUrl)
} catch let error {
print("Error loading Digit file: \(error.localizedDescription)")
}
}
}
}
var digitAudioFile: AVAudioFile? {
didSet {
if let digitFile = digitAudioFile {
digitAudioFormat = digitFile.processingFormat
digitFileBuffer = AVAudioPCMBuffer(pcmFormat: digitFile.processingFormat, frameCapacity: UInt32(digitFile.length))
}
}
}
var digitFileBuffer: AVAudioPCMBuffer? {
didSet {
if let buffer = digitFileBuffer {
do {
try digitAudioFile?.read(into: buffer)
} catch let error {
print("Error loading digit file into buffer: \(error.localizedDescription)")
}
}
}
}
var digitAudioFormat: AVAudioFormat?
var digitPlayer: AVAudioPlayerNode = AVAudioPlayerNode()
func playDigit() {
let file = "d0p1m00db"
digitFileUrl = Bundle.main.url(forResource: file, withExtension: "wav")
audioEngine.attach(digitPlayer)
audioEngine.connect(digitPlayer, to: audioEngine.mainMixerNode, format: digitAudioFormat)
audioEngine.prepare()
do {
try audioEngine.start()
} catch let error {
print(error)
}
guard let digitBuffer = digitFileBuffer else { return }
guard let digitAudioFile = digitAudioFile else { return }
digitPlayer.scheduleBuffer(digitBuffer, at: nil, options: .interrupts) {
print("Done playing digit")
}
digitPlayer.play()
}
}
По какой-то причине воспроизводимый файл является просто щелчком.Аудио файл - это файл длиной 1 секунда, в котором женщина говорит одну цифру.
Похоже, проигрыватель ускоряется через звуковой файл и, следовательно, затемняет речь.Частота дискретизации составляет 44100. При чтении переполнения стека существует множество решений, говорящих об освобождении аудиоплеера до завершения звукового файла.
Но я протестировал отдельное приложение, созданное с помощью учебника Raywenderlich: https://www.raywenderlich.com/5154-avaudioengine-tutorial-for-ios-getting-started,, которое фактически показывает длину звукового файла и ход воспроизведения.И все выглядит хорошо, но даже тогда аудиофайл не воспроизводится должным образом.
Есть ли проблема с моей реализацией или это аудиофайл?Аудиофайл хорошо воспроизводится на itunes.