Emission d'un son et analyse du spectre en temps réel
Salut à tous,
Dans le cadre du développement d'une application sous Android Studio (dans le lequel je débute), j'aurais besoin d'emettre un son avec une fréquence donnée et en même temps écouter cette fréquence pour retrouver mon son.
Emission du son :
Code:
1 2 3 4
|
AudioManager mgr;
AudioTrack audioTrack;
int volumeActuel; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
int duration = 1; // seconds
int sampleRate = 44100;
int numSamples = duration * sampleRate;
double sample[] = new double[numSamples];
double freqOfTone = 3000; // hz
for (int i = 0; i < numSamples; ++i) {
sample[i] = Math.sin(2 * Math.PI * i / (sampleRate/freqOfTone));
}
byte generatedSnd[] = new byte[2 * numSamples];
int idx = 0;
for (final double dVal : sample) {
// scale to maximum amplitude
final short val = (short) ((dVal * 32767));
// in 16 bit wav PCM, first byte is the low order byte
generatedSnd[idx++] = (byte) (val & 0x00ff);
generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8);
}
mgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
volumeActuel = mgr.getStreamVolume(AudioManager.STREAM_VOICE_CALL);
mgr.setStreamVolume(AudioManager.STREAM_VOICE_CALL, 15, 0);
//mgr.setRouting(AudioManager.MODE_NORMAL, AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL);
mgr.setMode(AudioManager.MODE_IN_CALL);
mgr.setSpeakerphoneOn(false);
audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,
sampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, numSamples,
AudioTrack.MODE_STATIC);
audioTrack.write(generatedSnd, 0, generatedSnd.length);
audioTrack.play();
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
mgr.setStreamVolume(AudioManager.STREAM_VOICE_CALL, volumeActuel, 0);
audioTrack.stop();
audioTrack.release();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start(); |
Pour écouter j'ai trouvé différents tutos et codes avec AudioRecord ou AudioProcessing et FFT, mais je n'arrive pas à bien les exploiter correctement. Surtout je n'arrive pas à écouter seulement la fréquence voulu...
Pour ceux qui maîtrisent bien ce sujet, pourriez-vous m'aider svp ?
Merci d'avance :)