H
Hikku
Neues Mitglied
- 0
Ich grüße euch,
Google hat mich dieses Forum finden lassen und ich erhoffe mir die nötige Hilfe zu finden.
Ich versuche eine App zu bauen, welche mir 2 Bongos als Musikinstrument simuliert. Mein Problem ist, dass jede Sounddatei mehr als nur 1x abgespielt wird. (Manchmal sogar öfter oder garnicht mehr). Falls jemand Erfahrung mit der Nutzung von SoundPool hat, so wäre ich dem jenigen sehr dankbar wenn er meinen Quelltext mal überfliegen könnte.
Die App besitzt zu einem eine Activty Klasse BongoAktivity und zu anderem die Klasse Bongo welche von einer ImageView erbt. Ich habe mich für die ImageView entschieden, da zu bestimmten Koordinaten x,y per touch jeweils ein Sound abgespielt werden soll. Ziel ist es, das Instrument so realistisch wie möglich dem Nutzer erscheinen zu lassen.
Es sei zusätzlich zu erwähnen, dass die verwendeten Soundfiles alle ins *.ogg Format konvertiert wurden und nicht länger als eine Sekunde lang sind.
Danke im voraus für jegliche Hilfe!
BongoActivity.java
Bongo.java
Google hat mich dieses Forum finden lassen und ich erhoffe mir die nötige Hilfe zu finden.
Ich versuche eine App zu bauen, welche mir 2 Bongos als Musikinstrument simuliert. Mein Problem ist, dass jede Sounddatei mehr als nur 1x abgespielt wird. (Manchmal sogar öfter oder garnicht mehr). Falls jemand Erfahrung mit der Nutzung von SoundPool hat, so wäre ich dem jenigen sehr dankbar wenn er meinen Quelltext mal überfliegen könnte.
Die App besitzt zu einem eine Activty Klasse BongoAktivity und zu anderem die Klasse Bongo welche von einer ImageView erbt. Ich habe mich für die ImageView entschieden, da zu bestimmten Koordinaten x,y per touch jeweils ein Sound abgespielt werden soll. Ziel ist es, das Instrument so realistisch wie möglich dem Nutzer erscheinen zu lassen.
Es sei zusätzlich zu erwähnen, dass die verwendeten Soundfiles alle ins *.ogg Format konvertiert wurden und nicht länger als eine Sekunde lang sind.
Danke im voraus für jegliche Hilfe!
BongoActivity.java
Code:
package de.luh.se.musicapp.bongo;
import android.app.Activity;
import android.media.AudioManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;
import de.luh.se.musicapp.R;
public class BongoActivity extends Activity {
private Bongo bongo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bongo = new Bongo(this);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(bongo);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
protected void onDestroy() {
bongo.destroy();
super.onDestroy();
}
}
Code:
package de.luh.se.musicapp.bongo;
import de.luh.se.musicapp.R;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.graphics.Canvas;
import android.media.AudioManager;
import android.media.SoundPool;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ImageView;
public class Bongo extends ImageView {
//---audio tools---
private AudioManager audioManager;
private SoundPool soundPool;
private int soundId = -1;
private float x;
private float y;
private int height = this.getHeight();
private int width = this.getWidth();
boolean obereHaelfte = false;
boolean untereHaelfte = false;
private float obereBongoMitteX = width/2;
private float obereBongoMitteY = height/4;
private float untereBongoMitteX = width/2;
private float untereBongoMitteY = height*3/4;
float temp_x = 0;
float temp_y = 0;
float tempRadius = 0;
public Bongo(Context context) {
super(context);
soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
AssetFileDescriptor descriptor;
AssetManager assetManager = context.getAssets();
try {
descriptor = assetManager.openFd("bong1.ogg");
soundId = soundPool.load(descriptor, 1);
descriptor = assetManager.openFd("bong2.ogg");
soundId = soundPool.load(descriptor, 2);
descriptor = assetManager.openFd("bong3.ogg");
soundId = soundPool.load(descriptor, 3);
descriptor = assetManager.openFd("bong4.ogg");
soundId = soundPool.load(descriptor, 4);
descriptor = assetManager.openFd("bong5.ogg");
soundId = soundPool.load(descriptor, 5);
} catch (Exception ex) {
Log.d("Sound Sample", "couldn't load soundfiles");
throw new RuntimeException(ex);
}
//unter res/drawable/ eine beliebiges Bild einfügen
this.setImageResource(R.drawable.bongo);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.rotate(0, width / 2, height / 2);
super.onDraw(canvas);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
x = event.getX();
y = event.getY();
if (x > 227 && x < 625 && y > 100 && y < 500){
soundPool.play(1, 1, 1, 1, 0, 1.0f);
}
if (x > 600 && x < 910 && y > 650 && y < 1130){
soundPool.play(3, 1, 1, 1, 0, 1.0f);
}
return true;
}
public void destroy(){
soundPool.release();
soundPool = null;
}
}