如何在iPhone上以低样本(约1000 Hz)录制

时间:2017-01-27 20:43:49

标签: ios audio-recording avaudiosession

我正在编写一个应用程序,用于在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(或其他框架)以低采样率录制音频?

2 个答案:

答案 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的硬件和软件应该是完全可行的。但这与采样率 完全不同。