Воспроизведение байтового буфера с AudioTrack только издает шумы
Я разрабатываю приложение для динамика телефона, чтобы я мог слушать аудио со своего компьютера на своем телефоне, но приложение только издает шумы. Клиентская сторона (компьютер) разработана на C#, и на выходе получается файл.wav, который передается на телефон через сокеты и воспроизводится объектом AudioTrack в потоковом режиме. Я использую Windows Audio Session API (WASAPI) для записи выходных данных моих динамиков. У объекта есть метод, который срабатывает, когда новые данные доступны, в этом методе я отправляю байтовый массив на сервер (телефон).
Вот код Java:
public class Server_s implements Runnable {
private String mensaje;
private MainActivity estado;
private ServerSocket ss;
private Socket socket;
private BufferedReader entrada;
static final int frequency = 44100;
static final int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
static final int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
boolean isPlaying;
int playBufSize;
AudioTrack audioTrack;
private boolean listo = true;
byte[] data = new byte[38400];
private BufferedInputStream input;
public Server_s(MainActivity estado){
this.estado = estado;
playBufSize=AudioTrack.getMinBufferSize(frequency, channelConfiguration, audioEncoding);
Log.d("Servidor","Tamano "+playBufSize);
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, frequency, channelConfiguration, audioEncoding, playBufSize, AudioTrack.MODE_STREAM);
}
@Override
public void run() {
try {
ss = new ServerSocket(1995);
Log.d("Server","Started");
socket = ss.accept();
Log.d("Server","Connected");
conectado();
entrada = new BufferedReader(new InputStreamReader(socket.getInputStream()));
input = new BufferedInputStream(socket.getInputStream());
audioTrack.play();
readBytes();
desconectado();
Log.d("Server","Disconnected");
} catch (Exception e) {
e.printStackTrace();
desconectado();
}
}
String s = "";
public void readBytes(){
try {
byte[] buf = new byte[playBufSize];
int numRead = 0;
while((numRead = input.read(buf,0,buf.length)) >= 0){
s = new String(buf,"US-ASCII");
int offset = 0;
while (offset < numRead) {
offset += audioTrack.write(buf, offset, numRead - offset);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
private void conectado() {
Handler refresh = new Handler(Looper.getMainLooper());
refresh.post(new Runnable() {
public void run()
{
estado.cambiarEstado("Conectado");
}
});
}
private void desconectado() {
Handler refresh = new Handler(Looper.getMainLooper());
refresh.post(new Runnable() {
public void run()
{
estado.cambiarEstado("Desconectado");
}
});
if(ss != null){
try {
ss.close();
socket.close();
entrada.close();
run();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Надеюсь, это станет ясно! Спасибо!