gpt4 book ai didi

swift - AVFoundation:使用 AVAudioEngine 和 AVAudioFile 的格式错误的 .m4a 文件格式

转载 作者:搜寻专家 更新时间:2023-10-31 21:49:03 24 4
gpt4 key购买 nike

我在使用 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)
}

如果有人可以对此提供一些意见,我会很高兴。谢谢!

最佳答案

从 XCode 6.0/Swift 1.0 GM 开始,我的 Swift 代码也无法录制为 MPEG4AAC 格式。显然常量 kAudioFormatMPEG4AAC 的定义仍然不正确。该文件已创建但未填充任何音频样本。

我能找到的唯一解决方法是在 Objective C 辅助函数中build设置字典:

+ (NSDictionary *)getRecorderSettings
{
return @{AVFormatIDKey: @(kAudioFormatMPEG4AAC),
AVNumberOfChannelsKey: @(1),
AVSampleRateKey:@(22050),
AVEncoderAudioQualityKey: @(AVAudioQualityHigh)};
}

并将其传递回用于初始化 AVAudioRecorder 的 Swift 代码:

_recorder = AVAudioRecorder(URL: fileURL, settings: recsettings, error: &initRecorderError)   

关于swift - AVFoundation:使用 AVAudioEngine 和 AVAudioFile 的格式错误的 .m4a 文件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24401609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com