На самом деле примеров нет вообще. Вот мой рабочий код. Запись запускается пользователем, нажимающим кнопку на панели навигации. В записи используется качество cd (44100 сэмплов), стерео (2 канала), линейная pcm. Осторожно: если вы хотите использовать другой формат, особенно кодированный, убедитесь, что вы полностью понимаете, как установить параметры AVAudioRecorder (внимательно прочитайте документацию по типам аудио), иначе вы никогда не сможете правильно инициализировать его. Еще кое-что. В коде я не показываю, как обрабатывать данные измерений, но вы можете легко это понять. Наконец, обратите внимание, что метод AVAudioRecorder deleteRecording на момент написания статьи приводит к сбою приложения. Вот почему я удаляю записанный файл через диспетчер файлов. Когда запись завершена, я сохраняю записанное аудио как NSData в редактируемом в данный момент объекте, используя KVC.
#define DOCUMENTS_FOLDER [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]
- (void) startRecording{
UIBarButtonItem *stopButton = [[UIBarButtonItem alloc] initWithTitle:@"Stop" style:UIBarButtonItemStyleBordered target:self action:@selector(stopRecording)];
self.navigationItem.rightBarButtonItem = stopButton;
[stopButton release];
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *err = nil;
[audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err];
if(err){
NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
return;
}
[audioSession setActive:YES error:&err];
err = nil;
if(err){
NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
return;
}
recordSetting = [[NSMutableDictionary alloc] init];
[recordSetting setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
[recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
[recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];
[recordSetting setValue :[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
[recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];
[recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey];
// Create a new dated file
NSDate *now = [NSDate dateWithTimeIntervalSinceNow:0];
NSString *caldate = [now description];
recorderFilePath = [[NSString stringWithFormat:@"%@/%@.caf", DOCUMENTS_FOLDER, caldate] retain];
NSURL *url = [NSURL fileURLWithPath:recorderFilePath];
err = nil;
recorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&err];
if(!recorder){
NSLog(@"recorder: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
UIAlertView *alert =
[[UIAlertView alloc] initWithTitle: @"Warning"
message: [err localizedDescription]
delegate: nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
return;
}
//prepare to record
[recorder setDelegate:self];
[recorder prepareToRecord];
recorder.meteringEnabled = YES;
BOOL audioHWAvailable = audioSession.inputIsAvailable;
if (! audioHWAvailable) {
UIAlertView *cantRecordAlert =
[[UIAlertView alloc] initWithTitle: @"Warning"
message: @"Audio input hardware not available"
delegate: nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[cantRecordAlert show];
[cantRecordAlert release];
return;
}
// start recording
[recorder recordForDuration:(NSTimeInterval) 10];
}
- (void) stopRecording{
[recorder stop];
NSURL *url = [NSURL fileURLWithPath: recorderFilePath];
NSError *err = nil;
NSData *audioData = [NSData dataWithContentsOfFile:[url path] options: 0 error:&err];
if(!audioData)
NSLog(@"audio data: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
[editedObject setValue:[NSData dataWithContentsOfURL:url] forKey:editedFieldKey];
//[recorder deleteRecording];
NSFileManager *fm = [NSFileManager defaultManager];
err = nil;
[fm removeItemAtPath:[url path] error:&err];
if(err)
NSLog(@"File Manager: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
UIBarButtonItem *startButton = [[UIBarButtonItem alloc] initWithTitle:@"Record" style:UIBarButtonItemStyleBordered target:self action:@selector(startRecording)];
self.navigationItem.rightBarButtonItem = startButton;
[startButton release];
}
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *) aRecorder successfully:(BOOL)flag
{
NSLog (@"audioRecorderDidFinishRecording:successfully:");
// your actions here
}
Хотя это вопрос с ответом (и довольно старый), я решил опубликовать свой полный рабочий код для тех, кому было трудно найти хороший пример работы (из коробки) при воспроизведении и записи - включая закодированный, pcm, воспроизведение через динамик. , напишите в файл вот оно:
AudioPlayerViewController.h:
AudioPlayerViewController.m:
Надеюсь, это поможет некоторым из вас, ребята.
источник
Я загрузил пример проекта. Вы можете посмотреть.
Диктофон
источник
Это действительно полезно. Единственной проблемой, с которой я столкнулся, был размер звукового файла, созданного после записи. Мне нужно было уменьшить размер файла, поэтому я сделал некоторые изменения в настройках.
Размер файла уменьшен с 360 КБ до всего 25 КБ (2 секунды записи).
источник
Я пытался заставить этот код работать в течение последних 2 часов, и хотя он не показывал ошибки на симуляторе, он был на устройстве.
Оказывается, по крайней мере, в моем случае ошибка произошла из используемой директории (bundle):
Это не было доступно для записи или что-то вроде этого ... Там не было никакой ошибки, за исключением того факта, что prepareToRecord не удалось ...
Поэтому я заменил его на:
Теперь это работает как шарм.
Надеюсь, что это помогает другим.
источник
Большое спасибо @Massimo Cafaro и Shaybc, я смог достичь ниже поставленных задач
в iOS 8:
1. Добавьте «AVFoundation.framework» в ваш проект
в .h файле
2.Добавьте ниже оператор импорта 'AVFoundation / AVFoundation.h'.
3. Определите "AVAudioRecorderDelegate"
4.Создайте макет с помощью кнопок «Запись», «Воспроизведение» и их метидов действия.
5. Определить рекордер и плеер и т. Д.
Вот полный пример кода, который может вам помочь.
Тогда делай работу в
источник
источник
По следующей ссылке вы можете найти полезную информацию о записи с AVAudioRecording. В этой ссылке в первой части «Использование аудио» есть якорь с именем «Запись с помощью класса AVAudioRecorder». это приводит вас к примеру.
АудиоВидео Концептуальная МультимедиаPG
источник
Итак, ответ, который я получил, помог мне в правильном направлении, и я очень благодарен. Это помогло мне понять, как на самом деле записывать на iPhone, но я подумал, что я также включил бы некоторый полезный код, который я получил из Справочной библиотеки iPhone:
AudioandVideoTechnologies
Я использовал этот код и довольно легко добавил его в пример avTouch. С помощью приведенного выше примера кода и примера из справочной библиотеки я смог заставить его работать довольно хорошо.
источник
для формата WAV ниже настройки звука
ссылка: http://objective-audio.jp/2010/09/avassetreaderavassetwriter.html
источник
let recordSettings:[String:AnyObject] = [ AVFormatIDKey:Int(kAudioFormatLinearPCM), AVLinearPCMIsFloatKey:false, AVLinearPCMIsBigEndianKey:0, AVLinearPCMIsNonInterleaved:false, AVSampleRateKey:44100.0, AVNumberOfChannelsKey:2, AVEncoderBitRateKey:12800, AVLinearPCMBitDepthKey:16, AVEncoderAudioQualityKey:AVAudioQuality.Max.rawValue]
НАЧАЛО
СТОП
источник
источник
Согласно приведенным выше ответам, я внес некоторые изменения и получил правильный вывод.
Шаг 1: В «inf.plist» добавьте разрешения на использование микрофона ==>
Шаг 2:
Сохранить запись аудиофайла в локальном каталоге документов
Воспроизвести / остановить запись
Вот исходный код. Пожалуйста, посмотрите сразу и используйте его.
ViewController.h
ViewController.m
источник
-[NSUserDefaults synchronize]
. Из документации Apple «этот метод не нужен и не должен использоваться».