Recording iPhone Audio

In the past versions of the iPhone SDK, audio recording was a daunting task. It required intimate knowledge of audio processing as well as a lot of code. With the release of the 3.0 SDK, Apple has provided us with a much simpler way of achieving this functionality. All of the classes for recording audio can be found in the AVFoundation framework. In order to use these classes, you must add AVFoundation.framework to your project.

Initializing the Audio Recorder

When initializing a new AVAudioRecorder object, you should avoid using the default constructor init. This is to reduce complexity, as this class requires quite a bit of configuration. The constructor you should is initWithURL:settings:error. It will allow you to specify the location on disk to record the audio to as well as provide various audio settings.

The first parameter is the location where the recording will be stored. Although it is expressed as an NSURL, it is really a local path that points to a location on disk. In most cases, you will want to store recordings in the Documents directory.

The next parameter is an NSDictionary that contains the settings for the recording. Table 1 lists some of the settings that you might want to consider when setting up your recorder.

Setting Key

Description

AVSampleRateKey

A sample rate, in hertz, expressed as an NSNumber floating-point value.

AVFormatIDKey

A pretty common value for this is
kAudioFormatAppleLossless

AVNumberOfChannelsKey

The number of channels expressed as an NSNumber integer value. We can set this value to 1.

AVEncoderAudioQualityKey

A key that refers to the quality of the audio being played.

Table 1: Basic audio settings for AVAudioRecorder

There are quite a few other settings that can be specified when creating your recorder. These settings are all optional and all have default values. You can use these settings to fine-tune your audio recording. Listing 1 demonstrates how to build an AVAudioRecorder object with some basic settings.

One thing we want to point out is the filePath. This is an NSString that points to a file named recording.caf in the documents directory. This path is then converted to an during the construction of the recorder.

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task.
However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

Video

This month's Dr. Dobb's Journal

This month,
Dr. Dobb's Journal is devoted to mobile programming. We introduce you to Apple's new Swift programming language, discuss the perils of being the third-most-popular mobile platform, revisit SQLite on Android
, and much more!