Channels ▼
RSS

Mobile

Recording iPhone Audio


Brandon Trebitowski is the author of iPhone and iPad in Action.


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.


NSString * filePath = [NSHomeDirectory()
      stringByAppendingPathComponent:@"Documents/recording.caf"];
NSDictionary *recordSettings =
      [[NSDictionary alloc] initWithObjectsAndKeys:
      [NSNumber numberWithFloat: 44100.0], AVSampleRateKey,
      [NSNumber numberWithInt: kAudioFormatAppleLossless],AVFormatIDKey,
      [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
      [NSNumber numberWithInt: AVAudioQualityMax], AVEncoderAudioQualityKey,nil];
AVAudioRecorder * soundRecorder =
      [[AVAudioRecorder alloc] initWithURL: [NSURL fileURLWithPath:filePath]
             settings: recordSettings
             error: nil];

Listing 1: Initialization code for AVAudioRecorder

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.


Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

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.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.
 

Video