Я не знаю, как воспроизводить аудио поток в режиме реального времени через разъем. Теперь у меня есть сокет аудиопотока. формат потока:
wav format header +pcm data
wav format header +pcm data
wav format header +pcm data
Итак, как мне разобрать живой аудиопоток для воспроизведения в классе AudioTrack в Android. Благодарю.
Вот мой код:
private void PlayAudio(int mode)
{
if(AudioTrack.MODE_STATIC != mode && AudioTrack.MODE_STREAM != mode)
throw new InvalidParameterException();
long bytesWritten = 0;
int bytesRead = 0;
int bufferSize = 0;
byte[] buffer;
AudioTrack track;
Socket socket=null;
DataInputStream dIn=null;
bufferSize = 55584; // i donnt know how much the buffer size should be. 55584 is the size that i got first from the socket stream. maybe the buffer size is setted wrong.
//sample rate 16khz,channel: mono sample bits:16 bits channel:1
bufferSize = AudioTrack.getMinBufferSize(16000,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
buffer = new byte[bufferSize];
track = new AudioTrack(AudioManager.STREAM_MUSIC, 16000,
AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,
bufferSize, mode);
// in stream mode,
// 1. start track playback
// 2. write data to track
if(AudioTrack.MODE_STREAM == mode)
track.play();
try
{
socket = new Socket("192.168.11.123", 8081);
dIn = new DataInputStream(socket.getInputStream());
// dIn.skipBytes(44);
}
catch (Exception e)
{
e.printStackTrace();
}
try
{
do
{
long t0 = SystemClock.elapsedRealtime();
try
{
bytesRead = dIn.read(buffer, 0, buffer.length);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (NullPointerException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
bytesWritten += track.write(buffer, 0, bytesRead);
Log.e("debug", "WritesBytes "+bytesRead);
} while (dIn.read() != -1);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
У меня отключился звук, когда я выполняю упражнение, но я могу периодически слышать музыку в режиме отладки, но она шумная Не могли бы вы мне помочь ?
сервер отправляет поток с интервалом 100 мс:
аудиоформат: // частота дискретизации 16 кГц, канал: моно выборочные биты: 16 бит, канал: 1