Відтворення звуку за допомогою AudioTrack
Використовуйте клас AudioTrack для відтворення звуку безпосередньо через апаратні буфери пристрою. Створіть новий об'єкт AudioTrack, вказавши потоковий режим, частоту, параметри каналів, тип кодувальника та довжину аудіо.
AudioTrack AudioTrack = новий AudioTrack(AudioManager.STREAM_MUSIC, frequency, channelConfiguration, audioEncoding,
Оскільки аудіодані необроблені, немає метаінформації, пов'язаної з ними. Тому важливо встановити коректні властивості, щоб вони збігалися з тими, які були використані для запису файлу.
Ініціалізувавши об'єкт AudioTrack, викличте метод play, щоб розпочати асинхронне відтворення. Використовуйте метод write, щоб додати
«сирі» аудіодані в буфері програвача.
audioTrack.write(audio, 0, audioLength);
Ви можете почати запис до буфера об'єкта AudioTrack як до виклику методу play, так і після. У першому випадку відтворення піде відразу після виклику, у другому - звук програватиметься, як тільки запишете дані в буфер AudioTrack.
У лістингу 11.22 показано відтворення файлу, записаного раніше, при цьому очікувана частота аудіофайлу подвоюється, що призводить до збільшення швидкості програвання вдвічі.
int frequency = 11025/2;
int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
File file = new File(Environment.getExternalStorageDirectory(), "raw.pcm");
// Масив типу short для зберігання аудіоданих (звук 16-бітний,
// тому виділяємо по 2 байти значення) int audioLength = (int)(file.length()/2); short[] audio = new short[audioLength];
InputStream is = новий FileInputStream(file); BufferedInputStream bis = новий BufferedInputStream(is);DataInputStream dis = new DataInputStream(bis);
// Закриття вхідних потоків. dis.close();
// Створення об'єкта AudioTrack та програвання звуку за його допомогою
AudioTrack AudioTrack = новий AudioTrack(AudioManager.STREAM_MUSIC, frequency, channelConfiguration, audioEncoding,
audioTrack.write(audio, 0, audioLength);
> catch (Throwable t) <>