Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8562871
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 11, 20262026-06-11T16:49:39+00:00 2026-06-11T16:49:39+00:00

I am trying to record a audio & stores into a sdcard as well

  • 0

I am trying to record a audio & stores into a sdcard as well as send to server. When I am trying to play recorded voice its playing,but not as I have recorded. If I record voice for 10mins it ll play for 4min i.e someone has pressed fast forward button with some noisy sound. I am not getting where I am going wrong. Can anybody say me how to solve this problem (should play how much i have recorded i.e 10min recorded then should play only 10mins).

Here is the code.. sorry for posting bulk code..

public class Audio_Call extends Activity {
private static final int RECORDER_BPP = 16;
private static final String AUDIO_RECORDER_FILE_EXT_WAV = "AudioRecorder.wav";
private static final String AUDIO_RECORDER_FOLDER = "AudioRecorder";
private static final String AUDIO_RECORDER_TEMP_FILE = "record_temp.raw";
private static final int RECORDER_SAMPLERATE = 8000;
private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO;
private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;

private AudioRecord recorder = null;
// private int bufferSize = 200000;
private int bufferSize = 0;
short[] buffer;
private Thread recordingThread = null;
private boolean isRecording = false;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.audio_call);

    setButtonHandlers();
    enableButtons(false);

    bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE,
            RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING);

}

private void setButtonHandlers() {
    ((Button) findViewById(R.id.btnStart)).setOnClickListener(btnClick);
    ((Button) findViewById(R.id.btnStop)).setOnClickListener(btnClick);
}

private void enableButton(int id, boolean isEnable) {
    ((Button) findViewById(id)).setEnabled(isEnable);
}

private void enableButtons(boolean isRecording) {
    enableButton(R.id.btnStart, !isRecording);
    enableButton(R.id.btnStop, isRecording);
}

// stores the file into the SDCARD
private String getFilename() {
    System.out.println("---3---");
    String filepath = Environment.getExternalStorageDirectory().getPath();
    File file = new File(filepath, AUDIO_RECORDER_FOLDER);

    if (!file.exists()) {
        file.mkdirs();
    }

    return (file.getAbsolutePath() + "/" + AUDIO_RECORDER_FILE_EXT_WAV);
}

// stores the file into the SDCARD
private String getTempFilename() {
    // Creates the temp file to store buffer
    System.out.println("---4-1--");
    String filepath = Environment.getExternalStorageDirectory().getPath();
    System.out.println("---4-2--");
    File file = new File(filepath, AUDIO_RECORDER_FOLDER);
    System.out.println("---4-3--");

    if (!file.exists()) {
        file.mkdirs();
    }

    File tempFile = new File(filepath, AUDIO_RECORDER_TEMP_FILE);
    System.out.println("---4-4--");

    if (tempFile.exists())
        tempFile.delete();
    System.out.println("---4-5--");
    return (file.getAbsolutePath() + "/" + AUDIO_RECORDER_TEMP_FILE);

}

private void startRecording() {

    int buffercount = 4088 / bufferSize;
    if (buffercount < 1)
        buffercount = 1;

    recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
            RECORDER_SAMPLERATE, RECORDER_CHANNELS,
            RECORDER_AUDIO_ENCODING, bufferSize * buffercount);

    buffer = new short[4088];

    recorder.startRecording();

    isRecording = true;

    recordingThread = new Thread(new Runnable() {

        @Override
        public void run() {

            writeAudioDataToFile();

        }
    }, "AudioRecorder Thread");

    recordingThread.start();

}

