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(或其他框架)以低采样率录制音频?
iPhone上的录音是使用硬件编解码器进行的,因此可用的帧速率是硬编码的,无法更改.但是,如果你需要1kHz的采样率,你可以录制8kHz,而不仅仅是重新采样你用一些重采样库进行记录.就个人而言,我更喜欢使用ffmpeg来执行此类任务.
我希望你知道,通过niquist定理你不能指望你试图实现的非常有用的结果.
也就是说,除了您只针对低频率.对于这种情况,您可能希望首先使用低通滤波器.这几乎是不可能的理解与olny频率的声音以下500 Hz.通常认为语音需要3 kHz,这使得采样率达到6000.
有关您期望的示例,请尝试类似于:
ffmpeg -i tst.mp3 -ar 1000 tst.wav
Run Code Online (Sandbox Code Playgroud)
用例如一些人声并听取结果.但是,您可以使用例如3000的采样率实现一些可接受的折衷.
另一种方法是做一些压缩 上飞作为@manishg建议.如今智能手机可以实时进行视频压缩,这对于iPhone的硬件和软件应该是完全可行的.但这与降低采样率完全不同.
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |