Я пытаюсь запустить простой осциллятор, используя новый AVAudioSourceNode
Apple, представленный в последней версии. Код является выдержкой из примера кода, опубликованного Apple, доступного здесь.
Однако всякий раз, когда я запускаю это на игровой площадке Swift, обратный вызов запускается, но звук не издается. Когда я перемещаю этот код в приложение для iOS, он отлично работает. Есть идеи, что происходит? Насколько я знаю, другие аудиоузлы хорошо работают на игровых площадках, поэтому я не уверен, почему этот конкретный узел не работает. См. код ниже. Запуск с использованием Xcode 11 и macOS 10.15.
import AVFoundation
import PlaygroundSupport
let audioEngine = AVAudioEngine()
let mainMixerNode = audioEngine.mainMixerNode
let outputNode = audioEngine.outputNode
let format = outputNode.inputFormat(forBus: 0)
let incrementAmount = 1.0 / Float(format.sampleRate)
var time: Float = 0.0
func sineWave(time: Float) -> Float {
return sin(2.0 * Float.pi * 440.0 * time)
}
let sourceNode = AVAudioSourceNode { (_, _, frameCount, audioBufferList) -> OSStatus in
let bufferListPointer = UnsafeMutableAudioBufferListPointer(audioBufferList)
for frameIndex in 0..<Int(frameCount) {
let sample = sineWave(time: time)
time += incrementAmount
for buffer in bufferListPointer {
let buf: UnsafeMutableBufferPointer<Float> = UnsafeMutableBufferPointer(buffer)
buf[frameIndex] = sample
}
}
return noErr
}
audioEngine.attach(sourceNode)
audioEngine.connect(sourceNode, to: mainMixerNode, format: format)
audioEngine.connect(mainMixerNode, to: outputNode, format: nil)
mainMixerNode.outputVolume = 0.5
audioEngine.prepare()
do {
try audioEngine.start()
} catch {
print(error.localizedDescription)
}
PlaygroundPage.current.needsIndefiniteExecution = true
1 ответ
Кажется, что печать Playground действительно портит производительность блоков обработки в реальном времени. У меня была та же проблема, и затем я переместил код AVAudioSourceNode в другой файл .swift в папке «Источники», как было предложено здесь
Похожие вопросы
Связанные вопросы
Новые вопросы
swift
Swift — это язык программирования общего назначения, разработанный Apple Inc., впервые выпущенный в 2014 году для своих платформ и Linux. Swift имеет открытый исходный код. Используйте тег только для вопросов о языковых функциях или необходимости кода в Swift. Используйте теги [ios], [ipados], [macos], [watch-os], [tvos], [swiftui], [cocoa-touch] и [cocoa] для (не зависящих от языка) вопросов о платформах или рамки.