1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Sound in App

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von xsonicx, 16.11.2011.

  1. xsonicx, 16.11.2011 #1
    xsonicx

    xsonicx Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    25.08.2010
    Tach zusammen!

    Bin mehr oder weniger neu hier im Forum (war 1 Jahr inaktiv).

    Wie auch immer, da Java FAST ein Neuland für mich ist (hatte es nur in den ersten beiden Klassen) bräuchte ich nun etwas Hilfe. Zur Zeit probier ich noch Dinge aus, spirch meine Codes habe ich von Tuts etc...

    Nun zu meinem "Problem":

    Ich habe 2 Dinge von 2 Tuts:

    Zuerst eine App mit der man ein Bild am Touchscreen verschieben kann:

    Code:
    public class NochmalActivity extends Activity{
        
            
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            View view = findViewById(R.id.textView1);
            setContentView(new Panel(this));  
        }
    
        class Panel extends SurfaceView implements SurfaceHolder.Callback{
            private TutorialThread _thread;
            private int _x = 20;
            private int _y = 20;
            Bitmap mBitmap;
            
            public Panel(Context context){
                super(context);
                mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ziehmich);
                getHolder().addCallback(this);
                _thread = new TutorialThread(getHolder(), this);
                setFocusable(true);
                            
            }
            public void onDraw (Canvas canvas){
                Bitmap _scratch = BitmapFactory.decodeResource(getResources(), R.drawable.ziehmich);
                canvas.drawColor(Color.BLACK);
                canvas.drawBitmap(_scratch, _x, _y,null);                        
            }
            
            public boolean onTouchEvent(MotionEvent event){
                _x = (int) event.getX();
                _y = (int) event.getY();
                return true;
            }
            @Override
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
                // TODO Auto-generated method stub
                
            }
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                _thread.setRunning(true);
                _thread.start();
                
            }
            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {
                boolean retry = true;
                _thread.setRunning(false);
                while (retry){
                    try{
                        _thread.join();
                        retry = false;
                    } catch (InterruptedException e){
                }
            }            
        }
    }
            
     
                class TutorialThread extends Thread {
                    private SurfaceHolder _surfaceHolder;
                    private Panel _panel;
                    private boolean _run = false;
             
                    public TutorialThread(SurfaceHolder surfaceHolder, Panel panel) {
                        _surfaceHolder = surfaceHolder;
                        _panel = panel;
                    }
             
                    public void setRunning(boolean run) {
                        _run = run;
                    }
             
                    @Override
                    public void run() {
                        Canvas c;
                        while (_run) {
                            c = null;
                            try {
                                c = _surfaceHolder.lockCanvas(null);
                                synchronized (_surfaceHolder) {
                                    _panel.onDraw(c);
                                }
                            } finally {
                                // do this in a finally so that if an exception is thrown
                                // during the above, we don't leave the Surface in an
                                // inconsistent state
                                if (c != null) {
                                    _surfaceHolder.unlockCanvasAndPost(c);
                                }
                            }
                        }
                    }
                }
    In sofern ich diesen Code nicht schon verpfuscht habe passt das so^^.

    Nun hab ich mir ein TUT angeschaut mit einem Soundmanager. Dieser funktioniert in dem Fall, sobald man auf den Touchscreen drückt...
    Code:
    public class PlaySoundAct extends Activity implements OnTouchListener {
        
        private SoundPool soundPool;
        private int soundID;
        boolean loaded = false;
        
        
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            View view = findViewById(R.id.textView1);
            view.setOnTouchListener(this);
            this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
            soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
            soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
                
                public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                    // TODO Auto-generated method stub
                    loaded = true;
                }
            });
            
            soundID = soundPool.load(this, R.raw.sound1, 1);
           
        }
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN){
                AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
                
                float actualVolume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
                float maxVolume = (float) audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
                float volume = actualVolume / maxVolume;
                if (loaded){
                    soundPool.play(soundID, volume, volume, 1, 0, 1f);
                    Log.e("Test", "Sound gespielt");
                }
            }
            // TODO Auto-generated method stub
            return false;
        }
    }
    Nun würd ich gerne diese beiden Codes zuammenfügen um folgendes zu erreichen:

    Ich will, sobald man das BILD antippt, dass ein Ton abgespielt wird. Drückt man jedoch auf einen Fleck wo das bild (NOCH) nicht ist, soll ein andere Ton abgespielt werden. Bin daran schon etwa ~ 5 stunden gesessen und daran regelrecht gescheitert...

    Wäre auf jeden fall sehr toll wenn mir hier jemand helfen kann! Es würde mir auch auch reichen, wenn einer einen Einfachen Sourcecode reinstellen kann mit einer KLEINEN Funktion und einem Sound damit ich mir mal die Struktur anschauen kann (finde im Internet nicht in dieser Kombi... Immer nur einzeln und da steh ich leider an)

    MfG
     
    Zuletzt bearbeitet: 16.11.2011
  2. xsonicx, 20.11.2011 #2
    xsonicx

    xsonicx Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    25.08.2010
    Kann mir da keiner helfen =(?

    Es würde mir auch schon helfen, einen kleinen source code mit einer kleinen Funktion und einem Sound darin.

    MfG
     
  3. v Ralle v, 21.11.2011 #3
    v Ralle v

    v Ralle v Android-Lexikon

    Beiträge:
    913
    Erhaltene Danke:
    199
    Registriert seit:
    27.08.2010
    Hi,

    heißt du denn beides schon sicher am Laufen gehabt? Dh. einmal das Bewegen des Bildes und das Abspielen des Sounds? Entwickle beides erst einmal unabhängig und dass es auch definitiv funktioniert. Schau dir auch mal den Link an: Media Playback | Android Developers

    Wenn du auch gerade erst mit Java wieder anfängst, wieso nimmst du gleich so etwas kompliziertes? Es gibt Dinge, mit denen man sich leichter einarbeiten kann ^^
     
  4. xsonicx, 21.11.2011 #4
    xsonicx

    xsonicx Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    25.08.2010
    Jap beides unabhängig schon laufen gehapt =). Funktioniert beides einwandfrei.

    Warum ich das nehme? Weil ich zusammen mit ein paar Leute heuer ein Matura Projekt (Abitur für euch deutschen =) ) mache und jeder seinen Teil zu tun hat. zur zeit müssen wir uns alle etwas Wissen aneignen, deswegen kann mir da keiner aus meiner Klasse helfen. Bin also völlig auf mich allein gestellt, deswegen suche ich bei euch etwas hilfe, zumindest mal für den Aufbau ;). Diese Beispiele die ich oben aufgelistet habe (die beiden) haben nichts mit meiner Arbeit zu tun ;). Sie sind rein fürs Verständins da.

    Aber wie gesagt, beides funktionier einwandfrei UNABHÄNGIG voneinander. Ich wollt es jetzt eben "vereinen".

    Und noch eine Frage: kann es sein dass der Emulator von Android welchen es für Eclipse geht etwas SEHR bugreich ist =S? Ich bekomm meistens einen fehler dass das programm (meien APP) abgebrochen wurde und ja schön, den Grund muss ich mir von irgendwoher ziehen^^?
     
  5. v Ralle v, 21.11.2011 #5
    v Ralle v

    v Ralle v Android-Lexikon

    Beiträge:
    913
    Erhaltene Danke:
    199
    Registriert seit:
    27.08.2010
    Die beiden Funktionen zu verheiraten sollte eigentlich nicht das Problem sein. Und da du es ansprichst, dass der Emulator sehr bugreich sei: das ist deine App und nicht der Emulator. Wenn die falsch programmiert wurde, wird sie auch beendet ^^ Bei Logcat kannst du genau sehen, was das Problem ist.
     
  6. xsonicx, 21.11.2011 #6
    xsonicx

    xsonicx Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    25.08.2010
    Leider genau das ist mein Problem^^. Diese beiden Funktionen zu "verheiraten".. ich raffs irgendwie nicht =(.. Es funktioniert einfach nicht.. lol

    Gut danke schon mal für den Tipp =)

    /e: LOL... Ich habs endlich zusammengebracht, und dann soll mir noch einer Sagen, Eclipse mit Android sei nicht verbuggt...

    Lösung: Einfach mal das Project umbenennen wenn man denk, dass der eigentliche Code richtig ist... O-M-G...
     
    Zuletzt bearbeitet: 22.11.2011

Diese Seite empfehlen