本质上,两者之间的区别在于您正在访问什么。
使用 Sound::lock 您将锁定声音的样本缓冲区,因此当您使用 createSound 加载时,它会将文件解压缩为 PCM 并将其放入样本缓冲区。您可以使用此函数直接访问该缓冲区(锁定您想要的部分)。如果您在控制台上,则该数据可能是本机压缩格式。作为旁注,“锁定”声音的想法来自 DirectSound API,您可以在其中“锁定”缓冲区以防止在读取或写入时访问它,完成后解锁给定的访问权限音频系统。
Sound::readData 是一种从声音中提取(流式传输)PCM 数据的更渐进的方式,这里您实际上是在每次调用 readData 时将压缩数据解码为 PCM。您在较小的块中执行此操作,您总是会得到最终解码的 PCM 数据。这种方法更灵活,内存效率更高。
例如,您可以将 10MB MP3 作为流加载,然后使用 Sound::readData 分块将其解码为 PCM。否则,您需要将其作为样本加载(在 createSound 时将其解码为 PCM),然后锁定大量缓冲区以获取 PCM。
getWaveData 用于显示当前播放时间的波形,不应用于解码文件的完整波形。根据调用 getWaveData 的频率,您可能会多次获得相同的数据块,因为它是一个及时的快照。