2016-10-29 4 views
1

私がしようとしているのは、タイトルが言うことですが、私はそれをするように見えません。私は次のことを試みました:Swift 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

Rhythmic Fistman!これでコードをこれに変更しました:

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

これはもっと簡単になりました。うまくいけば、私はすべてのことを正しくやっている。

1

frameCapacityの代わりにframeLengthを使用する必要があります。

関連する問題