Android: Forcing external microphone (jack input 3.5mm) to stay on - android

How do I force the Android system to select the 3.5mm Jack as my microphone source? I am using the AudioRecord class to do the recording.
I am using an external Microphone. When it is detected all works well, but sometimes the external microphone is not detected automatically. A TRRS splitter (cheap $3 thing) is used to split the 3.5mm Jack into separate Mic and Headphone jacks (I need simultaneous recording and playback).
The AudioManager.setWiredHeadsetOn() is deprecated and instructions say not to use it.
1) Do I maybe need additional external hardware to provide the correct microphone impedance?
2) Can I force the input in code?
3) Can a custom ROM archive audio control at this level - maybe this is the best option?
Thanks

It is very likely a hardware issue. Samsung phones seem to require a microphone with impedance of around 1.0k - 1.5k Ohm. Try modifying the input mic line by adding a series resistor to raise the impedance. Check out this link for details on how to do this: xdadevelopers - External mic on Galaxy devices

Related

Android microphone input usb-c probem

i'd need some help... I'm using Android to build a simple audio level meter; i'm first using some app on store to have an idea on the performance of internal/external microphone. I see on my device that the spectrum results low-pass filtered about over 8KHz; same happens if i use an external USB adapter (a realtek usb audio card) with a dytonaudio microphone, that have a flat band over 20-20khz. It seems android digitally filters microphone input indipendentely from the source (analog plug or digital usb type-c source).
I see that there are any low-pass attenuation on other friend's phones.
I used the same app in every device i tested (DecibelX), in order to check as fast as possible.
What i can do to disable this sort of processing? I don't know if app use UNPROCESSED or MIC input type on AudioRecord class, but i can't understand why Android process by software the audiostream from USB-C audio card.
Can someone help me? excuse for my english....

How to change microphone for recording when handsfree is connected in Samsung devices?

I'm working with OpenSL_ES in Android, and having some issues with the mic source selection in Samsung devices when I connect earphones with handsfree.
The problem is that no matter what mic source I set in OpenSL_ES, the gain configuration changes but the mic is always the handsfree mic. In other words, I cannot use the device built-in mic when I connect a handsfree device.
I have tried:
Changing the mic source to all available sources:
//ioInternals.micSource = SL_ANDROID_RECORDING_PRESET_NONE;
//ioInternals.micSource = SL_ANDROID_RECORDING_PRESET_GENERIC;
ioInternals.micSource = SL_ANDROID_RECORDING_PRESET_CAMCORDER;
//ioInternals.micSource = SL_ANDROID_RECORDING_PRESET_VOICE_RECOGNITION;
//ioInternals.micSource = SL_ANDROID_RECORDING_PRESET_VOICE_COMMUNICATION;
//ioInternals.micSource = SL_ANDROID_RECORDING_PRESET_UNPROCESSED;
res = (*recorderConfig)->SetConfiguration(recorderConfig, SL_ANDROID_KEY_RECORDING_PRESET,&ioInternals.micSource, sizeof(SLuint32));
None of the above allows me to change source (only gain configuration)
Some where I've read that a "hack" could be set to SL_ANDROID_RECORDING_PRESET_NONE in OpenSL_ES and then use MediaRecorder class in Java to prepare a recorder while changing the mic sources (which are like 9) to check if one of them would make the phone change the source to the device built-in mic and so OpenSL_ES would take the default mic at the moment. This doesn't make too much sense as they are working in different contexts, but took the time to make a test, and MediaRecorder does not change the mic source when handsfree is connected neither.
An option I see is to develop my mic module in Jack library from Samsung assuming that library can change the mic source. However I'm not certain that it is possible.
Question:
Do you know how I can resolve this issue?
I have seen a few apps that manage to make this work, but I have no idea what they are doing to accomplish the task.

Android audio record external jack

I would like to record the sound of the jack entry of my android phone. I've been searching about the Audio Capture class in Android, and i've found this:
https://developer.android.com/guide/topics/media/audio-capture.html
In the settings of this class, there are many options to choose the rec default mic, as this:
Set the audio source using MediaRecorder.setAudioSource(). You will probably want to use MediaRecorder.AudioSource.MIC.
What should I use to get the sound of the jack entry? Is there any example?
Thank you!
The API you provided is the correct one.
Calling mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC) (assuming the correct initialization of MediaRecorder as described here https://developer.android.com/guide/topics/media/camera.html -> Capturing Videos) will behave like this:
When you launch your app and start recording without any Jacks connected, phone's default microphones will be used. As soon as Jack microphone pin has detected a microphone connected, the system will use the Jack mic pin as an audio imput. Hovewer, you need to know that even though the audio record will have two channels, they will be identical, as Jack microphone can only record mono stream.

Play music via android speakers

I want to make an app that makes it possible to connect an iPod or mp3 player to my Android device and let the Android speakers function as external speakers.
The ideal situation would be to actually read from speaker output so I can connect a stereo mini jack cable.
Is it possible to read from the headset output with the Android SDK?
A second option would be to use a mono mini jack instead. I could maybe directly read from microphone and output as a music player. Although, having to use a mono mini jack would be a huge disadvantage, because most people don't own such a cable.
UPDATE
For my second option I found this link that would let me take a special adapter onto a stereo cable so the iPod output can go into the mic input. It's a TRRS adapter. This works, but still isn't the ideal solution to me. http://www.techlife.net/2012/12/add-an-audio-input-to-android.html
ANOTHER UPDATE
I did a test with only a mono cable, but it seems that the mic is not recognized, so I really need the TRRS adapter to make sure that the mic is on. I found some apps that can help me with measuring input volume. I think I can achieve my goal for myself with the adapter, but reading from headset output would be nicer and could actually result in building an app.
You need to understand some basic things...
Audio output lets you "take audio out of your device".
It's not audio input that would let you "insert audio signal into your device".
So the concept that you've presented cannot work, because this socket is not able to receive audio signal through normal stereo jack cable (and connector).
You could try to make it work with a device that supports the headphones/mic set (it's a different kind of 3.5 mm jack connector). It's so called TRRS (four-conductor). But to use it in your project you probably would need some cable/socket soldering and maybe even some sort of microporcessor to help processing the signals.

Is it possible to access data / record from two (2) microphones in Android devices?

I am trying to access, programatically, the data received from 2 microphones on Android devices.
This arises several questions:
Are there shipping Android devices with 2 microphones (e.g. for stereo recording)? I know there are devices with 2 microphones for echo cancellation / noise reduction, but as far as I could find they can be accessed as a single microphone for any programatic purpose.
Are there devices with a microphone / headphone socket supporting stereo external microphones?
Assuming any of the above is positive, is there a way to know what is the currently operating microphone setup?
I will appreciate any response!
Thanks,
Yoav
I only found out that e.g. once you plug in wired headset with microphone it doesn't matter what AudioSource you specify in you code - it always give you the audio stream form headset mic. I tried to get access to internal mic using AudioSource.CAMCORDER but without luck. I haven't tried with wireless (BT) headset though. However if I plugin headphones (w/o mic) it uses internal microphone. At least this is the outcome on my SGS2 with ICS 4.0. If somebody find a workaround I would be happy to hear as well.
I haven't tried yet, but maybe the Native Developement Tools can allow you to access any microphone you want from low level.
If you want to make things a bit simpler, you could consider using OpenSL ES for Android, although i have no idea if it provides low-level microphone control.

Categories

Resources