сбой подготовки к записи

Я прочитал об AVaudioRecorder из документации Apple http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/MultimediaPG/UsingAudio/UsingAudio.html#//apple_ref/doc/uid/TP40009767-CH2-SW6

и я нашел функцию, которая записывает звук. но мой код падает

[soundRecorder prepareToRecord]; 

я так много гуглил для этого. Но я не нашел решения. Я также нашел некоторые другие исходные коды, но у них такая же проблема (сбой на prepareToRecord). может ли кто-нибудь помочь мне, пожалуйста...

заяц мой IBAction

- (IBAction) recordOrStop: (id) sender {

if (recording) {

    [soundRecorder stop];
    recording = NO;
    self.soundRecorder = nil;

    [recordOrStopButton setTitle: @"Record" forState:
     UIControlStateNormal];
    [recordOrStopButton setTitle: @"Record" forState:
     UIControlStateHighlighted];
    [[AVAudioSession sharedInstance] setActive: NO error: nil];

} else {

    [[AVAudioSession sharedInstance]
     setCategory: AVAudioSessionCategoryRecord
     error: nil];

    NSDictionary *recordSettings =
    [[NSDictionary alloc] initWithObjectsAndKeys:
     [NSNumber numberWithFloat: 44100.0], AVSampleRateKey,
     [NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey,
     [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
     [NSNumber numberWithInt: AVAudioQualityMax],
     AVEncoderAudioQualityKey,
     nil];
    AVAudioRecorder *newRecorder =
    [[AVAudioRecorder alloc] initWithURL: soundFileURL
                                settings: recordSettings
                                   error: nil];



    self.soundRecorder = newRecorder;

    soundRecorder.delegate = self;
    [soundRecorder prepareToRecord];
    [soundRecorder record];
    [recordOrStopButton setTitle: @"Stop" forState: UIControlStateNormal];
    [recordOrStopButton setTitle: @"Stop" forState: UIControlStateHighlighted];

    recording = YES;
}

}

Мой файл .h

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#import <CoreAudio/CoreAudioTypes.h>
#import "MBProgressHUD.h"

@interface LyricsController : UIViewController<AVAudioSessionDelegate,AVAudioRecorderDelegate, MBProgressHUDDelegate>{

IBOutlet UITextView *LyricsView;
MBProgressHUD *HUD;
AVAudioRecorder * soundRecorder;
NSURL *soundFileURL;  

BOOL recording;
BOOL playing;

__weak IBOutlet UIButton *recordOrStopButton;
}@property(strong,nonatomic)NSURL *soundFileURL;
@property(nonatomic,strong)AVAudioRecorder * soundRecorder;

person Community    schedule 23.05.2012    source источник
comment
Мой PrepareToRecord иногда работает, а иногда нет. почему это происходит   -  person    schedule 23.05.2012
comment
[запись SoundRecorder] находится только через одну строку после [soundRecorder prepareToRecord]. Возможно буфер не готов. Сделайте новую кнопку с надписью «Готово к записи», прикрепленную к новой записи IBAction. Туда поместите [запись звукозаписи]   -  person Teofilo Israel Vizcaino Rodrig    schedule 23.05.2012
comment
но выполнение кода было выполнено компилятором только на [soundRecorder prepareToRecord]. Компилятор даже не начинает компилировать [запись SoundRecorder]. Я поставил Sleep (2) между операторами [soundRecorder prepareToRecord] и [soundRecorder record], чтобы увеличить время готовности буфера, но снова происходит тот же сбой.   -  person    schedule 25.05.2012
comment
Привет, ребята, мое приложение не падает на устройстве, оно падает только на симуляторе. Затем я перезагрузил симулятор и очистил Xcode (продукты->Clean). затем он снова отлично работает на симуляторе. надеюсь больше не рухнет.   -  person    schedule 25.05.2012


Ответы (2)


Это просто потому, что вы использовали точки останова. У меня была та же проблема, мой код не давал сбоев, но он останавливался на prepareTorecord в качестве точки останова, так как даже я не ставил на него точки останова. Если вы отключите точки останова для xcode, он также будет работать на симуляторе.

person Ankush    schedule 11.01.2014
comment
Да отлично работает, если вы отключите точку останова. Похоже, это какой-то баг симулятора. - person bpolat; 19.07.2014

Цитата из этого ответа:

Добавьте точку останова исключения и измените тип исключения с «Все» на «Исключения Objective-C». Некоторые классы в AudioToolbox вызывают обычные исключения C++. Вы можете отфильтровать их таким образом.

Что касается того, почему:

«AVAudioPlayer не должен генерировать случайные исключения» — это не в наших руках. Так написан фреймворк, и вы должны с этим жить. Хотя соглашусь, что это не лучшая идея

person Michael J Petrie    schedule 15.07.2014