Pfad (Path) zu einem Song in dem raw Ressourcenverzeichnis

  • Antworten:2
Georg C.
  • Forum-Beiträge: 235

25.02.2014, 22:54:54 via Website

Hallo,
ich möchte gerne, um die 15 ogg Songs (relativ klein [20 bis 40 kB]) jemals 1 mall abspielen. Die Sounds habe ich in dem raw Ordner (res/raw/) platziert.
Ob es mit der MediaPlayer oder SoundPool ist mir egal!
Weil !;
um den Speicher zu schonen, möchte ich erstmal die Pfaden Verwalten -> also die
PATH_TO_SOUND_FILE in einem Array ....? hier weis ich noch nicht wo,
und bei der Entscheidung welches Song abgespielt werden soll erstmall DANN! den Song laden und abspielen.

Leider habe keine Ahnung wieso es bei mir nicht funktioniert; - deshalb bitte um Hilfe.

Hier das (relevante) Code Ausschnitt:
1public class MainActivity extends Activity {
2
3protected static String PATH_TO_SOUND_FILE1 = null;
4Button button_badmo;
5public MediaPlayer mp_test;
6
7...
8protected void onCreate(Bundle savedInstanceState) {
9...
10button_badmo.setOnClickListener(Badmo_Listener);
11...
12
13private OnClickListener Badmo_Listener = new OnClickListener() {
14 public void onClick(View v) {
15 //Log.d("Badmo_Listener ","onClick() Badmo-button");
16
17 PATH_TO_SOUND_FILE1 = "android.resource://com.test.mptest2/raw/test1";
18 Uri path = Uri.parse("android.resource://com.test.mptest2/raw/test1");
19 //String PATH_TO_FILE = "android.resource://" + getPackageName() + "/"+R.raw.test1;
20 //PATH_TO_SOUND_FILE1 = "android.resource://" + getPackageName() + "/"+R.raw.test1;
21 try{
22 mp_test = new MediaPlayer();
23 //mp_test.setDataSource(PATH_TO_SOUND_FILE1);
24 mp_test.setDataSource(path.toString());
25 mp_test.prepare();
26 mp_test.start();
27 }catch(Exception e){e.printStackTrace();}
28 }
29 };
30...

Für ne Antwort werde ich sehr dankbar sein.
LG
Georg

Ps.
Solches -> in der Create(...) Methode
1mp1 = MediaPlayer.create(getApplicationContext(), R.raw.test1);
2mp2 = MediaPlayer.create(getApplicationContext(), R.raw.test2);
3mp3 = MediaPlayer.create(getApplicationContext(), R.raw.test3);
4...
5mp14 = MediaPlayer.create(getApplicationContext(), R.raw.test14);
6mp15 = MediaPlayer.create(getApplicationContext(), R.raw.test15);

funktioniert, ->nun gerade das (alles in den Speicher zu laden! - oder?) möchte ich verhindern.

Sorry für Gramatik & Stilistik Fehler.

Antworten
impjor
  • Forum-Beiträge: 1.793

26.02.2014, 17:01:20 via App

Wie wärs mit einem private int[] songs = {R.raw.sound1, R.raw.song2, ...};
private int currSong = 0;

Wenn du einen Song spielen willst einfach songs[currSong] laden und dann zum nächsten/ersten Song springen currSong = currSong < songs.length -1 ? currSong + 1 : 0;

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Georg C.
  • Forum-Beiträge: 235

26.02.2014, 18:23:20 via Website

Hallo, erstmal vielen Dank für die Antwort.
Ich taste mich in der "Android- Welt" langsam, und vieles verstehe noch nicht.
Bin in Sache Erläutern bzw. richtig fragen ein "Katastrophen- Joey" - SORRY!
Mit dem Path, habe einen Denkfehler gemacht. Ich habe mir zu großen Gedanken
über den Speicher (wann - bzw. - was wird in den Speicher geladen ... usw. ) gemacht.

Aber mit Deiner Antwort, kam wieder "etwas Licht" bei mir.
int[] songs = {R.raw.sound1, R.raw.song2, ...};
NICHT irgendeinen "quatsch- Path" -> SONDERN die (?)Ressourcen ID- Objekte -> "verwalten"
und einfach den den gewünschten - nacher - dem Mediaplayer übergeben.

mp_test = MediaPlayer.create(getApplicationContext(), songs[1]);
mp_test.start();

DANKE
LG
Georg

— geändert am 26.02.2014, 18:27:05

Sorry für Gramatik & Stilistik Fehler.

Antworten