private void writeAudioDataToFile() {

    // Write the output audio in byte
    byte data[] = new byte[bufferSize];

    String filename = getTempFilename();
    //
    FileOutputStream os = null;
    //
    try {
        //
        os = new FileOutputStream(filename);
        //
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    int read = 0;


    // if (null != os) {
    while (isRecording) {
        // gets the voice output from microphone to byte format
        recorder.read(buffer, 0, buffer.length);
        // read = recorder.read(data, 0, 6144);

        if (AudioRecord.ERROR_INVALID_OPERATION != read) {
            try {
                // // writes the data to file from buffer
                // // stores the voice buffer

                // short[] shorts = new short[bytes.length/2];
                // to turn bytes to shorts as either big endian or little
                // endian.
                // ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().get(shorts);

                // to turn shorts back to bytes.
                byte[] bytes2 = new byte[buffer.length * 2];
                ByteBuffer.wrap(bytes2).order(ByteOrder.LITTLE_ENDIAN)
                        .asShortBuffer().put(buffer);

                os.write(bytes2);
                SendAudio(buffer);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    try {
        os.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

// }

private void stopRecording() {
    // stops the recording activity

    if (null != recorder) {
        isRecording = false;

        recorder.stop();
        recorder.release();

        recorder = null;
        recordingThread = null;
    }

    // copy the recorded file to original copy & delete the recorded copy
    copyWaveFile(getTempFilename(), getFilename());
    deleteTempFile();

}

private void deleteTempFile() {
    File file = new File(getTempFilename());

    file.delete();
}

private void copyWaveFile(String inFilename, String outFilename) {
    System.out.println("---8---");
    FileInputStream in = null;
    FileOutputStream out = null;
    long totalAudioLen = 0;
    long totalDataLen = totalAudioLen + 36;
    long longSampleRate = RECORDER_SAMPLERATE;
    int channels = 2;
    long byteRate = RECORDER_BPP * RECORDER_SAMPLERATE * channels / 8;

    byte[] data = new byte[bufferSize];

    try {
        in = new FileInputStream(inFilename);
        out = new FileOutputStream(outFilename);
        totalAudioLen = in.getChannel().size();
        totalDataLen = totalAudioLen + 36;

        AppLog.logString("File size: " + totalDataLen);

        WriteWaveFileHeader(out, totalAudioLen, totalDataLen,
                longSampleRate, channels, byteRate);
        byte[] bytes2 = new byte[buffer.length * 2];
        ByteBuffer.wrap(bytes2).order(ByteOrder.LITTLE_ENDIAN)
                .asShortBuffer().put(buffer);
        while (in.read(bytes2) != -1) {
            out.write(bytes2);
        }

        in.close();
        out.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private void WriteWaveFileHeader(FileOutputStream out, long totalAudioLen,
        long totalDataLen, long longSampleRate, int channels, long byteRate)
        throws IOException {
    System.out.println("---9---");
    byte[] header = new byte[4088];

    header[0] = 'R'; // RIFF/WAVE header
    header[1] = 'I';
    header[2] = 'F';
    header[3] = 'F';
    header[4] = (byte) (totalDataLen & 0xff);
    header[5] = (byte) ((totalDataLen >> 8) & 0xff);
    header[6] = (byte) ((totalDataLen >> 16) & 0xff);
    header[7] = (byte) ((totalDataLen >> 24) & 0xff);
    header[8] = 'W';
    header[9] = 'A';
    header[10] = 'V';
    header[11] = 'E';
    header[12] = 'f'; // 'fmt ' chunk
    header[13] = 'm';
    header[14] = 't';
    header[15] = ' ';
    header[16] = 16; // 4 bytes: size of 'fmt ' chunk
    header[17] = 0;
    header[18] = 0;
    header[19] = 0;
    header[20] = 1; // format = 1
    header[21] = 0;
    header[22] = (byte) channels;
    header[23] = 0;
    header[24] = (byte) (longSampleRate & 0xff);
    header[25] = (byte) ((longSampleRate >> 8) & 0xff);
    header[26] = (byte) ((longSampleRate >> 16) & 0xff);
    header[27] = (byte) ((longSampleRate >> 24) & 0xff);
    header[28] = (byte) (byteRate & 0xff);
    header[29] = (byte) ((byteRate >> 8) & 0xff);
    header[30] = (byte) ((byteRate >> 16) & 0xff);
    header[31] = (byte) ((byteRate >> 24) & 0xff);
    header[32] = (byte) (2 * 16 / 8); // block align
    header[33] = 0;
    header[34] = RECORDER_BPP; // bits per sample
    header[35] = 0;
    header[36] = 'd';
    header[37] = 'a';
    header[38] = 't';
    header[39] = 'a';
    header[40] = (byte) (totalAudioLen & 0xff);
    header[41] = (byte) ((totalAudioLen >> 8) & 0xff);
    header[42] = (byte) ((totalAudioLen >> 16) & 0xff);
    header[43] = (byte) ((totalAudioLen >> 24) & 0xff);

    out.write(header, 0, 4088);
}

private View.OnClickListener btnClick = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btnStart: {
            AppLog.logString("Start Recording");

            enableButtons(true);
            startRecording();

            break;
        }
        case R.id.btnStop: {
            AppLog.logString("Stop Recording");

            enableButtons(false);
            stopRecording();

            break;
        }
        }
    }
};

public void SendAudio(final short data[]) {
    Thread thrd = new Thread(new Runnable() {
        String LOG_TAG = null;
        long SAMPLE_INTERVAL = 10;

        @Override
        public void run() {
            Log.e(LOG_TAG, "start send thread, thread id: ");

            long file_size = 0;
            int bytes_read = 0;
            int bytes_count = 0;

            // byte[] buf = new byte[bufferSize];
            // buf = data;

            try {
                // byte [] b = "192.168.1.40".getBytes();
                byte[] b = new byte[] { (byte) 192, (byte) 168, (byte) 1,
                        (byte) 39 };

                InetAddress addr = InetAddress.getLocalHost();
                InetAddress addr1 = InetAddress.getByAddress(b);

                HttpClient httpclient = new DefaultHttpClient();

                ServerUrl url = new ServerUrl();

                String url_page = ServerUrl.url_audio;
                // String value = new String(buf);

                // System.out.println("mmdata--------- " + value);

                HttpPost httppost = new HttpPost(url_page);

                // Unix time stamp
                long unixTime = System.currentTimeMillis() / 1000L;
                String timestamp = String.valueOf(unixTime);

                // Json Format
                JSONObject holder = new JSONObject();
                JSONArray jArray = new JSONArray();
                try {
                    holder.put("UserId", "1");

                    holder.put("Timestamp", timestamp);
                    // holder.put("length", value.length());
                    for (int i = 0; i < buffer.length; i++) {
                        jArray.put(i, buffer[i]);
                    }

                    holder.put("MMData", jArray);
                    System.out.println("ARRAYYYY" + jArray);



                } catch (JSONException e1) {
                    e1.printStackTrace();
                }

                try {

                    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                            2);

                    nameValuePairs.add(new BasicNameValuePair("MMData",
                            jArray.toString()));

                    httppost.setEntity(new UrlEncodedFormEntity(
                            nameValuePairs));

                    StringEntity se = new StringEntity(jArray.toString());

                    se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,
                            "application/json"));

                    httppost.setEntity(se);

                    HttpResponse response = httpclient.execute(httppost);

                } catch (ClientProtocolException e) {
                    System.out.println("-------13");
                    e.printStackTrace();
                } catch (IOException e) {
                    System.out.println("-------14");
                    e.printStackTrace();
                } catch (Exception e) {
                    System.out.println("-------15");
                    System.out.println("Exception");
                    e.printStackTrace();
                }
                bytes_count += bytes_read;
                Log.d(LOG_TAG, "bytes_count : " + bytes_count);
                Thread.sleep(SAMPLE_INTERVAL, 0);

            } catch (InterruptedException ie) {
                Log.e(LOG_TAG, "InterruptedException");
            } catch (UnknownHostException uhe) {
                Log.e(LOG_TAG, "UnknownHostException");
            } catch (IOException ie) {
                Log.e(LOG_TAG, "IOException");
            }
        } // end run
    });
    thrd.start();
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    if (keyCode == KeyEvent.KEYCODE_BACK) {

        finish();
    }
    return super.onKeyDown(keyCode, event);
}
}

help will be appreciated.. I have done search on this,but dint get proper solutions.. I am trying all other possibilities but not succeeded.

Many Thanks

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-11T16:49:40+00:00Added an answer on June 11, 2026 at 4:49 pm

    I got the solution.. here is my code

    public class Audio_Record extends Activity {
    private static final int RECORDER_SAMPLERATE = 8000;
    private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO;
    private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
    private AudioRecord recorder = null;
    private Thread recordingThread = null;
    private boolean isRecording = false;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        setButtonHandlers();
        enableButtons(false);
    
        int bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE,
                RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING);
    
        System.out.println("BUFFER SIZE VALUE IS " + bufferSize);
    
    }
    
    private void setButtonHandlers() {
        ((Button) findViewById(R.id.btnStart)).setOnClickListener(btnClick);
        ((Button) findViewById(R.id.btnStop)).setOnClickListener(btnClick);
    }
    
    private void enableButton(int id, boolean isEnable) {
        ((Button) findViewById(id)).setEnabled(isEnable);
    }
    
    private void enableButtons(boolean isRecording) {
        enableButton(R.id.btnStart, !isRecording);
        enableButton(R.id.btnStop, isRecording);
    }
    
    int BufferElements2Rec = 1024; // want to play 2048 (2K) since 2 bytes we
                                    // use only 1024
    int BytesPerElement = 2; // 2 bytes in 16bit format
    
    private void startRecording() {
    
        recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
                RECORDER_SAMPLERATE, RECORDER_CHANNELS,
                RECORDER_AUDIO_ENCODING, BufferElements2Rec * BytesPerElement);
    
        recorder.startRecording();
        isRecording = true;
    
        recordingThread = new Thread(new Runnable() {
    
            public void run() {
    
                writeAudioDataToFile();
    
            }
        }, "AudioRecorder Thread");
        recordingThread.start();
    }
    
    private byte[] short2byte(short[] sData) {
        int shortArrsize = sData.length;
        byte[] bytes = new byte[shortArrsize * 2];
    
        for (int i = 0; i < shortArrsize; i++) {
            bytes[i * 2] = (byte) (sData[i] & 0x00FF);
            bytes[(i * 2) + 1] = (byte) (sData[i] >> 8);
            sData[i] = 0;
        }
        return bytes;
    
    }
    
    private void writeAudioDataToFile() {
        // Write the output audio in byte
    
        String filePath = "/sdcard/voice8K16bitmono.pcm";
        short sData[] = new short[BufferElements2Rec];
    
        FileOutputStream os = null;
        try {
            os = new FileOutputStream(filePath);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    
        while (isRecording) {
            // gets the voice output from microphone to byte format
    
            recorder.read(sData, 0, BufferElements2Rec);
            System.out.println("Short wirting to file" + sData.toString());
            try {
                // // writes the data to file from buffer
                // // stores the voice buffer
    
                byte bData[] = short2byte(sData);
    
                os.write(bData, 0, BufferElements2Rec * BytesPerElement);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        try {
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    private void stopRecording() {
        // stops the recording activity
        if (null != recorder) {
            isRecording = false;
    
            recorder.stop();
            recorder.release();
    
            recorder = null;
            recordingThread = null;
        }
    }
    
    private View.OnClickListener btnClick = new View.OnClickListener() {
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.btnStart: {
                enableButtons(true);
                startRecording();
                break;
            }
            case R.id.btnStop: {
                enableButtons(false);
                stopRecording();
                break;
            }
            }
        }
    };
    
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    
        if (keyCode == KeyEvent.KEYCODE_BACK) {
    
            finish();
        }
        return super.onKeyDown(keyCode, event);
    }
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

i've been trying to record and play recorded audio in android . I've used
Well i am trying to implement basic functionality of voice recording , like Record
I am trying to record audio using an iPhone app and send the audio
I am trying to send the send voice data immediately to local server using
I'm trying to save an audio file on my server. I record the audio
I am trying to record audio by MediaRecorder, and I get an error, I
I'm trying to record audio this.recorder = new android.media.MediaRecorder(); this.recorder.setAudioSource(android.media.MediaRecorder.AudioSource.MIC); this.recorder.setOutputFormat(android.media.MediaRecorder.OutputFormat.DEFAULT); this.recorder.setAudioEncoder(android.media.MediaRecorder.AudioEncoder.DEFAULT); this.recorder.setOutputFile(pruebaAudioRecorder.mp4); **this.recorder.prepare();**
We're trying to record video to a Flash Media Server using a NetConnection object
I was trying to record a voice in my app and then store it
I'am trying to insert record into db2 table and getting a result with response.write.

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.