소켓통신 UDP를 사용하여 실시간으로 녹음된 데이터를 다른 핸드폰으로 보내려고 합니다ㅜㅜㅜ

제가 보기엔 데이터는 잘 전송되는데

받은 데이터들이 소리로 변형될때 이상한 소리가 나네요ㅠㅠㅠㅠ

몇일동안 고민해봐도 진도가 안나가네요ㅠㅠㅠ

 

 

보내는 부분

 

package com.pro.TelNetwork;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.AsyncTask;
import android.util.Log;

public class NetworkUDP {
 private static final int port = 7999;
 // 서버에서 설정한 UDP 포트번호를 추가합니다.

 RecordAudio recordTask;

 String dataInString = "";
 int frequency = 11025;
 int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
 int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
 // byte[] audiodata = new byte[10];
 DatagramSocket socket;
 DatagramPacket Packet;

 // private BufferedReader networkReader;
 private String myID = "";
 private String myIP = "";
 private String targetIP = "";
 private String targetID = "";

 public NetworkUDP(String targetIP) {
  this.targetIP = targetIP;
 }

 public String run() {
  recordTask = new RecordAudio();
  recordTask.execute();
  return dataInString;
 }

 private class RecordAudio extends AsyncTask<Void, Integer, Void> {

  @Override
  protected Void doInBackground(Void... params) {
   // TODO Auto-generated method stub

   try {
    socket = new DatagramSocket();
    InetAddress serverAddr = InetAddress.getByName(targetIP);
    Log.e("udp", "targetIP : " + targetIP + ", port : " + port);
    int bufferSize = AudioRecord.getMinBufferSize(frequency,
      channelConfiguration, audioEncoding);
    AudioRecord audioRecord = new AudioRecord(
      MediaRecorder.AudioSource.MIC, frequency,
      channelConfiguration, audioEncoding, bufferSize);
    short[] buffer = new short[bufferSize];
    audioRecord.startRecording();
    int r = 0;
    while (true) {
     int bufferReadResult = audioRecord.read(buffer, 0,
       bufferSize);
     byte[] buf = new byte[8];
     // try {
     // Thread.sleep(500);
     // } catch (Exception e) {
     // Log.e("error", "" + e);
     // }
     for (int i = 0; i < bufferReadResult; i++) {
      String ss = String.valueOf((int) buffer[i]);
      buf = ss.getBytes();
      Packet = new DatagramPacket(buf, buf.length,
        serverAddr, port);

      socket.send(Packet);
      Log.e("====", "buffer[i] : " + buffer[i]
        + ", (int) buffer[i] : " + (int) buffer[i]);
      // Log.e("buffer", r + " : " + buf);

      // socket.receive(Packet);
      // String s = new String(Packet.getData());
      // audiodata = s.getBytes();
      // Log.e("UDP", "Receive" + s.getBytes());

     }
    }

    // dos.close();

   } catch (Throwable t) {
    // TODO: handle exception
    Log.e("RecordTrack", "" + t);
   }
   return null;
  }
 }

}

 

받는 부분

 

 

package com.pro.namespace;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;

import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;

public class ReceiverActivity extends Activity {
 private int port = 7999;
 private DatagramSocket socket;
 private DatagramPacket receivePacket;
 String str;
 Thread th;

 String dataInString = "";
 int frequency = 11025;
 int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
 int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;

 PlayAudio playTask;
 Boolean playTaskCheck = true;
 Queue2 q;

 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  Log.e("UDP", "--------");

  playTask = new PlayAudio();
  playTask.execute();

 }

 private class PlayAudio extends AsyncTask<Void, Integer, Void> {

  @Override
  protected Void doInBackground(Void... params) {
   // TODO Auto-generated method stub
   byte[] buf = new byte[8];
   int bufferSize = AudioTrack.getMinBufferSize(frequency,
     channelConfiguration, audioEncoding);

   short[] audiodata = new short[bufferSize / 4];
   try {
    socket = new DatagramSocket(port);
    receivePacket = new DatagramPacket(buf, buf.length);
    Log.e("UDP", "S: Connecting...");
    Log.e("IP Address", getLocalIpAddress());

    AudioTrack audioTrack = new AudioTrack(
      AudioManager.STREAM_MUSIC, frequency,
      channelConfiguration, audioEncoding, bufferSize,
      AudioTrack.MODE_STREAM);

    audioTrack.play();
    while (true) {

     // buf = temp.getBytes(); // Byte단위로 변환합니다.
     // int i = 0;
     for (int i = 0; i < audiodata.length; i++) {
      socket.receive(receivePacket);
      String temp = new String(buf, 0,
        receivePacket.getLength());
      audiodata[i] = Short.parseShort(temp);
      Log.e("Receive",
        "i : " + i + ", Short : "
          + Short.parseShort(temp));

     }
     audioTrack.write(audiodata, 0, audiodata.length);

    }
   } catch (Exception ex) {
    Log.e("UDPReceiver", "S: Error", ex);
   }
   return null;

  }
 }

 public String getLocalIpAddress() {
  try {
   Enumeration<NetworkInterface> en = NetworkInterface
     .getNetworkInterfaces();
   while (en.hasMoreElements()) {
    NetworkInterface interf = en.nextElement();
    Enumeration<InetAddress> ips = interf.getInetAddresses();
    while (ips.hasMoreElements()) {
     InetAddress inetAddress = ips.nextElement();
     if (!inetAddress.isLoopbackAddress()) {
      return inetAddress.getHostAddress().toString();
     }
    }
   }
  } catch (SocketException ex) {
   Log.e("Testing", ex.toString());
  }
  return null;
 }
}