Android record audio as mono doesn't work - android

I want to record mono audio. I'm setting the AudioRecord param to be ENCODING_PCM_16BIT, but when I analyze the resulting file with Audacity, I see that it was actually recorded as stereo.
Relevant code:
bufferSizeInBytes = AudioRecord.getMinBufferSize(AudioFileFunc.AUDIO_SAMPLE_RATE,
AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
audioRecord = new AudioRecord(AudioFileFunc.AUDIO_INPUT, AudioFileFunc.AUDIO_SAMPLE_RATE,
AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes);
What's problem? Thanks for answering.

Related

Using AudioTrack to play base64 encoded audio String (converted to byte array) just produces white noise

I am trying to playback base64 encoded .wav audio data on Android, via AudioTrack, and all I'm getting is a very short burst of white noise.
I presume it's in .wav format anyway - it was recorded via JavaScript using my Mac's built-in microphone and converted to base64.
I've possibly set the variables wrong when creating the AudioTrack (bit of guesswork involved there) - I've guessed at the sample rate and encoding, and put the buffer size as that of the entire chunk of data. Very grateful for any assistance.
playChannelAudio("data:application/octet-stream;base64,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");
private void playChannelAudio(String base64FormattedString) {
String strippedAudioData = base64FormattedString.substring(base64FormattedString.indexOf(',') + 1);
byte[] data = Base64.decode(strippedAudioData, Base64.DEFAULT);
AudioTrack audioTrack = new AudioTrack(
AudioManager.STREAM_MUSIC, 44100,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
data.length,
AudioTrack.MODE_STATIC);
audioTrack.write(data, 0, data.length);
audioTrack.play();
audioTrack.release();
}
Your audio data is encoded with Opus codec with a sample rate of 48000 Hz (detected by FFmpeg). You have given wrong sample rate as a parameter to the AudioTrack constructor (given 44100 but it's 48000) and also it's encoded with a codec, and AudioTrack expects raw/decoded PCM audio so it could be the reason for the white noise you are hearing. In order to play the audio correctly, first convert it to raw PCM audio data then encode it with Base64.

How do I playback an audio stream (not by URL)?

Say, I have an InputStream, providing audio/mpeg (or audio/aacp) - a Shoutcast radio.
Could somebody please show me a code example to playback such a stream?
I searched all over the internet, and it looks like the android.media.MediaPlayer can't playback a buffered stream. It can playback streams only via HTTP URL as DataSource.
Yes, there is a possibility to implement your own android.media.MediaDataSource and feed it to MediaPlayer.setDataSource(), but in case of audio/aacp the codec could not initialize.
Guess this could be done with OpenSL ES, but still I haven't found any example which would perform decoding from InputStream (not from URL), and then play back the output..
Come on guys! Any sample snippet in OpenSL ES decoding an input byte array and sending it to the audio output. Please!
Only one condition - input audio format should be obtained from the input stream.
The only one manual I found on OpenSL ES is Khronos OpenSL ES™ Registry, but that is not a reading for beginners at all. I'd rather die there searching for a proper "how-to" example... :(
Why is it so weird - it's very simple /though inconvenient/ (java), or it's very hard (NDK)? Why is there nothing in the middle?
your solution is something like this:
public void run() {
int buffersize = AudioRecord.getMinBufferSize(11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
AudioTrack atrack = new AudioTrack(AudioManager.STREAM_MUSIC, 11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize, AudioTrack.MODE_STREAM);
atrack.setPlaybackRate(11025);
byte[] buffer = new byte[buffersize];
atrack.play();
while (isPlaying) {
yourStream.read(buffer, 0, buffersize);
atrack.write(buffer, 0, buffer.length);
}
}

Decoding audio with Jspeex in android produces choppy/clipped sound

i am developing an android app, which plays live speex audio stream. So i used jspeex library .
The audio stream is 11khz,16 bit.
At android side i have done as follows:
SpeexDecoder decoder = new SpeexDecoder();
decoder.init(1, 11025,1, true);
decoder.processData(subdata, 0, subdata.length);
byte[] decoded_data = new byte[decoder.getProcessedDataByteSize()];
int result= decoder.getProcessedData(decoded_data, 0);
When this decoded data is played by Audiotrack , some part of audio is clipped.
Also when decoder is set to nb-mode( first parameter set to 0) the sound quality is worse.
I wonder there is any parameter configuration mistake in my code.
Any help, advice appreciated.
Thanks in advance.
Sampling rate and buffer size should be set in an optimized way for the specific device. For example you can use AudioRecord.getMinBufferSize() to obtain the best size for your buffer:
int sampleRate = 11025; //try also different standard sampleRate
int bufferSize = AudioRecord.getMinBufferSize(sampleRate,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
If your Audiotrack has a buffer which is too small or too large you will experience audio glitch. I suggest you to take a look here and play around with these values (sampleRate and bufferSize).

How to get audio source from sound file (mp3) ?

I'm trying to get sound level from mp3 file that is playing. But first, I should attach that sound. So,
How to attach sound from mp3 file as audio source in my code?
As far as I know, if we want to get audio source from MIC, we can use this code below.
mRecordInstance = new AudioRecord( MediaRecorder.AudioSource.MIC, FREQUENCY,
CHANNEL, ENCODING, BUFFSIZE
);
And what about if the audio source is mp3 file ?
I don't know anymore for solving this problem.
Please, help me..
Thank you,, :)
try this code:
MediaPlayer mp = new MediaPlayer();
mp.setDataSource("/mnt/sd/lalala.mp3");
AudioRecord ar = new AudioRecord(mp.getAudioSessionId(), FREQUENCY,
CHANNEL, ENCODING, BUFFSIZE);

AudioTrack. How can I use sessionId?

Documentations says: sessionId - Id of audio session the AudioTrack must be attached to
May I use it something like this?:
MediaPlayer mp = MediaPlayer.create(this, R.raw.test);
mp.start();
int minSize = AudioTrack.getMinBufferSize(
44100, AudioFormat.CHANNEL_OUT_STEREO,
AudioFormat.ENCODING_PCM_16BIT );
at = new AudioTrack(AudioManager.STREAM_MUSIC,
44100, AudioFormat.CHANNEL_OUT_STEREO,
AudioFormat.ENCODING_PCM_16BIT, minSize,
AudioTrack.MODE_STREAM, mp.getAudioSessionId());
at.setStereoVolume(0.0f, 1.0f);
What is right way to connect audio track to stream which used to media player. Can I make changes on this stream using AudioTrack?
You don't need to specify a session ID, as there's also an AudioTrack constructor that doesn't have a sessionId input parameter. However, as the documentation states, if you want to "associate audio effects to a particular instance of AudioTrack" you should use the constructor that takes a session ID.
This session ID can either be taken from a MediaPlayer instance that you have created - or it can be zero, in which case "a new session will be created for this track if none is supplied".
While looking through the Android Documentation, I found an AudioTrack.Builder class. A snippet of the documentaiton explains that
If the session ID is not specified with setSessionId(int), a new one will be generated.
It appears that this method would allow for creation of a new AudioTrack without need of supplying a session ID.

Categories

Resources