2012-05-23 3 views
3

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

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

[soundRecorder prepareToRecord]; 

i googled для этого так много. Но я не нашел решения. Я также нашел некоторые другие исходные коды. Но у них также есть одна и та же проблема (сбой на 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; 
+0

My PrepareToRecord когда-нибудь работает, а когда-то нет. почему это случается –

+0

[звукRecorder запись] - только одна линия после [звукRecorder подготовкаToRecord]. Возможно, буфер не готов. Сделайте новую кнопку с надписью «Готов к записи», прикрепленную к новой записи IBAction «Запись». Там помещается запись [soundRecorder] –

+0

, но выполнение кода было выполнено только на [soundRecorder prepareToRecord] компилятором. Компилятор даже не запускает компиляцию [recordRecorder record]. Я поставил Sleep (2) между операторами [soundRecorder prepareToRecord] и [soundRecorder record], чтобы увеличить время буферизации, чтобы быть готовым, но снова такое же происшествие. –

ответ

3

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

+0

Да работает отлично после отключения точки останова. Похоже, это своего рода ошибка симулятора. – bpolat

1

Цитируется this answer:

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

А почему:

"AVAudioPlayer не должны бросать случайные исключения" - это не в наших руках. Именно так написана структура, и вам нужно жить с ней. Хотя, я согласен, что это не очень хорошая идея.

Смежные вопросы