Прерывистое воспроизведение звука с помощью AudioTrack.writeAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Прерывистое воспроизведение звука с помощью AudioTrack.write

Сообщение Anonymous »

Я использую библиотеку AudioTrack для воспроизведения семплов PCM, которые передаются через Wi-Fi. Проблема в том, что воспроизведение очень прерывистое при воспроизведении на Lenovo K900 (4.1.2), тогда как при воспроизведении на телефоне OnePlusOne (Marshmallow 6.0.1 cyanogen) оно происходит плавно.
Чтобы исключить задержку потоковой передачи, я сначала загрузил весь поток в массив, а затем воспроизвел звук, перебирая предварительно заполненный массив. По-прежнему ситуация не улучшается.
Теперь K900 работает под управлением Android 4.1.2, тогда как Android SDK, который я использовал, предназначен для API23, я имею в виду, что когда я открываю определение класса AudioTrack, он открывает файл класса API23. Вызывает ли это какие-либо проблемы?
int bufferSize = AudioTrack.getMinBufferSize(SAMPLE_RATE, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_8BIT);
if (bufferSize == AudioTrack.ERROR || bufferSize == AudioTrack.ERROR_BAD_VALUE) {
bufferSize = SAMPLE_RATE * 2;
}
int readBytes;
int bufSize=2123880;//size of the file being streamed
byte[] buffer=new byte[bufSize];
//bufferSize*=2;
DataInputStream in = new DataInputStream(socket.getInputStream());
readBytes=0;
while(true) {
try {
if(in.available()>0){
readBytes+=in.read(buffer, readBytes, in.available());
// audioTrack.write(buffer,0,readBytes);
}else{
break;
}
} catch (SocketTimeoutException s) {
System.out.println("Socket timed out!");
//audioTrack.release();
break;
} catch (IOException e) {
e.printStackTrace();
//audioTrack.release();
break;
}
}
in.close();
readBytes=0;
AudioTrack audioTrack = new AudioTrack(
AudioManager.STREAM_MUSIC,
SAMPLE_RATE,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_8BIT,
bufferSize,
AudioTrack.MODE_STREAM);
audioTrack.play();
while(readBytes 0) {
readBytes = in .read(buffer, 0, buffer.length);
audioTrack.write(buffer, 0, readBytes);
}
} catch (SocketTimeoutException s) {
System.out.println("Socket timed out!");
audioTrack.release(); in .close();
socket.close();
break;
} catch (IOException e) {
e.printStackTrace();
audioTrack.release(); in .close();
socket.close();
break;
}
}

} catch (Exception e) {
e.printStackTrace();
}
}


Подробнее здесь: https://stackoverflow.com/questions/387 ... rack-write
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»