Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
opi
7 / 7 / 2
Регистрация: 09.11.2010
Сообщений: 69
#1

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

03.04.2013, 20:15. Просмотров 1230. Ответов 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.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2013, 20:15
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Хранение голосовых записей (Программирование iOS):

Хранение введенных данных
Подскажите, пожалуйста, как хранить данные, чтобы доступ к ним можно было...

Хранение данных в plist
привет. требуется хранить список факультетов, для каждого факультета хранить...

Насколько рационально хранение изображений в CoreData
Всем привет! Подскажите, насколько рационально хранить большие изображения...

Хранение данных в пользовательской папке Documents
Привет. Возник такой вопрос. Моё приложение скачивает ролики большого...

Хранение данных, написание и тестирование приложения
Доброго дня, форумчане! Извините за, возможно, глупый вопрос, но я в тупике. ...

Хранение изображений
Может кто-нибудь привести пример кода записи изображения на диск iPhone и...

4
Dan_banan_
11 / 11 / 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];

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

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

Хранение объектов в массиве
Добрый вечер! Стоит задача: создать матрицу с задаваемыми размерами строки и...

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

Хранение записей о факультете
Привет, есть очень долгая задача но помогите сделать только: начало задачи и...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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