2016-12-31 2 views
0

Я стараюсь записывать голос с AVAudioRecorder и после записи у меня есть пустой файл с 0 байт и при попытке воспроизвести его, у меня есть это предупреждениеПустой файл после записи голоса с AVAudioRecorder

2016-12-31 15:28:59.511 FlowerProject[11209:4781594] 15:28:59.511 
WARNING: [0x38cb1000] 998: Failure to setup sound, err = -50 

Я пытаюсь использовать любые форматы, такие как m4a, а также размер 0 байтов. Спасибо за любую помощь.

EDIT:

В то же время я стараюсь записывать аудио и обновить пользовательский интерфейс с анимацией

- (void)commanClickOnPetal:(FlowerObject *)flowerObject andButton:(UIButton *)sender { 

    if ([[NSUserDefaults standardUserDefaults] boolForKey:flowerObject.imageName] == NO || ![[NSUserDefaults standardUserDefaults] boolForKey:flowerObject.imageName]) { 

     [self.flowerObject changeRecordedState:YES andKey:flowerObject.imageName]; 

     self.view.userInteractionEnabled = NO; 
     [self playFirstSound]; 

     [self initRecorderWithName:[NSString stringWithFormat:@"%@sound", flowerObject.imageName]]; 

     dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 10 * NSEC_PER_SEC); 
     dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 

      [self startRecording]; 
      [self.recordIdentifierLabel setHidden:NO]; 


      [UIView animateWithDuration:1.f 
           delay:0.f 
          options: UIViewAnimationOptionRepeat | UIViewAnimationCurveLinear | UIViewAnimationOptionAutoreverse 
         animations:^{ 
          [self.recordIdentifierLabel setAlpha:0.0f]; 
         } completion:nil]; 


      [UIView transitionWithView:sender duration:29.0f options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowAnimatedContent animations:^{ 

       [sender setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@BW",flowerObject.imageName]] forState:UIControlStateNormal]; 


      } completion:^(BOOL finished) { 

       self.view.userInteractionEnabled = YES; 
       [self.recordIdentifierLabel setHidden:YES]; 

      }]; 

     }); 

    } else { 

     [self playSoundFromPetal:[NSString stringWithFormat:@"%@sound", flowerObject.imageName]]; 

    } 
} 

А вот мой метод с самописца INIT:

- (void)initRecorderWithName:(NSString *)name { 

    self.recordName = [NSString stringWithFormat:@"%@.wav",name]; 

    NSArray *pathComponents = [NSArray arrayWithObjects: 
           [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject], 
           self.recordName, nil]; 

    NSURL *outputFileURL = [NSURL fileURLWithPathComponents:pathComponents]; 

    self.currentSession = [AVAudioSession sharedInstance]; 
    [self.currentSession setCategory:AVAudioSessionCategoryRecord error:nil]; 

    NSMutableDictionary *recordingSettings= [[NSMutableDictionary alloc] init]; 

    [recordingSettings setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey]; 
    [recordingSettings setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; 
    [recordingSettings setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey]; 
    [recordingSettings setValue:[NSNumber numberWithInt: 16] forKey:AVLinearPCMBitDepthKey]; 
    [recordingSettings setValue:[NSNumber numberWithBool: NO] forKey:AVLinearPCMIsBigEndianKey]; 
    [recordingSettings setValue:[NSNumber numberWithBool: NO] forKey:AVLinearPCMIsFloatKey]; 
    [recordingSettings setValue:[NSNumber numberWithInt: AVAudioQualityHigh] forKey:AVEncoderAudioQualityKey]; 

    recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordingSettings error:NULL]; 
    recorder.delegate = self; 
    recorder.meteringEnabled = YES; 
    [recorder prepareToRecord]; 

} 

После записи я отправляю звук по электронной почте с помощью MailCore, но файл равен 0 байт. Запись по-прежнему 30 второй и после того, как вызвать метод [само stopRecording]

- (void) startRecording { 

    if (!recorder.recording) { 
     AVAudioSession *session = self.currentSession; 
     [session setActive:YES error:nil]; 
     [recorder record]; 
     self.timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats: YES]; 
    } else { 
     [recorder stop]; 
    } 

} 

- (void) stopRecording { 

    [recorder stop]; 
    AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
    [audioSession setActive:NO error:nil]; 
    self.dictionaryWithRecords = (NSMutableDictionary *) @{@"URL": recorder.url, 
                  @"Name": self.recordName}; 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

     if ([[DBEmailSender sharedManager] emailAddress] != nil) { 

      [[DBEmailSender sharedManager] sendMailWithAddress:[[NSUserDefaults standardUserDefaults] objectForKey:@"email"] andCode:nil andFilePath:[self.dictionaryWithRecords objectForKey:@"Name"]]; 

     } 
    }); 
} 

- (void)updateCountdown { 

    self.tick += 1; 
    double seconds = fmod(self.tick, 60.0); 

    if (seconds == 29) { 
     self.tick = 0; 
     seconds = 0; 
     [self.timer invalidate]; 
     self.timer = nil; 
     [self stopRecording]; 
    } 

} 

И здесь я играть мой звук нажатием кнопки:

- (void)playSoundFromPetal:(NSString *)soundName { 

    SystemSoundID mySSID; 
    NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent:soundName]; 
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath: path], &mySSID); 
    AudioServicesPlaySystemSound(mySSID); 

} 

ответ

0

Там может быть много причин для этого , но в моей case, был еще один объект, уже использующий AVAudioSession для воспроизведения звука.

+0

Так как же вы захватили аудио-сессию от этого объекта? – hyd00

+0

@ hyd00 ну, я на самом деле понял, что сеанс для другого объекта не нужен, поэтому я просто удалил его. Но вы также можете попробовать: пусть sharedSession = AVAudioSession.sharedInstance() сделать { попробовать sharedSession.setCategory (AVAudioSessionCategoryRecord) попробовать sharedSession.setActive (истинный) } поймать {} – Goh

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