FORUMS
Remove All Ads from XDA

[01/10] [DEV] [FIXED] Low Speakerphone Mic Gain & High Background Noise ONE CLICK FIX

907 posts
Thanks Meter: 204
 
By memin1857, Senior Member on 10th July 2011, 10:46 AM
Post Reply Email Thread

01/10 Update: New Tytung R12.4 Kernel is attached at the bottom. initrd.gz is removed so you can use it with your magldr + cm7/miui/aosp rom. THIS IS ALL THAT IS NEEDED FOR MIC GAIN AND VOICE ECHO FIX.

---------older stuff ------------

Flash THIS FILE from CWM Recovery. (For MAGLDR AOSP, CM7 and MIUI ROMS. NOT for SENSE ROMS) This contains the tytung r12beta1 kernel.
More information: http://forum.xda-developers.com/show...&postcount=268

For sense roms check post 308:
http://forum.xda-developers.com/show...&postcount=308
Check the libaudio.so & acdb file information below. Also you may need to copy default.acdb as htcleo.acdb because current version of sense kernel may bootloop without it.

For MIUI if there is miui_default.acdb exists in/etc/firmware, you should overwrite it with the default.acdb version below.

VOICE ECHO:If the "remote" party have echo reduce "your in-call" volume with the side vol keys on your hd2.
More info: http://forum.xda-developers.com/show...&postcount=279

Please check this post, try the acdb file there and give feedback here please whether it fixes echo or not:
http://forum.xda-developers.com/show...&postcount=330


ALWAYS MAKE A FULL BACKUP FROM CWM, JUST IN CASE!
Thanks to mdebeljuh and jdivic for fixing the kernel code and tytung for releasing a new version of his kernel with the new code and all the others I forgot to mention.


HD2 MIC CONTROL APP:This app can easily adjust mic gain in realtime inside a call and also set it permanently. Get it FROM MARKET.Thanks to windroidHD



For CLK, try this: http://forum.xda-developers.com/show...&postcount=278



IF YOU DON'T HAVE ENOUGH GAIN EVEN WITH 400 GAIN CHECK THE TWO FILES BELOW. YOU SHOULD HAVE ENOUGH VOICE VOLUME AT THE REMOTE SIDE WITH 400 GAIN!

-----ANYTHING BELOW IS FOR THE CURIOUS OR FOR DEVELOPMENT-----


libaudio.so
[B]This fix is libaudio.so dependent! It is known not to work with "older" drizztje libaudio.so. Working one is THIS. I think this is the iamgpc version. You may get bizzare force closes or slowdowns with "older" drizztje libaudio. The included iamgpc version has robot voice fix and volume level fix, so it works well. New compatible libaudio is included with tytung r12.3 kernel, see above.

default.acdb
This fix includes 122,442 bytes (119,57K) default.acdb. Other sizes may or may not work well, THIS one works. It is from the aosp 2.3.4 nexushd2 rom. It seems 2.3.5 has different acdb file.
It is possible that the 122,442 bytes default.acdb file may be causing voice echo. Try the one below, if there is enough feedback I will update the update zip files.
Alternative ACDB file:
Please check this post, try the acdb file there and give feedback here please whether it fixes echo or not:
http://forum.xda-developers.com/show...&postcount=330


KERNEL DEVELOPERS:
- Here is the "latest" diff file: diff_mic_gain.txt
- Please make sure your kernel code ignores htcleo.acdb. The diff does not have the code to ignore htcleo.acdb. Chefs, you can also just rename/delete htcleo.acdb
- You MUST include the above iamgpc libaudio.so and default.acdb along with 10mic_level script in your kernel zip update file.

HOW IT WORKS:
The new kernel code adjusts mic gain levels from /proc/mic_level
Use a Terminal Emulator or Gscript with the below commands to set gain in REALTIME (even while inside a call)
You can also use the HD2 MIC CONTROL app in Market for easier adjusting.

To set normal mode (handset) gain:
echo '0 350' > /proc/mic_level

To set speakerphone mode gain:
echo '1 600' > /proc/mic_level

More than 600 gives background noise, less than 200 is too quiet.

If you want to set the levels permanently, edit the mic_level init script in /etc/init.d

