2012-12-14 2 views
6

AVAudioRecorder을 사용하여 오디오를 녹음하고 있으며, 이제는 녹음 된 오디오의 정확한 시간을 가져오고 싶습니다. 어떻게받을 수 있습니까?녹음 된 오디오의 시간을 iPhone에서 어떻게 얻을 수 있습니까?

난이 시도 :

AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:avAudioRecorder.url options:nil]; 
CMTime time = asset.duration; 
double durationInSeconds = CMTimeGetSeconds(time); 

그러나 무엇을 내 time 변수 반환 NULL 및 durationInSeconds 반환 '유모가', 즉 유모에 의해 의미합니다.

UPDATE

user1903074 대답은 내 문제를 해결하지만, 단지 호기심을 위해, AVAudioplayer없이 그것을 할 thair 어떤 방법입니다했다.

+1

nan은 숫자가 아님을 의미합니다. 자산 NULL 이니? – geraldWilliam

+0

그 고맙습니다. –

답변

13

당신이 audioPlayer.duration를 얻고 시간을 얻을 수있는 것보다 당신이 AVAudioRecorderAVAudioPlayer를 사용하는 경우.

이와같이.

NSError *playerError; 

audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:yoururl error:&playerError]; 

NSlog(@"%@",audioPlayer.duration); 

하지만 AVAudioRecorderAVAudioPlayer을 사용하는 경우에만.

UPDATE

또는 당신은 다음과 같이 할 수 있습니다.

//put this where you start recording 
    myTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateTime) userInfo:nil repeats:YES]; 

// a method for update 
- (void)updateTime { 
    if([recorder isRecording]) 
    { 

     float minutes = floor(recorder.currentTime/60); 
     float seconds = recorder.currentTime - (minutes * 60); 

     NSString *time = [[NSString alloc] 
            initWithFormat:@"%0.0f.%0.0f", 
            minutes, seconds]; 
    } 
} 

스틸 일부 마이크로 값 그들의입니다 렸기 때문에 일부 지연을 얻을 수 있고, 내가 모든 이잖아 나누었다을 클립하는 방법을 잘 모릅니다.

+0

예, AVAudioRecorder에서 AVAudioPlayer를 사용하고 있습니다. –

+0

this work great –

+2

@ lipid :하지만 녹음 된 사운드의 지속 시간은 AVAudioPlayer를 사용하여 재생 한 사운드와 항상 같지는 않을 것이라고 생각합니다. (내가 틀렸다면 정정 해주세요!) – iShwar

1

제 해결책은 시작 날짜를 추적하고 마지막에 경과 된 시간을 계산하는 것입니다. 사용자가 레코더를 시작하고 중지하기 때문에 저에게 효과적이었습니다.

NSDate* startTime; 
NSTimeInterval duration; 

-(void) startRecording 
{ 
    //start the recorder 
    ... 
    duration = 0; 
    startTime = [NSDate date]; 

} 

-(void) stopRecording 
{ 
    //stop the recorder 
    ... 
    duration = [[NSDate date] timeIntervalSinceDate:startRecording]; 
} 
0

내가 원래의 질문이 목표 - C에서 답을 찾고 있었다 알고 레코더 클래스에서

하지만, 스위프트에 그렇게하고자하는 사람들을 위해,이 스위프트 4.0에서 작동합니다

let recorder = // Your instance of an AVAudioRecorder 
let player = try? AVAudioPlayer(contentsOf: recorder.url) 
let duration = player?.duration ?? 0.0 

유효한 레코더가 있다고 가정하면 지속 시간 값을 얻게됩니다.이 값은 TimeInterval으로 주어집니다.

관련 문제