Воспроизведение байтового буфера с 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();
    }
    }
}

Надеюсь, это станет ясно! Спасибо!

0 ответов

Другие вопросы по тегам