LeTama's previous method of fixing the high background noise (caused by extreme mic gain) was modifying the acdb file with values from winmo. It worked well for the normal speaking but made speakerphone unusuable and overall audio playback low. Modifying acdb file is difficult, the above fix uses the default.acdb file and modify the values in realtime while inside a call.

While the post states FIXED, there is always room for tweaking or implementing better solutions. Currently the problem is fixed but can also be considered "under development"



----------Anything below is OLD STUFF----------


[B]28/08 EDIT: THE PROBLEM IS FIXED! Thanks to respected developers mdebeljuh and jdivic we are now able to set mic gain level for normal mode and speakerphone mode seperately.
THAT MEANS you will have crystal clear voice with no high background noise while doing normal talking AND you will have working speakerphone mode AND you will have properly high audio playback volume ALL AT THE SAME TIME.
I have tested the test kernel mdebeljuh sent me and I confirm it is working. There will be more testing with values, different roms and file versions.

THIS THREAD IS "NOT" SIMPLY JUST ABOUT HIGH BACKGROUND NOISE PROBLEM. It's already been fixed with LeTama's htcleo.acdb file (but it has side effects, check post 8) This thread is about MIC GAIN LEVELS BEING THE SAME between normal and speakerphone mode. (So you either have high background noise OR not usable speakerphone mode)

--------

Hello everyone,
THIS IS THE LAST "MAJOR" PROBLEM WITH THE HD2 ANDROID PROJECT. It is present in every rom available today.
Since this is almost a year of development, here is the description and history of the problem:

Description of the problem:
With LeTama's 113910 bytes htcleo.acdb file that is included in many roms: Everybody are getting complaints that people can't hear them properly when they are on speakerphone mode, I found out that if you enable speakerphone the mic does not get more sensitive. Normally android has to change mic gain when speakerphone is enabled. Mic gain levels are the same when normal talking, and in speakerphone mode. (I am talking about what volume the remote party hears your voice.

With no htcleo.acdb file or with android's default.acdb file or htcleo.acdb file that is not LeTama's. (same as the default default.acdb): This time the complaints are that the remote party hears too much background noice and can't understand the hd2 caller properly. This is because the mic gain is set to speakerphone levels even when in normal mode.

If you remove LeTama's htcleo.adcb in /etc/firmware (which forces android to use default.acdb instead) the mic becomes too sensitive in both normal and speakerphone mode.
WITH LeTama's htcleo.acdb present mic gain is normal in both normal and speakerphone mode.
WITHOUT LeTama's htcleo.acdb present mic gain high in both normal and speakerphone mode.
That means mic gain is either always in speakerphone mode or always in normal mode depending on acdb file used.
But actually mic gain has to be low in normal mode and high in speakerphone mode. This has to be fixed because you either can't use speakerphone or you get too much backgorund noise and people complain.
I tried with a samsung native android phone and with winmo hd2 and mic gain gets higher (mic gets more sensitive) when speakerphone is enabled. This is not about the speaker on your phone. It is about the microphone in your phone and its gain adjustment by android.

Some ROM chefs include LeTama's htcleo.acdb, some of them don't include any htcleo.acdb file, and some of them just make another copy of default default.acdb file as htcleo.acdb. All files are in /etc/firmware Android's original default.acdb file is 129346 bytes. I don't know if any other different size versions are available.

Here is how I test: I call another phone which I hold to my ear with my hd2. I mute mic of the phone in my ear and put hd2 on the table. I talk or have some audio in the background such as tv or I hit my fingernails on the table or something. I turn speakerphone on the hd2 on and off and see if what I hear on the other phone on my ear get higher or not. OR you can call someone and ask them of course

History:
Normally Android uses default.acdb for audio/mic gain levels. htcleo.acdb is made by LeTama and newer kernels first look for htcleo.acdb and if it is not found fallback to default.acdb. This was made because mic gain is unacceptably high and prevents proper conversation with hd2 android. So many modern hd2 android roms use htcleo.acdb But I don't think every hd2 android rom chef knows about this. File sizes should always be checked. There is also a htcleo.acdb file made by iamgpc (125868 bytes) but it is always in high mic gain mode so you can't talk properly with it. I do not know why he created it.

LeTama says: (Author of the htcleo.acdb file that enables proper understandable conversation, but not properly functioning speakerphone)
The way I did htcleo.acdb was quite complex:
- I patched kernel audio driver to:
1) kill acdb switches in audio driver to avoid interference while extracting values
2) expose a sysfs variable to userland with acdb values.

