How to generate 2 different sounds from 2 built-in speakers simultaneously - android

Is it possible to play 2 different sounds simultaneously from 2 built-in speakers (1=main speaker, 2=earpiece speaker) on Android, preferably using Oboe C++ library.
In this thread, it was asked a similar question, but for 2 different audio devices. In my case, I just want to play on the same audio device but through 2 different speakers.
It was possible to record data from built-in microphones simultaneously using stereo channels. A similar approach for speakers didn't work.
Any help much appreciated, thank you.
Note:
The term Audio Device refers to a device capable of receiving or
sending audio. An audio device can have multiple microphones and/or
speakers attached to it, and these are represented as different
channels.
Debugging device is Google Pixel XL running Android 9

If the audio device has 2 speakers then you should be able to play different sounds through each speaker by supplying different data to each channel.
However, I believe the speakers you're referring to:
2 built-in speakers (1=main speaker, 2=earpiece speaker)
are actually 2 separate audio devices each with a single speaker. In which case you won't be able to use them at the same time, although hacks might be available to make the speakers part of the same audio device (I haven't tried this).

Related

Multiplexing two Bluetooth devices to create dual audio

We want to tackle the age old question of connecting two musicboxes over bluetooth and stream music on them simultaneously.
We know, that modern smartphones are able to connect to two devices but the output audio stream only connects to one device. And according to a lot of different sources the A2DP Profile is also only able to have one Master and one Slave.
Our approach would be a multiplexing of the said audio output between the two connected devices. So on android we would just have to change the desired audio output fast enough between two boxes.
The first question here would be if the switching between two audio outputs on android is fast enough and the music doesnt stop streaming?
Secondly we have to determine if the switching can happen fast enough for us to dont hear any skips.

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.

How to route audio to non default sound card on Android for specific usecase?

I'm working on custom board running Android 4.2.1. I have almost all things working except of proper audio routing.
I have an audio codec there (WM8960 connected in I2S bus) and it works well servicing speakers, built-in microphone, headphones and headphones-mic. The HAL is implemented through tinyAlsa in audio_hw.c like usual and works perfectly in whole system.
There is also second audio device (actually a USB sound card) with GSM modem audio connected. It is detected by ALSA without problems and I can use it on kernel level using aplay/arecord.
Now I need to set proper routing when an audio call is established -- that means that I have to play the sound from microphone to second audio device and vice versa. Can please someone give me an advice or example how to handle this using tinyAlsa API?
regards
Jan
I think you can solve this problem in Audio HAL.
Assuming second audio device you meant is second audio card
When a call usecase is detected, change the playback sound card to the second audio card.
i.e if
Card0 - WM8960;
Card1 - USB sound card
change card number in pcm_open API
pcm_open(0, ..) change to
pcm_open(1, ..)
you might also need to set corresponding mixer commands before invoking pcm_open.

Recording audio from many source/microphones

I'm curious if it's possible to record audio from many sources and if not, what's the limitation.
Many current devices have two internal microphones (basically for noise reduction). On top of that it's possible to plug additional external one using audiojack. You can as well have another audio stream via bluetooth headset.
You are allowed to specify AudioSource in android but is it possible to do recording from many sources at the same time? I'm also interested how the situation look like on the iOS devices.

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