Essentiellement la différence entre les deux est ce que vous accédez. Avec Sound :: lock, vous verrouillez le tampon d'échantillonnage du son. Lorsque vous chargez avec createSound, il décompresse le fichier en PCM et le place dans le tampon d'échantillonnage. Vous utilisez cette fonction pour accéder directement à ce tampon (vous verrouillez la partie que vous voulez). Si vous êtes sur une console, les données peuvent être un format compressé natif. En guise de remarque, l'idée de "verrouiller" un son vient pour l'API DirectSound où vous "verrouiller" un tampon pour en empêcher l'accès pendant que vous lisez ou écrivez dessus, lorsque vous avez fini de débloquer l'accès donné au système audio. Sound :: readData est une façon plus progressive d'extraire (streamer) des données PCM du son, ici vous décodez réellement les données compressées en PCM avec chaque appel readData. Vous le faites en plus petits blocs et vous obtenez toujours les données PCM décodées finales. Cette approche est plus flexible et efficace en termes de mémoire.
Par exemple, vous pouvez charger un fichier MP3 de 10 Mo en tant que flux puis le décoder en PCM en utilisant Sound :: readData en morceaux. Sinon, vous devrez le charger en tant qu'échantillon (qui le décode en PCM à l'heure createSound) puis verrouiller un tampon massif pour obtenir le PCM. GetWaveData est utilisé pour afficher la forme d'onde à l'heure actuelle de la lecture, il ne devrait pas être utilisé pour décoder une forme d'onde complète du fichier. En fonction de la fréquence des appels à getWaveData, vous pouvez obtenir le même bloc de données plusieurs fois que s'il s'agit d'un seul instantané.