Viele Sounds in einer Class/Activity gut unterbringen?

  • Antworten:13
  • OffenNicht stickyNicht beantwortet

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

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?

Gelöschter Account

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

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

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

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.

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