Как записать аудио на iPhone - PullRequest
3 голосов
/ 30 декабря 2008

Я хочу записать звук с помощью iphone (<2 минуты) и сохранить его в файл. Я посмотрел на SpeakHere, но это меня смущает. Какие классы я использую? Какие методы делегата я создаю? </p>

Спасибо!

Ответы [ 3 ]

5 голосов
/ 28 мая 2009

Согласен, SpeakHere - не очень хорошая отправная точка для изучения звука iPhone.

Аудио iPhone использует две концепции. AudioQueues и AudioSessions. Если вы хотите записать в файл, вам нужно будет создать один AudioSession, активировать сеанс и создать AudioInputQueue и AudioOutputQueue.

Ссылка на AudioQueues (безусловно, часть, с которой вы будете иметь дело больше всего):

http://developer.apple.com/iphone/library/documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/Introduction/Introduction.html

Что касается аудиосеансов:

http://developer.apple.com/iphone/library/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/Introduction/Introduction.html

Хотя вы можете игнорировать большинство вещей AudioSession, так как вы не будете делать ничего настолько сложного. Итак, в основном, вот шаги:

  1. Инициализируйте аудио сеанс обратным вызовом AudioInterrupt. Этот обратный вызов обрабатывает входящий вызов, прерывая вашу программу.
  2. Настройка форматов данных как для входящего аудио, так и для аудио, связанного с файлами. Это хранится в структуре AudioStreamBasicDescripion.
  3. Создайте объект AudioQueue и используйте AudioQueueNewInput для его инициализации. Вам нужно будет указать обратный вызов для обработки входящего аудио. Здесь вы можете указать сохранение звука в файл, но будьте осторожны, это поток в реальном времени, и вам придется постараться изо всех сил, чтобы не блокировать его слишком долго.
  4. Определите, сколько AudioQueueBuffers будет иметь ваша система записи. Эти буферы заполняются в соответствии с вашей частотой дискретизации, которую вы указали в шаге 2. Вам нужно будет настроить их так, чтобы у вас было достаточно времени для обработки до получения следующего буфера.
  5. AudioQueueStart на вашем AudioQueue.

Я не включил здесь все параметры, но для этого и нужен API.

Надеюсь, это поможет.

[EDIT]

Извините, забыл включить выходные данные, хотя они довольно просты. Создайте еще одно AudioQueue, инициализируйте его с помощью AudioQueueNewOutput, и API должен быть в состоянии вести вас до конца.

Приветствие.

2 голосов
/ 06 июня 2012

Этот код для записи звука

Не забудьте добавить AVFoundation и AudioToolBox Framework

NSMutableDictionary* recordSetting = [[NSMutableDictionary alloc] init];
        [recordSetting setValue :[NSNumber numberWithInt:kAudioFormatAppleIMA4] forKey:AVFormatIDKey];
        [recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; 
        [recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];

recordedTmpFile = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:@"filename.caf"]];
NSLog(@"Using File called: %@",recordedTmpFile);

recorder = [[ AVAudioRecorder alloc] initWithURL:recordedTmpFile settings:recordSetting error:nil];
[recorder setDelegate:self];
[recorder prepareToRecord];
[recorder record];
2 голосов
/ 16 марта 2010

AudioQueues больше не нужны для записи аудио. Теперь это очень простой процесс с использованием класса AVAudioRecorder.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...