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

Eps*_*lon 5 audio-recording ios 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
    }
Run Code Online (Sandbox Code Playgroud)

为了降低存储要求,我想以更低的采样率(理想情况下小于1000 Hz)进行记录.如果我将采样率设置为1000 Hz,应用程序记录为8000 Hz.

根据Apple的文档,

硬件采样率的可用范围取决于设备.它通常在8000到48000赫兹之间.

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

Ale*_*kov 6

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


RuD*_*vel 5

我希望你知道,通过niquist定理不能指望你试图实现的非常有用的结果.

也就是说,除了您只针对低频率.对于这种情况,您可能希望首先使用低通滤波器.这几乎是不可能的理解与olny频率的声音以下500 Hz.通常认为语音需要3 kHz,这使得采样率达到6000.

有关您期望的示例,尝试类似于:

ffmpeg -i tst.mp3 -ar 1000 tst.wav
Run Code Online (Sandbox Code Playgroud)

用例如一些人声并听取结果.但是,您可以使用例如3000的采样率实现一些可接受的折衷.

另一种方法是做一些压缩 上飞作为@manishg建议.如今智能手机可以实时进行视频压缩,这对于iPhone的硬件和软件应该是完全可行的.但这与降低采样率完全不同.