Я нашел здесь на stackoverflow.com a great example, который фактически работает для воспроизведения звуков. Все работает плавно, но я хотел бы знать, что произойдет в генерации PCM. Вот код:Создать звук - PCM (Android - Java)
int idx = 0;
for (final double dVal : sample) {
final short val = (short) ((dVal * 32767));
generatedSnd[idx++] = (byte) (val & 0x00ff);
generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8);
}
, где образец представляет собой двойной массив, который содержит синус, вычисленный со всеми требуемыми параметрами в этом случае (частота, Гц, так далее и тому подобное), и generatedSnd является массивом байт. Все, что я знаю, это то, что val & 0xff переводит int в байт, но вот что конкретно сделано? Почему есть сдвиг >>> 8?
Просто гадать ... Он сохраняет младший 8-бит в первом байте, затем он сохраняет более высокий 8-бит (от 9 до 16) во втором байте? Правильно ли это? Тогда что означает dVal * 32676? –