Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Audio effect on wav file and save it

Requirement

Android open a .wav file in sd card, play it , add some effect (like echo, pitch shift etc), save the file with effect. Simple :(

What I know

  1. I can open and play file using Soundpool or MediaPlayer.
  2. I can give some effect while playing using both. ie for Media Player I can set Environmental Reverb effect. Using SoundPool I can set playing rate, which is kind of like pitch shift. I am successful in implementing these right now.
  3. But either of this classes doesn't have any method to save the played file. So I can only play, I cannot save the music with effect.

What I want to know

  1. Is there any other classes of interest, other than MediaPlayer or SoundPool. Never mind about saving, you just mention the class, I will do the research about saving file with them.
  2. Any 3rd party libraries where I can add effects and save? Happy if it is open source and free. But mention them even if it is proprietary.
  3. Any other areas where I can look into. Does OpenAL support voice filtering along with voice positioning? Will it work with Android?

Ready to do the dirty work. You please lend me the path..

EDIT:

Did some more searching, and come across AudioTrack. But it also won't support saving to a file. So no luck there also..

EDIT

Ok, what if I do it myself? Get raw bytes from a wav file, and work on that. I recorded a wav file using AudioRecord, got a wav file. Is there any resource describing low level audio processing (I mean at the bytes level).

EDIT

Well bounty time is up, and I am giving bounty to the only answer that I got. After 7 days, what I understood is
  1. We can't save what we play using MediaPlayer, AudioTrack etc.
  2. There is no audio processing libraries available to use.
  3. You can get raw wav files, and do the audio processing yourself. The answer gave a good wrapper class for reading/writing wav files. A good java code to read and change pitch of wav files is here.
like image 854
Krishnabhadra Avatar asked Nov 22 '12 07:11

Krishnabhadra


1 Answers

The WavFile class http://www.labbookpages.co.uk/audio/javaWavFiles.html claims to read and write wav files and allow per-sample manipulation through arrays of sample values. It's certainly reasonably small, 23kbytes total source code.

I did struggle for a while to build an android app with the Wavfile Class included. This turned out to be because both WavFile and ReadExample (from the above link) were intended as standalone java programs, so include a method main(String [] args){}. Eclipse sees this and thinks the Class is a standalone runnable program, and, when I click the run button, tries to execute just the one Class with the java in the development machine, instead of launching the whole app to my phone. When I take care to run the whole app with the little drop-down menu on the run button, I don't have any trouble, and the WavFile Class and examples drop straight in, give zero warnings in the IDE, and work as advertised running on my phone.

like image 92
emrys57 Avatar answered Oct 21 '22 17:10

emrys57