在 QtMultimedia 的 QAudioFormat 中为 24、32 和 64 位音频选择哪种样本类型(不是大小)?

Which sample type (not size) to choose in QtMultimedia's QAudioFormat for 24, 32 and 64 bit audio?

我正在用 Qt 写一个媒体播放器,但我现在面临一些未知的情况。实际上,我正在尝试使用 QAudioOutput 和 QAudioDecoder 来播放高分辨率音乐(24、32 甚至 64 位音频)。但是 QAudioFormat(所有音频 类 之间的粘合剂)指定一个 sampleType 如下 table:

| Constant                  | Value | Description                    |
|---------------------------|-------|--------------------------------|
| QAudioFormat::Unknown     | 0     | Not Set                        |
| QAudioFormat::SignedInt   | 1     | Samples are signed integers    |
| QAudioFormat::UnSignedInt | 2     | Samples are unsigned intergers |
| QAudioFormat::Float       | 3     | Samples are floats             |

现在,当我将样本大小也设置为大于 16 位时,问题就出现了。我现在有一个假设需要确认:

但是如果有更高的样本量(例如:dsd 的 64 位音频转换为 pcm)怎么办?我是否应该假设我仍然将样本类型设置为 QAudioFormat::SignedInt 但 64 位的每个 "sample" 都存储在两个整数中?还是 QtMultimedia 根本不支持它?

我愿意接受任何启示!

来自 QAudioFormat::setSampleSize() 的文档:

void QAudioFormat::setSampleSize(int sampleSize)

Sets the sample size to the sampleSize specified, in bits.

This is typically 8 or 16, but some systems may support higher sample sizes.

因此,要使用 64 位示例,您需要调用 setSampleSize(64)。这可以与对 setSampleType() 的调用结合调用,以指定样本是定点有符号还是定点无符号还是浮点——请注意 setSampleType() 中的值做不暗示任何特定的样本量。

对于64位音频,每个样本将存储为64位数据;您可以将每个样本作为 long long int 访问,或者作为 int64_t (或 unsigned long long intuint64_t 用于无符号样本,或作为 double 用于浮动-点样本)。

(当然 none 这保证了您的 Qt 库的 QtMultimedia 实际上 支持 64 位示例;它可能会也可能不会,但至少 API 支持告诉 Qt 你想要什么 :) )