*** Idea ... Using the NDK native audio interfaces should solve this problem?
On 16 mar, 22:26, Gabriel Simões <gsim...@gmail.com> wrote: > News, but no good news... > > I´ve tried the source code above on another machine running the sdk > 2.1, an AVD with default parameters plus audio record and audio > playback capabilities, another operational system (linux), etc. > The results? the same we had before .... audio delay (long delay), > chopping, distortion and a metalic voice. > > I can not believe nobody here in this forum hasn´t been able to > develop any app that can record from the microfone using AudioRecord. > Also, anyone here hasn´t even made a loop back from microfone to line > out to check the audio being recorded? > > Please, c´mon guys ... this is not a commercial secret, this won´t > increase competition, and I really can´t see any other reasons not to > see some posts from developers who work with audio or other signal > processing using Android. > > Please, show us a way to go because I´ve tried almost all the > possibilities here (the only one left is to try using a real device) > and revising the code I can´t find what else it could be. > > *Obs: once again, a program with a thread only to read from > AudioRecord and play with AudioTrack is giving warnings about buffer > overflows (Audio Record). There´s no processing going on and since I > haven´t found anything related to "AudioTrack.play() blocks until the > audio stream is played", based on it´s actuall behavior in my app I can > ´t see how this class could be useful > for online audio processing applications. > > Thank you, > Gabriel > > On 15 mar, 20:53, Gabriel Simões <gsim...@gmail.com> wrote: > > > > > Well, just to try I´ve downloaded the SDK 1.6 (v. 4), created a new > > AVD based on that and then tried the source code from the first post > > in two different situations: > > > - App compiled using SDK 1.6 on an AVD running 1.6 > > - App compiled using SDK 1.6 on an AVD running 2.1 > > > Had exactly the same results as "compiling" and running on 2.1: audio > > chopping, distortion and artfacts even if I solo the microfone input > > level (using a 1 second buffer, sometimes the audio decays in a lot > > longer) and AudioRecord buffer overflow messages even if all I do in > > the thread is to read from AudioRecord and to play using AudioTrack. > > > Tomorrow I will try to test my code using another computer and even > > on > > a real device. In the mean time, any other ideas? > > > Gabriel > > > On 15 mar, 01:31, HeHe <cnm...@gmail.com> wrote: > > > > no chopping, likely because my computer (Core2 E8400) is lightening > > > fast. > > > > my AudioRecord.read() returns a value equal to my buffer size, too. > > > > however, it returns recorded samples in a speed "faster than 8khz", > > > which makes later playback sound like my voice is slowed. > > > > again, the same code works correctly on 1.5 emulator. > > > > so, seems your problem is not the same as mine :( > > > > On Mar 14, 6:53 pm, Gabriel Simões <gsim...@gmail.com> wrote: > > > > > Audio chopping also? > > > > Could you please test the code above? > > > > > I´ve checked and AudioRecord.read() returns a value equal to my buffer > > > > size. Based on that I understand that AudioRecord.read() blocks the > > > > execution, waits for the buffer to get a number of samples at least > > > > equal to the buffer size and then it returns the audio stream (older > > > > "buffer size" number of samples in the AudioRecord internal buffer). > > > > > On 14 mar, 22:34, HeHe <cnm...@gmail.com> wrote: > > > > > > seems i am experiencing similar issue as you > > > > > r.http://groups.google.com/group/android-developers/browse_thread/threa... > > > > > > without any single line of code modification to my app, the count of > > > > > frames recorded by app running on sdk 1.6 emulator is significantly > > > > > more than that recorded by the same app running on sdk 1.5 emulator. > > > > > > however, the same app runs equally well on both 1.5/1.6 emulators. > > > > > > it is weird..... > > > > > > On Mar 14, 3:00 pm, Gabriel Simões <gsim...@gmail.com> wrote: > > > > > > > Hello, > > > > > > > Since my day 1 I´ve been facing problems with Android AudioRecord > > > > > > API. > > > > > > After a lot of research and a lot more trial and error I´ve found my > > > > > > way into the code and was able to write an asynctask for audio > > > > > > streams > > > > > > recording which encapsules most of the audiorecord and asynctask > > > > > > features as a lib, so the developers doesn´t need to worry about > > > > > > finding the best audio parameters, work on stop and release, etc. > > > > > > So far, everything was right. > > > > > > Yesterday I started trying to process the audio I got from the > > > > > > microfone input and my code was reacting bad. I revisited it many > > > > > > times and decided then to check the audio I was getting from the > > > > > > mic. > > > > > > Created in instance of AudioTrack and tried to play it back. The > > > > > > sound > > > > > > was horrible, with lots of chopping, lots of distortion and giving > > > > > > me > > > > > > even the sensation of low samplerate playback (a single word spoken > > > > > > sometimes lasted for seconds on the earphone). > > > > > > To check if it was actually my code I went for the internet and > > > > > > found > > > > > > the code above. Tried it and got the same results. The only thing > > > > > > that > > > > > > comes to my mind actually is that, it doesn´t matter what I do and > > > > > > the > > > > > > configuration I try, I always get the buffer overflow message. Even > > > > > > if > > > > > > I don´t actually do anything but read from AudioRecord and write to > > > > > > AudioTrack (example above, and not in debug mode). If the emulator > > > > > > can > > > > > > ´t do it fast enought .... then I´m completly lost here. > > > > > > > Based on the output of my algorithm I think the audio streams I´m > > > > > > reading are not right. > > > > > > > Have anyone faced this? does anyone know how to solve it? Could > > > > > > anyone > > > > > > try the code (copy and paste) and check if it´s actually my computer > > > > > > or my emulator? > > > > > > > package com.example.test; > > > > > > > import android.app.Activity; > > > > > > import android.content.Context; > > > > > > import android.media.AudioFormat; > > > > > > import android.media.AudioManager; > > > > > > import android.media.AudioRecord; > > > > > > import android.media.AudioTrack; > > > > > > import android.media.MediaRecorder; > > > > > > import android.os.Bundle; > > > > > > > public class test extends Activity { > > > > > > > boolean isRecording; //currently not used > > > > > > AudioManager am; > > > > > > > /** Called when the activity is first created. */ > > > > > > �...@override > > > > > > public void onCreate(Bundle savedInstanceState) { > > > > > > super.onCreate(savedInstanceState); > > > > > > setContentView(R.layout.main); > > > > > > am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); > > > > > > Record record = new Record(); > > > > > > record.run(); > > > > > > > } > > > > > > > public class Record extends Thread > > > > > > { > > > > > > // SoundPower sndPower = new SoundPower(); > > > > > > > static final int bufferSize = 200000; > > > > > > final short[] buffer = new short[bufferSize]; > > > > > > short[] readBuffer = new short[bufferSize]; > > > > > > > public void run() { > > > > > > isRecording = true; > > > > > > android.os.Process.setThreadPriority > > > > > > (android.os.Process.THREAD_PRIORITY_URGENT_AUDIO); > > > > > > > int buffersize = AudioRecord.getMinBufferSize(8000, > > > > > > AudioFormat.CHANNEL_CONFIGURATION_MONO, > > > > > > AudioFormat.ENCODING_PCM_16BIT); > > > > > > buffersize = 2048; > > > > > > > AudioRecord arec = new > > > > > > AudioRecord(MediaRecorder.AudioSource.MIC, > > > > > > 8000, > > > > > > > AudioFormat.CHANNEL_CONFIGURATION_MONO, > > > > > > > AudioFormat.ENCODING_PCM_16BIT, > > > > > > buffersize); > > > > > > > AudioTrack atrack = new > > > > > > AudioTrack(AudioManager.STREAM_VOICE_CALL, > > > > > > 8000, > > > > > > > AudioFormat.CHANNEL_CONFIGURATION_MONO, > > > > > > > AudioFormat.ENCODING_PCM_16BIT, > > > > > > buffersize, > > > > > > > AudioTrack.MODE_STREAM); > > > > > > > atrack.setPlaybackRate(8000); > > > > > > > byte[] buffer = new byte[buffersize]; > > > > > > arec.startRecording(); > > > > > > atrack.play(); > > > > > > > while(isRecording) { > > > > > > arec.read(buffer, 0, > > > > > > buffersize); > > > > > > atrack.write(buffer, 0, > > > > > > buffer.length); > > > > > > } > > > > > > > arec.stop(); > > > > > > atrack.stop(); > > > > > > isRecording = false; > > > > > > } > > > > > > } > > > > > > > } > > > > > > > This code is not mine. I´ve just cut and replaced some values (as > > > > > > the > > > > > > SampleRate) so it would work. > > > > > > > My specs: > > > > > > > AndroidOS 2.1, last emulator and package (downloaded one week ago). > > > > > > Dell Vostro 1000 (onboard soundcard), windows XP SP3. > > > > > > > Thank you very much, > > > > > > Gabriel Simões- Ocultar texto das mensagens anteriores - > > > > > > - Mostrar texto das mensagens anteriores -- Ocultar texto- Ocultar > > > > > texto das mensagens anteriores - > > - Mostrar texto das mensagens anteriores -... > > mais » -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en