2016-10-29 7 views
1

내가하려는 것은 제목이 말하고있는 것이지만, 그렇게 할 수는 없습니다.스위프트 3 : AVAudioPCMBuffer의 길이를 TimeInterval로 가져 옵니까?

func getLength(buffer: AVAudioPCMBuffer) -> TimeInterval { 
    let framecount = buffer.frameCapacity 
    let bytesperframe = buffer.format.streamDescription.pointee.mBytesPerFrame 
    return TimeInterval(bytesperframe * framecount) 
} 

을하지만이 난 후 어떻게 될 것 같지 않습니다 거대한 수를 제공합니다 : 나는 다음과 같은 일을 시도했다. 이미 답변을 찾으려고했지만 아무도이 질문을하지 않는 것 같습니다. 그래서 나는 분명히 뭔가 빠져있을 것입니다. 누구 알아?

편집 : 나는이 내 코드를 변경 : 작동하는 것 같다,하지만 조금 복잡한 것 같다

func getLength(buffer: AVAudioPCMBuffer) -> TimeInterval { 
    let framecount = Float64(buffer.frameCapacity) 
    let samplerate = buffer.format.streamDescription.pointee.mSampleRate 
    return TimeInterval(framecount/samplerate) 
} 

. 다른 방법이 있습니까?

답변

1

아이디어를 주셔서 감사합니다 리듬 넘버원! 이제 코드를 다음으로 변경했습니다.

func getLength(buffer: AVAudioPCMBuffer) -> TimeInterval { 
    let framecount = Double(buffer.frameLength) 
    let samplerate = buffer.format.sampleRate 
    return TimeInterval(framecount/samplerate) 
} 

이제 훨씬 간단 해 보이며 작동합니다. 바라건대 나는 모든 것을 올바르게하고있다.

1

frameCapacity 대신 frameLength을 사용해야합니다.