【发布时间】:2016-04-17 12:26:47
【问题描述】:
我想将 mp3 和 wav 音频文件加载为浮点数或双精度数组,类似于 scipy 中的 io.wavfile.read 函数。我可以通过将音频流写入缓冲区来处理麦克风数据或播放音频。但是,我不确定如何一次加载所有音频文件的数据。
-- 更新
对于将来使用音频信号数据的任何人,这里有一个功能可以解决问题。它基于 Rhythmic Fistman 的回答。
func loadAudioSignal(audioURL: NSURL) -> (signal: [Float], rate: Double, frameCount: Int) {
let file = try! AVAudioFile(forReading: audioURL)
let format = AVAudioFormat(commonFormat: .PCMFormatFloat32, sampleRate: file.fileFormat.sampleRate, channels: file.fileFormat.channelCount, interleaved: false)
let buf = AVAudioPCMBuffer(PCMFormat: format, frameCapacity: UInt32(file.length))
try! file.readIntoBuffer(buf) // You probably want better error handling
let floatArray = Array(UnsafeBufferPointer(start: buf.floatChannelData[0], count:Int(buf.frameLength)))
return (signal: floatArray, rate: file.fileFormat.sampleRate, frameCount: Int(file.length))
}
【问题讨论】:
-
看看
EZAudio:github.com/syedhali/EZAudio -
这是一个不错的库,谢谢。我无法让它在 Swift 中为我工作,我会更新我的问题。