gauravk95 / audio-visualizer-android

🎵 [Android Library] A light-weight and easy-to-use Audio Visualizer for Android.
Apache License 2.0
844 stars 127 forks source link

How to use this library with live recording #21

Open rk8339811 opened 3 years ago

rk8339811 commented 3 years ago

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.

vikashrathore081 commented 3 years ago

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)
}
christina-bakirtzi commented 2 years ago

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!