AVAudioPlayerNode не воспроизводит звук
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.
0 ответов
Если вам нужно устройство вывода для воспроизведения, для наушников или другого вида выбора должна быть установлена категория аудиосессии.
try AVAudioSession.sharedInstance().setCategory(.playAndRecord , mode: .default , options: .defaultToSpeaker)