SampleFormats.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * Copyright (c) 2022, kleines Filmröllchen <filmroellchen@serenityos.org>.
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "SampleFormats.h"
  7. namespace Audio {
  8. u16 pcm_bits_per_sample(PcmSampleFormat format)
  9. {
  10. switch (format) {
  11. case PcmSampleFormat::Uint8:
  12. return 8;
  13. case PcmSampleFormat::Int16:
  14. return 16;
  15. case PcmSampleFormat::Int24:
  16. return 24;
  17. case PcmSampleFormat::Int32:
  18. case PcmSampleFormat::Float32:
  19. return 32;
  20. case PcmSampleFormat::Float64:
  21. return 64;
  22. default:
  23. VERIFY_NOT_REACHED();
  24. }
  25. }
  26. bool is_integer_format(PcmSampleFormat format)
  27. {
  28. return format == PcmSampleFormat::Uint8 || format == PcmSampleFormat::Int16 || format == PcmSampleFormat::Int24 || format == PcmSampleFormat::Int32;
  29. }
  30. Optional<PcmSampleFormat> integer_sample_format_for(u16 bits_per_sample)
  31. {
  32. switch (bits_per_sample) {
  33. case 8:
  34. return PcmSampleFormat::Uint8;
  35. case 16:
  36. return PcmSampleFormat::Int16;
  37. case 24:
  38. return PcmSampleFormat::Int24;
  39. case 32:
  40. return PcmSampleFormat::Int32;
  41. default:
  42. return {};
  43. }
  44. }
  45. ByteString sample_format_name(PcmSampleFormat format)
  46. {
  47. bool is_float = format == PcmSampleFormat::Float32 || format == PcmSampleFormat::Float64;
  48. return ByteString::formatted("PCM {}bit {}", pcm_bits_per_sample(format), is_float ? "Float" : "LE");
  49. }
  50. }