我正在编写一个应用程序,用于在iPhone 6上使用内置麦克风录制单声道音频。当配置为以8000 Hz录制时,应用程序按预期工作。这是代码
// Set up audio session
let session = AVAudioSession.sharedInstance()
// Configure audio session
do {
try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
var recordSettings = [String:AnyObject]()
recordSettings[AVFormatIDKey] = Int(kAudioFormatLinearPCM) as AnyObject
// Set the sampling rate
recordSettings[AVSampleRateKey] = 8000.0 as AnyObject
recordSettings[AVNumberOfChannelsKey] = 1 as AnyObject
recorder = try AVAudioRecorder(url: outputFileURL, settings: recordSettings)
recorder?.delegate = self
recorder?.isMeteringEnabled = true
recorder?.prepareToRecord()
return true
}
catch {
throw Error.AVConfiguration
}
为了降低存储要求,我想以更低的采样率(理想情况下低于1000 Hz)进行记录。如果我将采样率设置为1000 Hz,应用程序将记录为8000 Hz。
根据Apple的文档,
硬件采样率的可用范围取决于设备。它通常在8000到48000赫兹之间。
问题...是否可以使用AVAudioSession
(或其他框架)以低采样率录制音频?
答案 0 :(得分:6)
iPhone上的录音是使用硬件编解码器进行的,因此可用的帧速率是硬编码的,无法更改。但是,如果你需要1kHz的采样率,你可以录制8kHz,而不仅仅是重新采样你用一些重采样库进行记录。就个人而言,我更喜欢使用ffmpeg来完成这些任务。
答案 1 :(得分:5)
我希望您知道,niquist theorem您不能指望非常有用的结果您尝试实现的目标。
即除了您只针对低频。对于这种情况,您可能希望首先使用低通滤波器。 几乎不可能理解频率低于500 Hz
的声音。语音通常被认为需要3 kHz
,这使得采样率为6000
。
的示例 您必须尝试的内容尝试类似的内容:
ffmpeg -i tst.mp3 -ar 1000 tst.wav
例如一些人声和听取结果。 然而,您可以使用例如可以实现一些可接受的折衷。采样率为3000。
另一种方法是像@manishg建议的那样,动态地执行压缩 。如今智能手机可以实时进行视频压缩,这对于iPhone的硬件和软件应该是完全可行的。但这与采样率 完全不同。