[英]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位时,就会出现问题。 我现在有一个假设需要确认:
但是,如果样本量更大 (例如:将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 int
或uint64_t
进行访问;对于浮点样本,则可以将其作为double
进行访问)。
(当然,这些都不保证您的Qt库的QtMultimedia实际上支持 64位样本;它可能会或可能不会,但至少API支持告诉Qt您想要什么:))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.