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

How to record at a low sample (around 1000 Hz) on an iPhone

我正在编写一个应用程序来使用 iPhone6 上的内置麦克风录制单声道音频。当配置为以 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 的文档,

The available range for hardware sample rate is device dependent. It typically ranges from 8000 through 48000 hertz.

问题...是否可以使用AVAudioSession(或其他框架)以低采样率录制音频?

iPhone 上的音频录制是使用硬件编解码器制作的,因此可用的帧速率是硬编码的,无法更改。但是,如果您需要 1kHz 的采样率,您可以以 8kHz 的频率进行记录,而不仅仅是重新采样,您可以使用一些重新采样库进行记录。就个人而言,我更喜欢使用 ffmpeg 来完成此类任务。

我希望您知道,niquist theorem无法期望非常有用的结果您试图实现的目标.

也就是说,除了您的目标是仅低频。对于这种情况,您可能想先使用低通滤波器。 几乎不可能理解 olny 频率低于500 Hz 的声音。语音通常被认为需要 3 kHz,这使得采样率为 6000

对于一个例子 你所期望的尝试类似的东西:

ffmpeg -i tst.mp3 -ar 1000 tst.wav

例如一些人声和听结果。 但是,您可以使用例如实现一些可接受的权衡采样率为 3000。

另一种方法是按照@manishg 的建议压缩即时。由于如今的智能手机可以实时进行视频压缩,因此使用 iPhone 的硬件和软件应该是完全可行的。但这与降低 采样率 .

完全不同的事情