- I wrote a userspace tool that:
1) Parse a template android acdb to get android acdb channels/bitrates.
2) loops on all acdb entries and get associated winmo values with sysfs kernel variable.
2) reconstruct htcleo.acdb by merging channels/bitrates/values.

With all these, I boot android from haret on SD, get winmo values and generates the acdb with the tools.

As you can see, it's a bit tricky, I can provide you patches and source code, but it's a bit rough and patch is against an old kernel, not sure it will go smoothly.

If you want only to patch htcleo.acdb with android values for some channels, I'd suggest writing a specific tool for that, it's far more easier. The android acdb file structure is quite straightforward if you don't have to interpret audio values and just want to copy entries.

But first, you'll need to identify which entry is used when going speaker mode, you probably need to add few traces in kernel audio driver.
.............
Frankly, I don't know if this can be fixed from htcleo.acdb by adjusting the values, or does kernel need modification, it would require traces to see if the kernel is using same acdb entries or separated ones. If it's separated, you could get speaker mode entries from android and patch them into htcleo.acdb. If it's not, kernel modification is probably required.
.............
I have thought also about not enabling speakerphone once leading to missing data. It could be, however Cotulla told me that the acdb in winmo is initialized completely by spl, so values should be there. But who knows... Anyway, if you need advices on how to patch the acdb, let me know. I'll dig in my archive for the acdb rebuild userspace tool source, it could give you a good base to build a patch tool.

OP Note: LeTama doesn't have time for this matter, but he is willing to share what he did before.

iamgpc says:
MIC gain is not controlled by libaudio.so It is the part of kernel

-----------------
What needs to be done:
First we should find out if the kernel or the acdb file is the culprit. Does the LeTama's current acdb file have different gain values for normal and speakerphone, or are they the same? Does the kernel look for two different values for normal and speakerphone, or erraneously look for a single value?
What I think: Since the original default.acdb file comes with android and also does have equal levels with speakerphone and normal mode then I think current kernels must be wrongfully looking at the normal mode value for speakerphone?
Then fixing the kernel or acdb file whichever is needed.
I believe that finding where the speakerphone mic gain entry is in the acdb file and modifying the kernel code to make it look for this correct value for speakerphone mode, and using LeTama's htcleo.acdb file is the key. Better way would be disabling htcleo.acdb file in kernel and making kernel lower the value it reads from the default.acdb file when in normal mode. This way no rom chef knowledge would be required. (I am sure many chefs will forget/don't know the htcleo.acdb and use default.acdb file)
Note: I do not know if android has AGC (auto gain control) thing in kernel. It is possible that it is interfering with actual mic gain settings.
Unfortunately acdb file also affects audio playback volume, so while fixing background noise with LeTama's acdb file, you may be unhappy with the audio output volume, though it can be fixed with dsp manager or volume+ apps.
Note: LeTama's shared his tools on post 3.

The problem is fixed by mdebeljuh and jdivic. Check the opening sentences of this post.
Attached Files
File Type: zip kernel_tytung_r12.4_noinitrd_magldr.zip - [Click for QR Code] (3.17 MB, 3108 views)
The Following 45 Users Say Thank You to memin1857 For This Useful Post: [ View ] Gift memin1857 Ad-Free
 
 
10th July 2011, 10:57 AM |#2  
Senior Member
Thanks Meter: 38
 
More
For as long as I am using Android on my HD2, I suffer from high mic gain in normale mode (not speakerphone). This is really annoying, so I'd definitely love to see that last glitch to be fixed!
10th July 2011, 12:11 PM |#3  
Senior Member
Thanks Meter: 2,343
 
Donate to Me
More
Hi there!

Here are the files, I included the kernel patch and the resulting q6audio.c. The patch has other crap in it, the only modification required is in q6audio.c. It was against a very old kernel, I'm not sure you can use it "as-is".

