#xcode #ios4 #core-audio #avaudiorecorder
#xcode #ios4 #ядро-аудио #avaudiorecorder
Вопрос:
Я искал поисковые запросы по строкам заголовка поста, но увы..
Я создаю приложение для iPhone, используя AVFoundation.
Существует ли правильная процедура для ограничения объема записываемого звука? Я бы хотел максимум 10 секунд.
Спасибо за любую помощь / совет / подсказок / указателей..
Ответ №1:
AVAudioRecorder использует следующий метод:
- (BOOL)recordForDuration:(NSTimeInterval)duration
Я думаю, это поможет!
Комментарии:
1. Что ж, ответ на этот вопрос был получен и принят более 4 лет назад. Думаю, тогда это сработало. Я не знаю, так ли это сейчас. почему?
2. когда я вызываю метод, он не запускает метод делегирования audioRecorderDidFinishRecording: успешно.. я вызываю это [настройка записи рекордера: 10.0f], но ничего не происходит. Я ожидал закончить запись..
Ответ №2:
Обычно я не работаю с, AVFoundation
поэтому я не знаю точных названий методов / классов (я ввел свои собственные), но обходным путем для этого было бы повторяющееся NSTimer
начало при первоначальном запуске записи. Что-то вроде этого:
@interface blahblah
...
int rec_time;
NSTimer *timer;
Recorder *recorder;
...
@end
@implementation blahblah
...
-(void)beginRecording {
[recorder startRecording];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(recordingTime)
userInfo:nil
repeats:YES];
}
-(int)recordingTime {
if (rec_time >= 10) {
[recorder endRecording];
[timer invalidate];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"You recorded for too long!"...;
return;
}
rec_time = rec_time 1;
}
...
@end
Комментарии:
1. Спасибо вам за это. Я подожду и увижу другие ответы, но я действительно ценю ваше время и усилия.
2. кстати, почему вы не работаете с AVFoundation? Есть ли способ получше? Еще раз спасибо..
Ответ №3:
Это пример из кулинарной книги по программированию для iOS, я нашел его очень полезным и прямым. После начала записи вы вызываете функцию остановки с задержкой в 10 секунд, когда она останавливает запись, она автоматически вызывает метод делегирования audioRecorderDidFinishRecording:successfully
.
@implementation ViewController{
AVAudioRecorder *recorder;
AVAudioPlayer *player;
}
- (IBAction)recordPauseTapped:(id)sender {
// Stop the audio player before recording
if (player.playing) {
[player stop];
}
if (!recorder.recording) {
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setActive:YES error:nil];
// Start recording
[recorder record];
[recordPauseButton setBackgroundImage:recordingImage forState:UIControlStateNormal];
[self performSelector:@selector(stopRecording)
withObject:self afterDelay:10.0f];
} else {
[recorder stop];
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setActive:NO error:nil];
}
}
- (void)stopRecording {
[recorder stop];
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setActive:NO error:nil];
}
- (void) audioRecorderDidFinishRecording:(AVAudioRecorder *)avrecorder successfully:(BOOL)flag{
NSLog(@"after 10 sec");
}