Domanda

Ho cercato di generare una sinusoide utilizzando AudioTrack inizialmente. Il risultato non è stato soddisfacente. Poi mi sono trasferito alla classe Soundpool. Ho usato Audacity per creare audiofiles di 1 secondo e poi modificato la velocità di riproduzione (0,5-2,0) per ottenere le frequenze desiderate. (Array, come ci sono anche sega e wavefiles triangolo)

    sig10000[0]=soundPool01.load(context,R.raw.sine10000,1);
    sig2500[0]=soundPool01.load(context,R.raw.sine2500,1);
    sig625[0]=soundPool01.load(context,R.raw.sine625,1);
    sig157[0]=soundPool01.load(context,R.raw.sine156,1);
    sig40[0]=soundPool01.load(context,R.raw.sine40,1);

Ho poi, a seconda della frequenza scelta, riprodurre l'audio:

    public void play(){

    Signal s=null;
    float factor;
    for(int i=0;i<this.size();i++){
        s=this.get(i);
            if(s.getFreq()>4999){
                factor = s.getFreq()/10000f;
                s.setStreamID(soundPool01.play(sig10000[s.getWaveType()],.99f,.99f,0,-1,factor));                   
            }else if(s.getFreq()>1249){
                factor = s.getFreq()/2500f;
                s.setStreamID(soundPool01.play(sig2500[s.getWaveType()],.99f,.99f,0,-1,factor));
            }else if(s.getFreq()>312){
                factor = s.getFreq()/625f;
                s.setStreamID(soundPool01.play(sig625[s.getWaveType()],.99f,.99f,0,-1,factor));
            }else if(s.getFreq()>77){
                factor = s.getFreq()/156f;
                s.setStreamID(soundPool01.play(sig157[s.getWaveType()],.99f,.99f,0,-1,factor));
            }else {
                factor = s.getFreq()/40f;
                s.setStreamID(soundPool01.play(sig40[s.getWaveType()],.99f,.99f,0,-1,factor));
            }

    }
}

Ora come la vedo io, il metodo funziona bene, tranne per la gamma 5000-20000 Hz. Sto rompendo la testa su questo, non so perché non il suo lavoro e non riesco a trovare nessuna modelli al problema.

C'è qualche problema di fondo con questo metodo?

Ringraziando in anticipo

Modifica: "non funzionava spiegato" Quando gioco onde sinusoidali nella gamma 5000-20000 Hz è molto evidente che la frequenza è imprecisa. Questo significa che il passo è lontano. Per esempio. 19000 Hz è troppo bassa e facilmente rilevabile ad orecchio. Quello che posso dire è che 10000 Hz (come fa 5000Hz- mio errore), velocità di riproduzione in modo normale, è corretto. A circa 14 kHz l'intonazione del segnale non è più corretta.

Pensieri / Possibili cause (?): (A) Quanti passi ci sono per il playbackspeed (Soundpool)? La documentazione dice 0,5-2,0 E 'possibile che questo significa che ci si trova a 15 diversi playbackspeeds? (B) Ho usato Audacity per generare i file .ogg. Quando ho ingrandire il seno 10000Hz posso vedere che non è troppo liscia (frequenza di campionamento 44100) e l'onda non si avvia in modo preciso e fine a 0. Could segnali questa sovrapposizione indesiderati?

È stato utile?

Soluzione

La mia prima risposta è la fisica, non è la programmazione.

Ci sono poche possibilità che il dispositivo di prova avrà un altoparlante che è fisicamente in grado di produrre pulito uscita 19 Khz, come che è praticamente senza senso. Di conseguenza, esso produrrà altri, frequenze indesiderate se si tenta di guidare con un segnale 19 kHz campionato a 44 Khz.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top