You also have the user space tool source and my script to compile it.

To dump values, you have to flash a working WinMo 6.5 to have winmo values in memory and launch android with Haret .

To use it, compile the kernel with the modification. It will somehow kill your audio as it won't set acdb to be able to dump acdb in memory untouched. The userspace tools expect to find a pure android default.acdb in the directory where it's launched, it will query kernel values, and remap it to a proper htcleo.acdb in /sdcard/acdb_out.acdb.

Good luck!

LeTama
Attached Files
File Type: zip acdb_gen_kit.zip - [Click for QR Code] (18.0 KB, 1495 views)
The Following 11 Users Say Thank You to letama For This Useful Post: [ View ] Gift letama Ad-Free
10th July 2011, 03:44 PM |#4  
OP Senior Member
Flag Istanbul
Thanks Meter: 204
 
More
Thanks for the support LeTama

Sent from my HTC HD2 using XDA App
The Following User Says Thank You to memin1857 For This Useful Post: [ View ] Gift memin1857 Ad-Free
10th July 2011, 04:36 PM |#5  
codiak's Avatar
Senior Member
Thanks Meter: 141
 
More
+1 for this issue.
With or without htcleo file its way too loud.
Would love to have that fixed.
11th July 2011, 04:56 PM |#6  
OP Senior Member
Flag Istanbul
Thanks Meter: 204
 
More
This issue deserves more attention. Bump.
11th July 2011, 05:25 PM |#7  
shorty1483's Avatar
Senior Member
Thanks Meter: 389
 
More
+1

My wife's killing me after every call
The Following User Says Thank You to shorty1483 For This Useful Post: [ View ] Gift shorty1483 Ad-Free
11th July 2011, 06:50 PM |#8  
OP Senior Member
Flag Istanbul
Thanks Meter: 204
 
More
Guys, if you have the high mic gain problem that means your rom doesn't include "LeTama's" htcleo.acdb file. (113910 bytes, check the file size, your rom chef might have just copied original default.acdb as htcleo.acdb)
Just download the attachment below and extract it. Copy the htcleo.acdb file you just extracted to /etc/firmware with rootexplorer or similar file manager and reboot.
Your calls will be OK by then and people won't complain. But speakerphone mode will also be low gain from now on. But since most of the time you are calling in normal mode, it is better to have htcleo.acdb in /etc/firmware
Attached Files
File Type: zip htcleo.zip - [Click for QR Code] (5.0 KB, 1854 views)
The Following 7 Users Say Thank You to memin1857 For This Useful Post: [ View ] Gift memin1857 Ad-Free
11th July 2011, 07:13 PM |#9  
codiak's Avatar
Senior Member
Thanks Meter: 141
 
More
What about /system/etc/firmware? I saw this path in other threads about this problem?
I have that file in /etc/firmware and /system/etc/firmware but still mic is too loud.

Edit:
OK, overwrote your file with the existing one. Mic seems better now, thanks!
But for me, its still about 25% to loud

I am a bit curios... is this file in somehow involved in bluetooth playback or music output at all?
Trough all the testing I made the last days I am unsure if at least the bluetooth playback is a little bit worse now?
I would be glad if that were not confirmed

Thanks soooo much dude yeah.. love it. kool. i love ya =)
11th July 2011, 09:52 PM |#10  
OP Senior Member
Flag Istanbul
Thanks Meter: 204
 
More
I think /etc/firmware and /system/etc/firmware are the same.
I am not sure about bluetooth or audio playback. acdb may possibly affect it but can you try reverting back to see and give feedback?
We really need to make this thread attract attention.
The Following User Says Thank You to memin1857 For This Useful Post: [ View ] Gift memin1857 Ad-Free
11th July 2011, 10:00 PM |#11  
codiak's Avatar
Senior Member
Thanks Meter: 141
 
More
Its really hard to tell if you have to reboot your phone and have no real comparison.
I would need a second hd2
But more imported to me is that the mic is still about 25% too loud
Is there a way to tweak the file a bit more?
I have no programming knowledge.
Post Reply Subscribe to Thread

Guest Quick Reply (no urls or BBcode)
Message:
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes