3

アップルのドキュメントhttp://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/MultimediaPG/UsingAudio/UsingAudio.html#//apple_ref/doc/uid/TP40009767-CH2-SW6から AVaudioRecorder について読みました。

そして、音を録音する機能を見つけました。しかし、私のコードはクラッシュしています

[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;
4

2 に答える 2

3

ブレークポイントを使用したからです。私は同じ問題を抱えていました。私のコードはクラッシュしていませんでしたがprepareTorecord、ブレークポイントを設定していなくてもブレークポイントで停止していました。xcode のブレークポイントを無効にすると、シミュレーターでも実行されます。

于 2014-01-11T19:38:49.400 に答える
1

この回答から引用:

例外ブレークポイントを追加し、例外タイプを「すべて」から「Objective-C 例外」に編集します AudioToolbox の一部のクラスは、通常の C++ 例外をスローします。この方法でそれらをフィルタリングできます。

理由について:

「AVAudioPlayer はランダムな例外をスローすべきではありません」 - これは私たちの手にはありません。それがフレームワークの書き方であり、あなたはそれに耐えなければなりません。ただし、それが良い考えではないことに同意します

于 2014-07-15T21:53:59.267 に答える