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



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

| 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 位音频(填充 0 表示 24 位音频(。

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

我对任何启蒙😙都持开放态度!

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

void QAudioFormat::setSampleSize(int sampleSize(

将样本大小设置为指定的样本大小(以位为单位(。

这通常是 8 或 16,但某些系统可能支持更高的样本 大小。

因此,若要使用 64 位示例,需要调用setSampleSize(64)。 这可以与调用setSampleType()结合使用,以指定样本是定点有符号还是定点无符号还是浮点 - 请注意,setSampleType()中的值并不意味着任何特定的样本大小。

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

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

相关内容

最新更新