Sto sviluppando un'applicazione Android. Voglio generare intervalli di suoni di frequenza tra 1KHz e 20KHz. c'è comunque la possibilità di generare suoni ad una frequenza specifica.Come generare una frequenza sonora particolare?
risposta
Ho trovato questo codice da un altro post SO. da quello che posso dire che è ancora un po 'bacato, ma dovrebbe fare il trucco.
public class PlaySound extends Activity {
// originally from http://marblemice.blogspot.com/2010/04/generate-and-play-tone-in-android.html
// and modified by Steve Pomeroy <[email protected]>
private final int duration = 3; // seconds
private final int sampleRate = 8000;
private final int numSamples = duration * sampleRate;
private final double sample[] = new double[numSamples];
private final double freqOfTone = 440; // hz
private final byte generatedSnd[] = new byte[2 * numSamples];
Handler handler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected void onResume() {
super.onResume();
// Use a new tread as this can take a while
final Thread thread = new Thread(new Runnable() {
public void run() {
genTone();
handler.post(new Runnable() {
public void run() {
playSound();
}
});
}
});
thread.start();
}
void genTone(){
// fill out the array
for (int i = 0; i < numSamples; ++i) {
sample[i] = Math.sin(2 * Math.PI * i/(sampleRate/freqOfTone));
}
// convert to 16 bit pcm sound array
// assumes the sample buffer is normalised.
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);
}
}
void playSound(){
final AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
sampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, numSamples,
AudioTrack.MODE_STATIC);
audioTrack.write(generatedSnd, 0, generatedSnd.length);
audioTrack.play();
}
}
Heh. Ho appena trovato la stessa cosa [qui] (http://marblemice.blogspot.com/2010/04/generate-and-play-tone-in-android.html). Presumibilmente il codice viene aggiornato a quel link per correggere i bug. –
Sì ma secondo i commenti ne ha ancora ... In ogni caso è un'ottima base. – Reid
C'è un problema con questo codice in quanto non riproduce nulla oltre i 17000Hz anche se si imposta sampleRate = 44100. Questi stessi algoritmi funzionano in Flash ad esempio e il telefono che sto utilizzando può riprodurre queste frequenze quando provengono dal file. Qualcuno sa come risolvere questo problema? – PSIXO
- 1. Come generare una tabella di frequenza in R con frequenza cumulativa e frequenza relativa
- 2. Come generare una tabella di frequenza bin in R?
- 3. ffmpeg: come assegnare una colonna sonora vuota a un video?
- 4. Generazione del suono di una particolare frequenza usando gcc in ubuntu?
- 5. come creare esclamazioni per una frase particolare
- 6. Come generare una permutazione?
- 7. Creare una matrice frequenza bimodale in R
- 8. Come generare una classe builder
- 9. Come specificare una particolare implementazione JAXB?
- 10. Mercuriale: come ripristinare una revisione particolare?
- 11. Livello di attività sonora dal microfono con javascript
- 12. Come accedere i valori in una tabella di frequenza
- 13. Huffman Tree con una determinata frequenza Confonde come iniziare? Java
- 14. Come spingere verso una matrice in una posizione particolare?
- 15. Come agganciare una funzione per una particolare libreria ELF condivisa?
- 16. Come rimuovere una sottostringa particolare da una stringa?
- 17. Come determinare se una classe Java implementa una particolare interfaccia
- 18. Come trovare una particolare classe su una pagina usando JQuery
- 19. Usa javascript per rilevare se un video MP4 ha una colonna sonora
- 20. Come generare JSON da una risorsa Jersey?
- 21. Come generare audio da una matrice numpy?
- 22. vi - come generare una sequenza numerica?
- 23. Come generare una griglia esagonale in R
- 24. Come generare una classe da un'interfaccia
- 25. Come generare una Jlist con colori alternati
- 26. Come generare una data casuale in Ruby?
- 27. Come posso generare una navigazione in Middleman?
- 28. Mostra metodi associati a una particolare classe
- 29. Rilevazione di frequenza Python
- 30. Frequenza delle variabili globali in python?
L'intervallo descritto non è ultrasonico. Cioè può ancora essere ascoltato. – Sjoerd
Solo nitpicking: ultrasuoni _startisti_ a 20KHz. Le frequenze nell'intervallo desiderato sono acustiche. –
@alextsc, se è in BlackBerry o in Java-ME, quindi anche la risposta è il benvenuto. – Android