Salve,avrei un problema. Sto sviluppando un'app per lo studio della musica,ora ovviamente in quest'app è previsto che le note vengano suonate ma fin dall'inizio ho riscontrato diversi problemi nella gestione del sistema. L'ultimo riscontrato,è che alcuni dispositivi rallentano (parlo di dispositivi molto economici,cira 100 euro e per lo più tablet)quando devono preparare il suono nonostante il caricamento venisse inizialmente effettuato su un thread separato.
Quindi ho provato a caricare tutto PRIMA,ma ora incorro in un problema differente ossia in maniera del tutto casuale,spesso non riproduce i suoni. Cercando su internet ho scoperto che è perchè i suoni non vengono preparati,ma il comando che ho utilizzato io dovrebbe avere la suo interno "prepare" essenodo questi suoni già memorizzati nella cartella RAW che viene compilata insieme a tutto il resto
codice:
package org.altervista.xsparter.www.test;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.media.AudioManager;
import android.media.MediaPlayer;

import java.util.Arrays;

/**
 * Created by Domenico on 03/08/2015.
 */

public class actionview extends Activity {
public String[] siglenoteamericane = {"C0", "D0", "E0", "F0", "G0", "A0", "B0", "C1", "D1", "E1", "F1", "G1", "A1", "B1", "C2", "D2", "E2", "F2", "G2", "A2", "B2", "C3", "D3", "E3", "F3", "G3", "A3", "B3", "C4", "D4", "E4", "F4", "G4", "A4", "B4", "C5", "D5", "E5", "F5", "G5", "A5", "B5", "C6", "D6", "E6", "F6", "G6", "A6", "B6", "C7", "D7", "E7", "F7", "G7", "A7", "B7", "C8"};
    public boolean preparaiton = false;
    public void preparesound(Context context){
for(int i = 0;i < 50;i++){
Resources res = context.getResources();
             int soundId = res.getIdentifier(siglenoteamericane[i].toLowerCase(), "raw", context.getPackageName());
            variableplaying.Mediaplayersound[i] = MediaPlayer.create(context,soundId);
            variableplaying.Mediaplayersound[i].setAudioStreamType(AudioManager.STREAM_MUSIC);
            variableplaying.Mediaplayersound[i].setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
variableplaying.action = null;
                }
            });
        }
    }
public void getSound(String nota) {
int position = Arrays.asList(siglenoteamericane).indexOf(nota);
        if(variableplaying.action != null){
int positionram = Arrays.asList(siglenoteamericane).indexOf(variableplaying.action);
            variableplaying.Mediaplayersound[positionram].pause();
            variableplaying.Mediaplayersound[positionram].stop();
            System.err.println("altro suono rilevato,in cancellazione");
        }
variableplaying.action = nota;
        System.err.println("Nota da richiamare: " + position);
        variableplaying.Mediaplayersound[position].start();



    }

}
il comando "prepraresound" covrebbe occuparsi di caricare i vari suoni,e quest'operazione vene effettuata dalla classe principale con il relativo contesto,e fin qui tutto ok. Il problema sta con "getsound" che appunto,spesos mi ritorna quell'errore lì.
Le variabili le memorizzo nella classe "variableplaying" che potete trovare sotto.

codice:
package org.altervista.xsparter.www.test;

import android.media.MediaPlayer;

/**
 * Created by domen on 09/08/2015.
 */
public class variableplaying {
public static boolean isplaying = false;
    public static boolean setplay = false;
    public static String action = null;
    public static MediaPlayer[] Mediaplayersound = new MediaPlayer[50];
}