Форум программистов, компьютерный форум CyberForum.ru

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
opi
7 / 7 / 1
Регистрация: 09.11.2010
Сообщений: 69
#1

Хранение голосовых записей - Программирование iOS

03.04.2013, 20:15. Просмотров 1101. Ответов 4
Метки нет (Все метки)

Доброго времени суток.

Появилась необходимость записывать аудио-файлы и в последствии потом их воспроизвести. По сути должно получится что то вроде обычного приложения Диктофон от Апле. По многим примерам из сети пользуюсь фреймверком AVAudioFoundation. К сожалению литературы и более менее нормальных источников я не нашел (по-крайней мере понятных для меня). Использую нижеследующий код:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    
    [stopButton setEnabled:NO];
    [playButton setEnabled:NO];
    
    
    NSArray *pathComponents = [NSArray arrayWithObjects:
                               [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject],
                               @"MyAudioMemo.m4a",
                               nil];
    NSURL *outputFileURL = [NSURL fileURLWithPathComponents:pathComponents];
    
    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
 
    NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init];
    
    [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
    [recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
    [recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];
    
    
    recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:NULL];
    recorder.delegate = self;
    recorder.meteringEnabled = YES;
    [recorder prepareToRecord];
}
Я примерно понимаю что в этом коде происходит, но не совсем. Запутываюсь со всем этим количеством словарей, массивов и понять что из них что. В связи с небольшим количеством моего опыта, прошу более менее подробно "на пальцах" объяснить что к чему и как в последствии это все дело сохранить. Также прошу не кидайте ссылки литературу от Апле, потому что после MSDN как то не получается привыкнуть и нормально все оттуда понять
Кстати о хранении, порыскав по интернету узнал, что не стоит хранить файлы в Core Data, поэтому думаю что другим выходом будет хранение в .plist.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2013, 20:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Хранение голосовых записей (Программирование iOS):

Хранение введенных данных - Программирование iOS
Подскажите, пожалуйста, как хранить данные, чтобы доступ к ним можно было получить из любого класса приложения? Например, в приложении...

Хранение данных в plist - Программирование iOS
привет. требуется хранить список факультетов, для каждого факультета хранить список специализаций, для каждой специализации хранить...

Насколько рационально хранение изображений в CoreData - Программирование iOS
Всем привет! Подскажите, насколько рационально хранить большие изображения напрямую в одном из аттрибутов Entity? С одной стороны...

Хранение данных в пользовательской папке Documents - Программирование iOS
Привет. Возник такой вопрос. Моё приложение скачивает ролики большого обьема(400 - 700 мб) я храню их в Documents. Вопрос -...

Хранение изображений - Objective-C
Может кто-нибудь привести пример кода записи изображения на диск iPhone и загрузки с него, пожалуйста :P

Хранение объектов в массиве - Objective-C
Добрый вечер! Стоит задача: создать матрицу с задаваемыми размерами строки и столбца и провести над ней операцию. При выполнении задания...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dan_banan_
10 / 10 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
03.04.2013, 23:04 #2
Ну а что тут не понятного.
NSArray *pathComponents = [NSArray arrayWithObjects:
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject],
@"MyAudioMemo.m4a",
nil];
Указывает директорию для хранения записываемы файлов. Согласно ограничениям песочницы файлы можно хранить только в папке документы. Передаешь этот массив в строку и получаешь путь
NSURL *outputFileURL = [NSURL fileURLWithPathComponentsathComponents];

Экземпляр AVAudioSession класс, называемый аудио сессии, является одноэлементный объект, который вы используете для установки аудио контекста для вашего приложения. Этот класс используется для:
Включение или отключение звука сессии вашего приложения
Установить аудио категории сессии и режим
Укажите нужный аудио дискретизации аппаратных средств и буфер ввода / вывода длительности

Этот класс обеспечивает Objective-C альтернатива многие функции из C-Audio на основе сеансов служб, описанных в Audio Reference сессия услуги . Некоторые возможности воспроизведения аудио сессии, такие как обработка аудио изменениях маршрутов и настройки звука входного усиления, могут быть доступны только с использованием аудио сеансов служб.

Начиная с IOS 5.0, можно уточнить конфигурацию устройства аудио предоставляемые определенным категориям аудио сеанс с помощью аудио режиме сессии. См. "режимы аудио сессии".

Кроме того, начиная с IOS 5.0, аудио информацию маршрут словаре основе, предоставляя доступ к конкретной информации о входных и маршрутов вывода звука на звук изменения маршрута, и на аудио маршруты доступны в прилагаемый USB-аудио аксессуары. и kAudioSessionProperty_OutputDestinations .

Вот тебе создается твоя аудиосессия для работы со звуком
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];

В этом словаре ты указываешь какие тебе нужные параметры для твоей записи тут частота, количество каналов
NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init];

[recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
[recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
[recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey

Подобные вещи частенько используются в Objective C , привыкай))


Здесь создаешь обьек для записи передаешь ему путь куда сохранять , передаешь словарик, назнаешь делаг которые наверняка вызовется по окончанию записи
recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:NULL];
recorder.delegate = self;
recorder.meteringEnabled = YES;
[recorder prepareToRecord];

и вуаля, магия)))
opi
7 / 7 / 1
Регистрация: 09.11.2010
Сообщений: 69
03.04.2013, 23:35  [ТС] #3
Спасибо за разъяснение

Хорошо, тогда что именно мне сохранять в плист? PathComponents или recordSettings? Тогда код как должен выглядеть, с учетом того, что еще добавляю имя и дату создания? Это же и все параметры нужно вносить в плист? Вот тут возникает следующий вопрос: какая должна быть структура этого плиста. И как это все потом правильно вытащить? По-идее и все эти параметры нужно добавлять (битрейт, формат)? Как то разобраться с Core Data было проще))
Dan_banan_
10 / 10 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
03.04.2013, 23:47 #4
я предлагаю поставить брейкпойтны и логи и тщательно посмотреть что получается на выходе и я думаю все встанет на свои что сохранять и куда))
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
04.04.2013, 21:42 #5
Dan_banan_, Предлагаю Вам начать уже пользоваться разметкой форума, для выделения
Objective-C
1
кода
Спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2013, 21:42
Привет! Вот еще темы с ответами:

Хранение WEAK объектов в массиве - Objective-C
Иногда возникает ситуация хранить в массиве просто указатели на объекты, таким образом, чтобы счетчик их ссылок при таком хранении не...

Двухмерные массивы. Создание,изменение,хранение - Objective-C
Доброго времени суток! Сразу извиняюсь если задам глупые вопросы. Пытаюсь разобраться с ООП. Передо мной стоит следующая задача ...

Хранение записей по ключу - C# WPF
Всем привет! Делаю такую шляпу: Есть кнопка, тыкая на которую открывается форма на которой выполняются такие действия: ...

Хранение записей о факультете - Turbo Pascal
Привет, есть очень долгая задача но помогите сделать только: начало задачи и конец. И всё, пожалуйста очень надо (извините что задача на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.04.2013, 21:42
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru