Я использую библиотеку 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
Прерывистое воспроизведение звука с помощью AudioTrack.write ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1760690287
Anonymous
Я использую библиотеку AudioTrack для воспроизведения семплов PCM, которые передаются через Wi-Fi. Проблема в том, что воспроизведение очень прерывистое при воспроизведении на [b]Lenovo K900 (4.1.2)[/b], тогда как при воспроизведении на телефоне [b]OnePlusOne (Marshmallow 6.0.1 cyanogen)[/b] оно происходит плавно.
Чтобы исключить задержку потоковой передачи, я сначала загрузил весь поток в массив, а затем воспроизвел звук, перебирая предварительно заполненный массив. По-прежнему ситуация не улучшается.
Теперь [b]K900[/b] работает под управлением [b]Android 4.1.2[/b], тогда как Android SDK, который я использовал, предназначен для [b]API23[/b], я имею в виду, что когда я открываю определение класса AudioTrack, он открывает файл класса [b]API23[/b]. Вызывает ли это какие-либо проблемы?
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();
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/38758169/choppy-audio-playback-with-audiotrack-write[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия