2012-03-14 25 views
11

Tôi hiện đang phát triển một ứng dụng hỗ trợ ghi âm trong ứng dụng. Người dùng có thể nhận được một bảng nhìn tiêu chuẩn về các tệp âm thanh được lưu cục bộ mà anh/cô ấy đã ghi lại thông qua ứng dụng hoặc nhấn nút để đến chế độ xem bản ghi mới, từ đó có thể ghi lại một phiên âm thanh mới. được lưu vào hộp cát ứng dụng. Bây giờ chức năng này hoạt động tốt hầu hết thời gian. Tôi có thể ghi tập tin mới và chơi chúng ra khỏi ứng dụng, nhưng tại thời điểm ngẫu nhiên ghi âm thanh sẽ thất bại để bắt đầu ghi âm trong phương pháp này:Phương thức ghi AVAudioRecorder trả về NO vào các thời điểm ngẫu nhiên

-(void) startRecording 
{ 
if (!isRecording) 
{ 
    isRecording = YES; 

    BOOL recordingSucess = [audioRecorder record]; 

    if (recordingSucess) 
     NSLog(@"WE STARTED THE RECORDING!"); 
    else 
     NSLog(@"WE DID NOT START THE RECORDING!"); 

    // Start the timer 
    recordTiming = [NSDate date]; 

    timeCheck = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(timeCheck) userInfo:nil repeats:YES] 
} 

Đó là, NSLog sẽ in ra “Chúng tôi không bắt đầu ghi âm ”, chỉ ra rằng nó không thể bắt đầu ghi âm. Điều này dẫn đến một tệp âm thanh trống vẫn được lưu vào ứng dụng với kích thước tệp không đổi chính xác là 4096 byte. Đây là cách các đối tượng ghi âm thanh được khởi tạo:

-(id) initWithContentURL:(NSURL *)contentURL 
{ 
self = [super init]; 

if (self) 
{ 
    NSLog(@"Initializing audio recorder!"); 

    // Specific settings for the audio recording 
    NSDictionary *recordSettings = [NSDictionary 
            dictionaryWithObjectsAndKeys: 
            [NSNumber numberWithInt:AVAudioQualityMin], 
            AVEncoderAudioQualityKey, 
            [NSNumber numberWithInt:8], 
            AVEncoderBitRateKey, 
            [NSNumber numberWithInt: 2], 
            AVNumberOfChannelsKey, 
            [NSNumber numberWithFloat:22000.0], 
            AVSampleRateKey, 
            nil]; 

    NSError *error = nil; 

    audioRecorder = [[AVAudioRecorder alloc] initWithURL:contentURL settings:recordSettings error:&error]; 
    audioRecorder.delegate = self; 
} 

Ngoài ra còn có kiểm tra NSLog đó kiểm tra để xem nếu lỗi là con số không hay không, vì vậy vào thời điểm này tôi chắc chắn rằng việc khởi tạo dường như không Thất bại. Chính xác những gì có thể khiến phương pháp ghi lại thất bại vào thời điểm dường như ngẫu nhiên, trong khi nó hoạt động hoàn toàn tốt ở hầu hết các thời điểm khác?

Trả lời

23

Trước khi ghi âm được bắt đầu một phiên âm thanh nên được khởi tạo:

AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
NSError *err = nil; 
[audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err]; 
if(err){ 
    NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]); 
    return; 
} 
err = nil; 
[audioSession setActive:YES error:&err]; 
if(err){ 
    NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]); 
    return; 
} 

Xem chấp nhận answer để tham khảo.

+0

Tôi sẽ thử cách này và quay lại. Chỉ cần kiểm tra nó đủ lâu để đảm bảo lỗi biến mất – Luffen

+0

Điều này đã hiệu quả, cảm ơn bạn! :) – Luffen

+0

@Luffen Rất vui khi được. Đối với 4096, tôi cho rằng đó là một phần tiêu đề của một tập tin phương tiện truyền thông đã được ghi vào đĩa như một sự chuẩn bị, nhưng việc ghi không thành công và phần dữ liệu của tập tin không được lấp đầy. –

0

Nội dung URL luôn giống nhau hoặc bạn tạo một URL mới mỗi lần?

Bạn cũng có thể thử gọi rõ ràng PrepareToRecord trước khi ghi và kiểm tra xem nó có thành công hay không?