По сути, разница между ними заключается в том, к чему вы обращаетесь.
С помощью Sound :: lock вы блокируете буфер семплов звука, поэтому при загрузке с createSound он распаковывает файл в PCM и помещает его в буфер семплов. Вы используете эту функцию для прямого доступа к этому буферу (вы блокируете ту его часть, которую хотите). Если вы находитесь на консоли, эти данные могут быть в сжатом формате. В качестве дополнительного примечания идея «блокировки» звука возникает для DirectSound API, где вы «блокируете» буфер для предотвращения доступа к нему во время чтения или записи в него, когда вы закончите, вы разблокируете доступ к аудиосистема.
Sound :: readData - более постепенный способ извлечения (потоковой передачи) данных PCM из звука, здесь вы фактически декодируете сжатые данные в PCM при каждом вызове readData. Вы делаете это небольшими блоками и всегда получаете окончательно декодированные данные PCM. Этот подход более гибкий и эффективный для памяти.
Например, вы можете загрузить 10 МБ MP3 в виде потока и затем декодировать его в PCM, используя Sound :: readData в виде фрагментов. В противном случае вам потребуется загрузить его в качестве образца (который декодирует его в PCM во время createSound), а затем заблокировать большой буфер для получения PCM.
getWaveData используется для отображения формы сигнала в текущий момент воспроизведения, его не следует использовать для декодирования полной формы сигнала файла. В зависимости от частоты обращений к getWaveData, вы можете получить один и тот же блок данных несколько раз, так как это один моментальный снимок.