Ryan110
Ryan110

Reputation: 740

logical error in my App

I'm developing an App.but doesn't work very well.

it doesn't go inside the loop.

what's wrong with my code?

code :

private int sampleRate =44100;//Integer.parseInt(audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE));   
private int channelConfig =  AudioFormat.CHANNEL_OUT_MONO;
private int audioFormat = AudioFormat.ENCODING_PCM_16BIT;       
AudioRecord recorder;

private boolean status = true;



@SuppressLint("NewApi") @TargetApi(Build.VERSION_CODES.GINGERBREAD) @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


 if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
   }


    receiveButton = (Button) findViewById (R.id.receive_button);
    stopButton = (Button) findViewById (R.id.stop_button);
    receive_label= (TextView) findViewById(R.id.receive_label);
    receiveButton.setOnClickListener(receiveListener);
    stopButton.setOnClickListener(stopListener);
    port=(EditText) findViewById(R.id.editText1);
    button= (Button) findViewById(R.id.button1);
    button.setOnClickListener(close);
  //AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
   // sampleRate =Integer.parseInt( audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE));
}

private final OnClickListener close = new OnClickListener() {

    @Override
    public void onClick(View arg0) {
             System.exit(0);
    }

};



private final OnClickListener stopListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        status = false;
        speaker.release();
        Log.d("VR","Speaker released.s");

    }

};


private final OnClickListener receiveListener = new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        status = true;

        receive_label.setText("socket...2");
        startReceiving();

    }

};

public void startReceiving() {

    Thread receiveThread = new Thread (new Runnable() {

        @Override
        public void run() {

            try {

                int  minBufSize =460;//recorder.getMinBufferSize(sampleRate,channelConfig,audioFormat);


                Log.d("VR", ""+channelConfig+"  "+audioFormat+sampleRate);

                  DatagramSocket socket = new DatagramSocket(50005);
                  Log.d("VR", "Socket Created.s");


                  byte[] buffer = new byte[minBufSize+=4096];


                //  for (int sampleRate : new int[] {44100,8000, 11025, 16000 }) {  // add the rates you wish to check against




                      Log.d("bufersize", "bufer size :"+minBufSize);
                      Log.d("bufersize", "bufer size :"+sampleRate);
                      if (minBufSize != AudioRecord.ERROR_BAD_VALUE) {



                          speaker = new AudioTrack(AudioManager.STREAM_MUSIC,sampleRate,channelConfig,audioFormat,minBufSize,AudioTrack.MODE_STREAM);


                          speaker.play();
                          Log.d("VR", "spekaer playing...");
                      }
                //  }


                  //minimum buffer size. need to be careful. might cause problems. try setting manually if any problems faced
                 // int minBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);
                      Log.d("VR", ""+status);

                            while(status == true) {

                                  DatagramPacket packet = new DatagramPacket(buffer,buffer.length);

                                  socket.receive(packet);


                                  Log.d("VR", "Packet Received.s");

                                  //reading content from packet
                                 buffer=packet.getData();
                                  Log.d("VR", "Packet data read into buffer.s");


                                  //sending data to the Audiotrack obj i.e. speaker
                                  speaker.write(buffer, 0, minBufSize);
                                 Log.d("VR", "Writing buffer content to speaker.s");
                        }

                        } catch (SocketException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }




                }


    });
    receiveThread.start();
}}

i see all logs that i have put in the code but not those inside the loop

please give me your best help

thanks in advance

Upvotes: 0

Views: 55

Answers (1)

javad
javad

Reputation: 835

Add receiveThread.run(); to startReceiving()

Upvotes: 1

Related Questions