Viele Sounds in einer Class/Activity gut unterbringen?

  • Antworten:13
Michele
  • Forum-Beiträge: 1.525

11.07.2012, 21:30:18 via Website

Hallo ihr lieben. Ich bin es mal wieder :grin:.

SoundPool soll da das beste sein für kurze Sounds für Games oder sonstiges die unter 1MB sind.

Jetzt wollte ich gerne ca. 80 kleine Sounds verwenden für meine App.
Wie kann ich sie gut unterbringen? Weil 80 Sounds einzeln in der Activity/Class reinschreiben ist ja sehr unübersichtlich.

So sieht das ganze erstmal aus:
1public class Test extends Activity {
2
3 private SoundPool spool;
4 private int soundID;
5
6 @Override
7 public void onCreate(Bundle savedInstanceState) {
8 super.onCreate(savedInstanceState);
9 setContentView(R.layout.test);
10
11 this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
12 spool = new SoundPool(80, AudioManager.STREAM_MUSIC, 0);
13 soundID = spool.load(this, R.raw.test, 1);
14 }
15}
Dann später in der Button Methode:
1spool.play(soundID, 10, 10, 1, 0, 1f);
So spielt er ja schonmal den Sound ab.

Aber nun will ich nicht 80 Buttons mit 80 SoundPool Variablen extra erstellen.

Wie kann ich das sauber hier erstellen und unterbringen ohne das ich die übersicht verliere und von jeden 80 sachen sind.


LG

Antworten
Michele
  • Forum-Beiträge: 1.525

11.07.2012, 23:58:17 via Website

Ufff das sagt mir ja mal wieder nichts. Wieder was neues zum lernen *grins*

Kannst du mir ein weiteren Tipp geben? Mehr aber auch nicht. Muss ja mal bisschen selber lernen.:*)



LG

Antworten
André
  • Forum-Beiträge: 77

12.07.2012, 09:53:04 via Website

Wenn du von vornherein alle Sounds laden willst, kannst du einfach eine Schleife über deine Sounds machen. Üblicherweise lädt man den Sound allerdings erst, wenn er zum ersten mal benutzt wird.

[code]
int []soundID = new int[NUM_SOUNDS];
for (int i = 0; i < NUM_SOUNDS; i++)
soundID[i] = spool.load(this, R.raw.sounds + i, 1);
[/code]

Zum Abspielen eines Sounds beim Klick auf einen Button kannst du dann einfach den entsprechenden Sound spielen.

1spool.play(soundID[SOUND_ID_FOR_THIS_BUTTON], 1, 1, 1, 0, 1f);

Edit: Warum funktioniert das mit dem code nicht?

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

12.07.2012, 13:28:46 via Website

Kannst du mir ein weiteren Tipp geben? Mehr aber auch nicht. Muss ja mal bisschen selber lernen.

Das blöde ist - es sind nur drei Zeilen, oder so.

Also den Vorschlag mit einem Zähler finde ich nicht so gut da Du jedesmal an der Stelle eingreifen musst sobald ein Sound hinzugefügt wird. Das würde der AssetManager.list() besser lösen. Allerdings weiß ich nicht wie Du mit den Sounds in Deiner App umgehen wirst. Wenn die IDs der Sounds sowieso fest mit einem bestimmten Button o.ä. verdrahtet sind dann kannst Du es wie vom Vor-Poster geschrieben machen.

Der Vollständigkeit halber. Da ich nicht weiß was Du damit machen willst steht an einer Stelle ??? statt eine konkrete Nutzung:

1String[] filenames = getAssets().list("deinunterordnerinassets");
2if (filenames != null) {
3 for (String filename : filenames) {
4 ??? = soundPool.load(filename, 1);
5 }
6}

— geändert am 12.07.2012, 13:29:02

Antworten
Michele
  • Forum-Beiträge: 1.525

12.07.2012, 16:05:52 via Website

Naja ok ok ich sags mal noch genauer.

GridView Buttons und jeder bekommt einen anderen Sound.
Da die Button Automatisch da sind oder im GridView drin so muss ich keine Button Methode mehr setzen.

Sondern so sieht es dann aus mit der "if" sache.

1GridView gridview = (GridView) findViewById(R.id.gridview);
2 gridview.setAdapter(newT est(this));
3
4 gridview.setOnItemClickListener(new OnItemClickListener() {
5 public void onItemClick(AdapterView<?> parent, View v,
6 int position, long id) {
7
8 if (position == 0) {
9 spool.play(soundID, 10, 10, 1, 0, 1f);
10 } else if (position == 1) {
11 spool.play(soundID1, 10, 10, 1, 0, 1f);
12 }
13 }
14 });

Die position ist da wo ich klicke. Oder wie auch immer ich das erklären soll.
Klicke ich ersten Button der den wert null hat dann spielt er den sound usw.

LG

— geändert am 12.07.2012, 16:10:18

Antworten
Michele
  • Forum-Beiträge: 1.525

13.07.2012, 14:33:11 via Website

Was noch hinzukommt ist das er ja erst 80 Sounds vorlädt und das dauert.

Da hängt sogar mein Samsung S3.



LG

Antworten
Michele
  • Forum-Beiträge: 1.525

13.07.2012, 15:15:59 via Website

Sorry mein Meister :bashful:

Aber wäre gut wenn mir einer sagen könnte wie ich das ändern kann das es nicht mehr so lange dauert zu laden die Activity mit den Sounds.


<3 Oder ist das normal?

LG

— geändert am 13.07.2012, 15:16:15

Antworten
André
  • Forum-Beiträge: 77

13.07.2012, 15:21:00 via Website

Michele
Aber wäre gut wenn mir einer sagen könnte wie ich das ändern kann das es nicht mehr so lange dauert zu laden die Activity mit den Sounds.

Lustig, dass du die Frage direkt unter dem Beitrag stellst, in dem sie beantwortet wurde...

Ich würde aber auch grundsätzlich bezweifeln, dass es nötig ist, alle Sounds vorzuladen. Als Reaktion auf einen Button Click reicht es locker, den Sound in dem Moment zu laden, wo er abgespielt werden soll.

Antworten
Michele
  • Forum-Beiträge: 1.525

13.07.2012, 15:38:58 via Website

Ja habe es wohl falsch verstanden von Harald.

Das habe ich ja schon versucht. Aber geht irgendwie nicht mit SoundPool.
Bin schon ewig am machen und tun da.


LG

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

13.07.2012, 15:47:49 via Website

Zwei Probleme werden hier in einem Thread behandelt - fällt mir immer häufiger auf.

* Laden der Sounds, Device hängt dabei, ...

* Abspielen der Sounds


Zum ersten Punkt - nimm einen Thread, AsyncTask, was auch immer. Anleitungen dazu findest Du im Web in Massen.

Antworten
Michele
  • Forum-Beiträge: 1.525

15.07.2012, 01:45:05 via Website

Lalalalala fehler behoben mit dem hängen.

Es hat so lange gedauert mit dem laden, weil [OMX.SEC.MP3.Decoder] err = -1011 <<<

Einige kleine Sounds sind .mp3 und andere .wav

So die .mp3 umgewandelt in .wav und schon erledigt.


LG

Antworten