audio-visualizer-android icon indicating copy to clipboard operation
audio-visualizer-android copied to clipboard

How to use this library with live recording

Open rk8339811 opened this issue 3 years ago • 2 comments

Hi,

I am working on an Audio recording function. I want the recorded Audio to be saved into the internal cache directory of my app so that I can later process it and send it to my server. I have taken the RECORD_AUDIO_PERMISSION in my Android Manifest.

Below is the code I am using for recording audio and save it to a file.

    String uuid = UUID.randomUUID().toString();
    fileName = getExternalCacheDir().getAbsolutePath() + "/" + uuid + ".3gp";


    recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setOutputFile(fileName);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);


    try {
        recorder.prepare();
        recorder.start();
    } catch (IOException e) {}

The above code to work fine but I am facing another issue. I want to create a Waveform effect for my app for which I am using this library. I know the below code can be used to pass on bytes to the visualizer.

//get reference to visualizer
 mVisualizer = findViewById(R.id.blast);

 //TODO: get the raw audio bytes
 
 //pass the bytes to visualizer
 mVisualizer.setRawAudioBytes(bytes);

Now, my question is how can I get the Bytes in real-time of the Audio which is being recorded and being saved? Should I read the file and extract recent bytes from it at regular intervals or is there any other method to achieve this?

Any help would be appreciated

Thanks.

rk8339811 avatar May 05 '21 08:05 rk8339811

private fun convertFileToBytes(file: File):ByteArray { try { val b = ByteArray(1024) val os= ByteArrayOutputStream() val fis=FileInputStream(file) var read:Int=0 read=fis.read(b) while ((fis.read(b).also { read = it })!=-1){ os.write(b,0,read) } fis.close() os.close() return os.toByteArray()

    } catch (ex: Exception) {
        ex.printStackTrace()
    }
    return byteArrayOf(1,2,3)
}

vikashrathore081 avatar Jul 10 '21 11:07 vikashrathore081

Were you able to solve this? I have the same issue, but even by adding vikashrathore081 's code I can't seem to make it work!

christina-bakirtzi avatar Sep 06 '21 19:09 christina-bakirtzi