繁体   English   中英

在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,如下表所示:

| 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位时,就会出现问题。 我现在有一个假设需要确认:

  • 假设int的大小为32bit,如果我要支持最大32bit的样本大小,则必须使用带有pcm音频的QAudioFormat :: SignedInt来处理24和32位音频(为24位音频填充0)。

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

我愿意接受任何启发😙!

QAudioFormat::setSampleSize()的文档中:

无效的QAudioFormat :: setSampleSize(int sampleSize)

将样本大小设置为指定的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您想要什么:))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM