Я наткнулся на ответ (честно говоря, пытаясь & ^ @! Я не думал, что это сработает), если кому-то интересно ... В моем исходном коде (который получен из примера в ссылке в оригинале post), данные читаются из файла примерно так:
InputStream is = new FileInputStream (file);
BufferedInputStream bis = new BufferedInputStream (is, 8000);
DataInputStream dis = new DataInputStream (bis); // Create a DataInputStream to read the audio data from the saved file
int i = 0; // Read the file into the "music" array
while (dis.available() > 0)
{
music[i] = dis.readShort(); // This assignment does not reverse the order
i++;
}
dis.close(); // Close the input stream
В этой версии music [] - это массив SHORTS. Таким образом, метод readShort (), похоже, имеет здесь смысл, поскольку данные представляют собой 16-битные PCM ... Однако на Android это, похоже, проблема. Я изменил этот код на следующее:
music=new byte[(int) file.length()];//size & length of the file
InputStream is = new FileInputStream (file);
BufferedInputStream bis = new BufferedInputStream (is, 8000);
DataInputStream dis = new DataInputStream (bis); // Create a DataInputStream to read the audio data from the saved file
int i = 0; // Read the file into the "music" array
while (dis.available() > 0)
{
music[i] = dis.readByte(); // This assignment does not reverse the order
i++;
}
dis.close(); // Close the input stream
В этой версии music [] - это массив байтов. Я до сих пор говорю AudioTrack, что это 16-битные данные PCM, и у моего Android, похоже, нет проблем с записью массива байтов в AudioTrack, настроенный таким образом ... В любом случае, он, наконец, звучит правильно, так что если кто-нибудь еще кто-то хочет воспроизводить звуки Windows на своих Android, по какой-то причине это решение. Ах, Endianness ......
R.