【发布时间】:2014-08-15 14:23:34
【问题描述】:
我在使用 iOS 8 beta 中的新 AVFoundation 框架使用 AVAudioEngine 和 AVAudioFile 写入数据时遇到问题。
我想使用 m4a 格式在输入节点上点击写入数据。但是,输出文件似乎已损坏,但将文件格式更改为 .aac 并使用完全相同的设置,文件格式正确并且可以成功播放:
import Foundation
import AVFoundation
func captureMicrophoneInput() {
var error : NSError?
var audioFileSettings = Dictionary<NSObject, AnyObject>()
audioFileSettings[AVFormatIDKey] = kAudioFormatMPEG4AAC
audioFileSettings[AVNumberOfChannelsKey] = 1
audioFileSettings[AVSampleRateKey] = 44100.0
audioFileSettings[AVEncoderBitRatePerChannelKey] = 16
audioFileSettings[AVEncoderAudioQualityKey] = AVAudioQuality.Medium.toRaw()
let audioEngine = AVAudioEngine()
let inputNode = audioEngine.inputNode
// by using .acc the output file can be played successfully
let url : CFURL = NSURL.fileURLWithPath("/path/to/outputdir/myFileWithProblematicExtension.m4a") as CFURL
var audioFile = AVAudioFile(forWriting: url, settings: audioFileSettings, error: &error)
if error != nil {
println("AVAudioFile error")
println(error)
return
}
// Write the output of the input node to disk
inputNode.installTapOnBus(0, bufferSize: 4096,
format: inputNode.outputFormatForBus(0),
block: { (audioPCMBuffer : AVAudioPCMBuffer!, audioTime : AVAudioTime!) in
audioFile.writeFromBuffer(audioPCMBuffer, error: &error)
if error != nil {
println("AVAudioFile error")
println(error)
return
}
})
audioEngine.startAndReturnError(&error)
}
如果有人可以就此提供一些意见,我会很高兴。谢谢!
【问题讨论】:
-
ID 为 17495706 的错误已提交给 Apple。
-
您是否更改了设置以将 kAudioFormatAppleLossless 用于 AVFormatIDKey?
-
你有没有设法解决这个问题?我有同样的问题。使用 .acc 可以正常工作,但 .m4a 不行
标签: swift avfoundation ios8 beta