diff --git a/frontend/src/helpers/framesToDuration.test.ts b/frontend/src/helpers/framesToDuration.test.ts new file mode 100644 index 0000000..ecfb2fd --- /dev/null +++ b/frontend/src/helpers/framesToDuration.test.ts @@ -0,0 +1,29 @@ +import framesToDuration from './framesToDuration'; + +describe('framesToDuration', () => { + it('returns the expected result for 0 frames at 44100hz', () => { + expect(framesToDuration(0, 44100)).toEqual({ seconds: 0, nanos: 0 }); + }); + + it('returns the expected result for 44100 frames at 44100hz', () => { + expect(framesToDuration(44100, 44100)).toEqual({ seconds: 1, nanos: 0 }); + }); + + it('returns the expected result for 88200 frames at 44100hz', () => { + expect(framesToDuration(88200, 44100)).toEqual({ seconds: 2, nanos: 0 }); + }); + + it('returns the expected result for 88201 frames at 44100hz', () => { + expect(framesToDuration(88201, 44100)).toEqual({ + seconds: 2, + nanos: 22675, + }); + }); + + it('returns the expected result for 110250 frames at 44100hz', () => { + expect(framesToDuration(110250, 44100)).toEqual({ + seconds: 2, + nanos: 500_000_000, + }); + }); +}); diff --git a/frontend/src/helpers/framesToDuration.ts b/frontend/src/helpers/framesToDuration.ts new file mode 100644 index 0000000..3c9d552 --- /dev/null +++ b/frontend/src/helpers/framesToDuration.ts @@ -0,0 +1,11 @@ +import { Duration } from '../generated/google/protobuf/duration'; + +function framesToDuration(frames: number, sampleRate: number): Duration { + const secs = Math.floor(frames / sampleRate); + const nanos = Math.floor( + ((frames % sampleRate) / sampleRate) * 1_000_000_000 + ); + return { seconds: secs, nanos: nanos }; +} + +export default framesToDuration;