Excellent news!


On Tue, Feb 9, 2016 at 6:24 PM, 'RLScott' via Android Developers <
[email protected]> wrote:

> Well if that don't beat all!  It worked!  I just replaced
> MediaRecorder.AudioSource.MIC with
> MediaRecorder.AudioSource.VOICE_RECOGNITION in my "new AudioRecord(...)"
> and now the artifacts around 4000 Hz are gone.  I can sweep a tone above
> and below 4kHz and all I get is one nice peak in the FFT.  Thanks a lot for
> the suggestion.  Now I just need to test and see if my app will suffer due
> to the loss AGC.
>
> -Robert Scott
>  Hopkins, MN
>
> On Tuesday, February 9, 2016 at 5:29:00 PM UTC-6, Julian Bunn wrote:
>>
>> I think that you should perhaps use the VOICE_RECOGNITION stream which is
>> *supposed* to be devoid of filtering and AGC etc..
>>
>>
>> http://developer.android.com/reference/android/media/MediaRecorder.AudioSource.html#VOICE_RECOGNITION
>>
>> It's possible to select which Mic is being used, too. (My app offers a
>> choice between "FRONT" and "Main" mics - the Front one is typically next to
>> the front facing camera lens, and makes sense for video ...)
>>
>>
>>
>> On Tue, Feb 9, 2016 at 1:19 PM, 'RLScott' via Android Developers <
>> [email protected]> wrote:
>>
>>> No, I don't know anything about the "VOICE_RECOGNITION" mic stream.  I
>>> am just using the standard audio input stream set up with the code I posted
>>> earlier.  However someone in a DSP forum told me that the LG G3 has two
>>> mics, one in front and one in back, and they do some DSP with those two
>>> data streams to realize noise cancellation.  This might be some artifact of
>>> that operation.
>>>
>>> -Robert Scott
>>>  Hopkins, MN
>>>
>>> On Tuesday, February 9, 2016 at 1:20:12 PM UTC-6, Julian Bunn wrote:
>>>>
>>>> That is very curious! Are you using the "VOICE_RECOGNITION" mic stream?
>>>> I'm wondering if there is some sort of odd DSP filtering being applied in
>>>> the firmware.
>>>>
>>>> On Tue, Feb 9, 2016 at 8:59 AM, 'RLScott' via Android Developers <
>>>> [email protected]> wrote:
>>>>
>>>>> OK, I finally got myself a cheap LG G3 from eBay and did some
>>>>> testing.  The situation is not exactly as I described before.  Here is 
>>>>> what
>>>>> is really happening.  I tested my app with a sine-wave tone generator.
>>>>>
>>>>> When the tone generator is below about 3700 Hz, the spectrum displayed
>>>>> in my app shows just one peak at the desired frequency.  As the frequency
>>>>> of the tone generator increases toward 4000 Hz, a very tiny mirror image
>>>>> peak begins to appear on the other side of 4000 Hz.  It gradually gains in
>>>>> amplitude until by 3958 Hz, the amplitude of the image peak is actually a
>>>>> bit higher than the peak at the correct frequency.  As the tone goes above
>>>>> 4000 Hz, the image peak appears below 4000 Hz, and gradually decreases in
>>>>> amplitude as the tone frequency increases.  I ran the tone frequency up to
>>>>> 4698 Hz and saw a single peak at 4698 Hz in the spectrum and no image
>>>>> peak.  This entirely destroys my supposition that this phone is initially
>>>>> sampling at 8000 Hz and then up-sampling to 44100, because if it were,
>>>>> there would be no way to show a single peak at 4698 Hz with no image peak,
>>>>> right?  I mean, the information that discriminates between 4698 and 3302 
>>>>> is
>>>>> totally destroyed if the audio is initially sampled at 8000 Hz.
>>>>>
>>>>> But something is going on in the phone's audio system that introduces
>>>>> this image around 4000 Hz.  Could it be some sort of hetrodyning?  I know
>>>>> in single sideband radio there are ways to invert the audio spectrum if 
>>>>> the
>>>>> detection carrier is set on the wrong side of the signal.  But why would
>>>>> things return to normal for tones well away from 4000 Hz?
>>>>>
>>>>> -Robert Scott
>>>>> Hopkins, MN
>>>>>
>>>>>
>>>>> On Tuesday, February 2, 2016 at 12:41:32 PM UTC-6, Julian Bunn wrote:
>>>>>>
>>>>>> Perhaps you can post your code, and we can take a look to see if we
>>>>>> see anything that might be causing this problem? Otherwise, if it really 
>>>>>> is
>>>>>> a firmware "feature" in those two devices, I don't see any good
>>>>>> alternatives other than a) marking your APK as incompatible with those
>>>>>> devices in Google Play, or b) doing some DSP in your software to detect 
>>>>>> the
>>>>>> condition and work around it somehow. If it were me, I would obtain a G3
>>>>>> and start testing ...
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Tue, Feb 2, 2016 at 6:08 AM, 'RLScott' via Android Developers <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> The theory says if the initial hardware sampling is done at 8000
>>>>>>> samples per second, the aliasing is already "frozen" into the sampled 
>>>>>>> data.
>>>>>>> You can see that by observing that 4100 Hz and 3900 Hz look exactly the
>>>>>>> same - produce exactly the same samples - after they are sampled at 8000
>>>>>>> samples per second.  No amount of digital signal processing after that
>>>>>>> point can distinguish the two cases, so the aliasing in the up-sampled 
>>>>>>> FFT
>>>>>>> is inevitable, with or without windowing.
>>>>>>>
>>>>>>> I may yet get a G3 on Ebay as you say, but I was hoping for some
>>>>>>> independent confirmation of this problem with a codebase that had 
>>>>>>> nothing
>>>>>>> in common with my code, in case there is something I am doing in the 
>>>>>>> code
>>>>>>> that is making the difference.  So if you have an app that processes 
>>>>>>> sound
>>>>>>> and can detect frequency content above 4000 Hz, just have someone with 
>>>>>>> one
>>>>>>> of these failing devices go to piano and play the highest "B".  That is
>>>>>>> usually about 4019 Hz.  If the device is failing as I predict, there 
>>>>>>> should
>>>>>>> also be an indication of a tone at 3981 Hz.
>>>>>>>
>>>>>>> Robert Scott
>>>>>>> Hopkins, MN
>>>>>>>
>>>>>>> On Sunday, January 31, 2016 at 1:39:58 PM UTC-6, Julian Bunn wrote:
>>>>>>>
>>>>>>>> If you are only getting 8000 sps then even with interpolation to
>>>>>>>> 44100 you would never see any signal above 4000Hz in an FFT, right? 
>>>>>>>> Are you
>>>>>>>> windowing the FFT?
>>>>>>>>
>>>>>>>> If there are truly problems like this with the audio firmware on
>>>>>>>> the LG G3 and Nexus 7, I haven't heard any reports from my users about
>>>>>>>> them. That's not to say there can't be an issue, of course :-) If I 
>>>>>>>> were
>>>>>>>> you, I would obtain a cheap used G3 on Ebay to test with.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Saturday, January 30, 2016 at 6:13:08 PM UTC-8, RLScott wrote:
>>>>>>>>>
>>>>>>>>> But are you sure you are getting the sample rate you asked for?
>>>>>>>>> How would you know?  As you can see from my very first posting, all 
>>>>>>>>> the
>>>>>>>>> checks you are doing here work fine for me too, and I actually do get 
>>>>>>>>> the
>>>>>>>>> number of samples per second I ask for.  But they are not true 
>>>>>>>>> samples.
>>>>>>>>> They have been faked by up-sampling. The system takes 8000 samples per
>>>>>>>>> second and then duplicates each sample enough times to make up 44100 
>>>>>>>>> or
>>>>>>>>> 22050 or whatever.  But I know those samples are not true samples 
>>>>>>>>> because I
>>>>>>>>> see aliasing around 4000 Hz in the frequency spectrum.  Unless you
>>>>>>>>> specifically look for this problem by testing with a pure tone above 
>>>>>>>>> 4000
>>>>>>>>> Hz and analyze with an FFT and look for aliasing below 4000 Hz, 
>>>>>>>>> everything
>>>>>>>>> will appear fine.  Again this only happens on a very few models -
>>>>>>>>> specifically the LG G3 and the Asus Nexus 7.
>>>>>>>>>
>>>>>>>>> On Wednesday, January 27, 2016 at 10:57:45 AM UTC-6, Julian Bunn
>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>> Yes, that looks fine to me ... In case it helps, here is a
>>>>>>>>>> snippet of what I do to check a samplerate is going to work:
>>>>>>>>>>
>>>>>>>>>> minBuffer = AudioRecord
>>>>>>>>>>       .getMinBufferSize(rate, config, encoding);
>>>>>>>>>> if (minBuffer != AudioRecord.ERROR_BAD_VALUE
>>>>>>>>>>       && minBuffer != AudioRecord.ERROR) {
>>>>>>>>>>    boolean bGood = true;
>>>>>>>>>>    try {
>>>>>>>>>>       audio = new AudioRecord(audioSource, rate, config,
>>>>>>>>>>             encoding, minBuffer);
>>>>>>>>>>       int istate = audio.getState();
>>>>>>>>>>       if (istate != AudioRecord.STATE_INITIALIZED)
>>>>>>>>>>          bGood = false;
>>>>>>>>>>    } catch (Exception e) {
>>>>>>>>>>       bGood = false;
>>>>>>>>>>    }
>>>>>>>>>>    audio.release();
>>>>>>>>>>    audio = null;
>>>>>>>>>>    if (bGood)
>>>>>>>>>>       return rate;
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Tuesday, January 26, 2016 at 12:49:46 PM UTC-8, RLScott wrote:
>>>>>>>>>>>
>>>>>>>>>>> I am calling
>>>>>>>>>>> AudioRecord.getMinBufferSize(44100,AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT)
>>>>>>>>>>> and using the returned minAudioRecordBufSize in
>>>>>>>>>>>
>>>>>>>>>>>   new AudioRecord(MediaRecorder.AudioSource.MIC,
>>>>>>>>>>>                     44100,AudioFormat.CHANNEL_IN_MONO,
>>>>>>>>>>>                    AudioFormat.ENCODING_PCM_16BIT,
>>>>>>>>>>> minAudioRecordBufSize);
>>>>>>>>>>>
>>>>>>>>>>> Is that sizing the buffers correctly?
>>>>>>>>>>>
>>>>>>>>>>> Thanks for the offer for the enumeration app, but I do not have
>>>>>>>>>>> a failing device at my disposal.  Only a few devices are failing, 
>>>>>>>>>>> and they
>>>>>>>>>>> are all owned by my customers.  I can't ask too much of them in the 
>>>>>>>>>>> way of
>>>>>>>>>>> debugging help.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Friday, January 15, 2016 at 1:34:15 AM UTC-6, Julian Bunn
>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> Make sure you are sizing the buffers correctly i.e. respecting
>>>>>>>>>>>> the minimum recording buffer size (in bytes) required. If you 
>>>>>>>>>>>> don't then I
>>>>>>>>>>>> believe the system will drop you down to 8kHz sample rate, which 
>>>>>>>>>>>> is what
>>>>>>>>>>>> you are seeing (I think?).
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Wednesday, December 23, 2015 at 9:52:37 AM UTC-8, Robert
>>>>>>>>>>>> Scott wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>> I first call *AudioRecord.getMinBufferSize(22050...*  If this
>>>>>>>>>>>>> returns an error (<1) then I call
>>>>>>>>>>>>> *AudioRecord.getMinBufferSize(44100...*  Whichever one of
>>>>>>>>>>>>> these calls succeeds, I use that rate in my call to "*new
>>>>>>>>>>>>> AudioRecord(..,sampleRate..)*"
>>>>>>>>>>>>>
>>>>>>>>>>>>> I don't actually have one of these misbehaving devices, so my
>>>>>>>>>>>>> experiments so far have been with the help of my customers.
>>>>>>>>>>>>>
>>>>>>>>>>>>> -Robert Scott
>>>>>>>>>>>>>  Hopkins, MN
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>> You received this message because you are subscribed to a topic in
>>>>>>> the Google Groups "Android Developers" group.
>>>>>>> To unsubscribe from this topic, visit
>>>>>>> https://groups.google.com/d/topic/android-developers/4yG4_Gw4Ilc/unsubscribe
>>>>>>> .
>>>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>>>> [email protected].
>>>>>>> To post to this group, send email to [email protected].
>>>>>>> Visit this group at
>>>>>>> https://groups.google.com/group/android-developers.
>>>>>>> To view this discussion on the web visit
>>>>>>> https://groups.google.com/d/msgid/android-developers/6b7520f2-8376-4f1c-9f84-8f7f310846ae%40googlegroups.com
>>>>>>> <https://groups.google.com/d/msgid/android-developers/6b7520f2-8376-4f1c-9f84-8f7f310846ae%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>> .
>>>>>>>
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>
>>>>>> --
>>>>> You received this message because you are subscribed to a topic in the
>>>>> Google Groups "Android Developers" group.
>>>>> To unsubscribe from this topic, visit
>>>>> https://groups.google.com/d/topic/android-developers/4yG4_Gw4Ilc/unsubscribe
>>>>> .
>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>> [email protected].
>>>>> To post to this group, send email to [email protected].
>>>>> Visit this group at https://groups.google.com/group/android-developers
>>>>> .
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/android-developers/ecdce8c1-e5a8-463d-a9f6-6852749e6c34%40googlegroups.com
>>>>> <https://groups.google.com/d/msgid/android-developers/ecdce8c1-e5a8-463d-a9f6-6852749e6c34%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>> --
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "Android Developers" group.
>>> To unsubscribe from this topic, visit
>>> https://groups.google.com/d/topic/android-developers/4yG4_Gw4Ilc/unsubscribe
>>> .
>>> To unsubscribe from this group and all its topics, send an email to
>>> [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at https://groups.google.com/group/android-developers.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/android-developers/c5530388-6a11-4e52-890e-94ae55dd7a78%40googlegroups.com
>>> <https://groups.google.com/d/msgid/android-developers/c5530388-6a11-4e52-890e-94ae55dd7a78%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>> --
> You received this message because you are subscribed to a topic in the
> Google Groups "Android Developers" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/android-developers/4yG4_Gw4Ilc/unsubscribe
> .
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/android-developers.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/android-developers/924669ef-e48e-48a1-90f4-b069bfc029cb%40googlegroups.com
> <https://groups.google.com/d/msgid/android-developers/924669ef-e48e-48a1-90f4-b069bfc029cb%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/android-developers.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/android-developers/CAAxkZQtdTfiBQZO%3D5VEE2T_f%2Bw%2BaW8yRDBru6t5791LwxF1T2Q%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to