AudioDurationTracker.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*
  2. * Copyright (c) Meta Platforms, Inc. and affiliates.
  3. * All rights reserved.
  4. *
  5. * This source code is licensed under the license found in the
  6. * LICENSE file in the root directory of this source tree.
  7. */
  8. using System;
  9. using Meta.WitAi.Data;
  10. namespace Meta.WitAi
  11. {
  12. public class AudioDurationTracker
  13. {
  14. private readonly String _requestId;
  15. private double _bytesCaptured = 0.0;
  16. private readonly int _bytesPerSample;
  17. private readonly AudioEncoding _audioEncoding;
  18. private long _finalizeTimeStamp;
  19. private double _audioDurationMs;
  20. public AudioDurationTracker(string requestId, AudioEncoding audioEncoding)
  21. {
  22. _requestId = requestId;
  23. _audioEncoding = audioEncoding;
  24. _bytesPerSample = _audioEncoding.bits / 8;
  25. }
  26. public void AddBytes(long bytes)
  27. {
  28. _bytesCaptured += bytes;
  29. }
  30. public void FinalizeAudio()
  31. {
  32. _finalizeTimeStamp = (DateTime.UtcNow.Ticks / TimeSpan.TicksPerMillisecond);
  33. _audioDurationMs =
  34. (_bytesCaptured / (_audioEncoding.samplerate * _audioEncoding.numChannels * _bytesPerSample)) * 1000.0;
  35. }
  36. public long GetFinalizeTimeStamp()
  37. {
  38. return _finalizeTimeStamp;
  39. }
  40. public double GetAudioDuration()
  41. {
  42. return _audioDurationMs;
  43. }
  44. public string GetRequestId()
  45. {
  46. return _requestId;
  47. }
  48. }
  49. }