在 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 位时,问题就出现了。我现在有一个假设需要确认:
- 假设整数的大小是 32 位,如果我想支持最多 32 位的样本大小,我必须使用 QAudioFormat::SignedInt 和 pcm 音频用于 24 位和 32 位音频(为 24 位音频填充 0)。
但是如果有更高的样本量(例如: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 int
或 uint64_t
用于无符号样本,或作为 double
用于浮动-点样本)。
(当然 none 这保证了您的 Qt 库的 QtMultimedia 实际上 支持 64 位示例;它可能会也可能不会,但至少 API 支持告诉 Qt 你想要什么 :) )
我正在用 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 位时,问题就出现了。我现在有一个假设需要确认:
- 假设整数的大小是 32 位,如果我想支持最多 32 位的样本大小,我必须使用 QAudioFormat::SignedInt 和 pcm 音频用于 24 位和 32 位音频(为 24 位音频填充 0)。
但是如果有更高的样本量(例如: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 int
或 uint64_t
用于无符号样本,或作为 double
用于浮动-点样本)。
(当然 none 这保证了您的 Qt 库的 QtMultimedia 实际上 支持 64 位示例;它可能会也可能不会,但至少 API 支持告诉 Qt 你想要什么 :) )