Play Sound in Android




play sound in android



package com.programmingwap.playsound;

import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    Button playBtn;
    TextView textView;

    private SensorManager mSensorManager;
    private Sensor mAccelerometer;
    private ShakeDetector mShakeDetector;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //intialize i.e Link with R
        playBtn = (Button) findViewById(R.id.playBtn);
        textView = (TextView)findViewById(R.id.txtView);

        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        mShakeDetector = new ShakeDetector(new ShakeDetector.OnShakeListener() {

            @Override            public void onShake() {
                playSound();
            }
        });







        playBtn.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View v) {
                // Sound Function call here when user press the button                playSound();

            }
        });

    }



    @Override    public void onResume() {
        super.onResume();
        mSensorManager.registerListener(mShakeDetector, mAccelerometer,
                SensorManager.SENSOR_DELAY_UI);
    }

    @Override    public void onPause() {
        super.onPause();
        mSensorManager.unregisterListener(mShakeDetector);
    }

    //function definition    private void playSound() {

        //crystall_ball is the name of the sound clip
        MediaPlayer player = MediaPlayer.create(this, R.raw.crystal_ball);
        player.start();

        player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override            public void onCompletion(MediaPlayer mp) {
                //Run those code when sound is off
                textView.setText("Sound Succesfully played");

            }
        });

    }

}



activity.xml


xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.programmingwap.playsound.MainActivity">

    <TextView        android:id="@+id/txtView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Hello World!" />

    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Play"        android:id="@+id/playBtn"        android:layout_centerVertical="true"        android:layout_centerHorizontal="true" />
</RelativeLayout>



shakedetector.java




package com.programmingwap.playsound;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;

public class ShakeDetector implements SensorEventListener {

   // Minimum acceleration needed to count as a shake movement    private static final int MIN_SHAKE_ACCELERATION = 5;
    
    // Minimum number of movements to register a shake    private static final int MIN_MOVEMENTS = 2;
    
    // Maximum time (in milliseconds) for the whole shake to occur    private static final int MAX_SHAKE_DURATION = 500;
   
    // Arrays to store gravity and linear acceleration values   private float[] mGravity = { 0.0f, 0.0f, 0.0f };
   private float[] mLinearAcceleration = { 0.0f, 0.0f, 0.0f };
   
   // Indexes for x, y, and z values   private static final int X = 0;
   private static final int Y = 1;
   private static final int Z = 2;

   // OnShakeListener that will be notified when the shake is detected   private OnShakeListener mShakeListener;
   
   // Start time for the shake detection   long startTime = 0;
   
   // Counter for shake movements   int moveCount = 0;
    
   // Constructor that sets the shake listener    public ShakeDetector(OnShakeListener shakeListener) {
       mShakeListener = shakeListener;
    }

    @Override    public void onSensorChanged(SensorEvent event) {
       // This method will be called when the accelerometer detects a change.              // Call a helper method that wraps code from the Android developer site       setCurrentAcceleration(event);
         
        // Get the max linear acceleration in any direction        float maxLinearAcceleration = getMaxCurrentLinearAcceleration();
        
        // Check if the acceleration is greater than our minimum threshold        if (maxLinearAcceleration > MIN_SHAKE_ACCELERATION) {
           long now = System.currentTimeMillis();
           
           // Set the startTime if it was reset to zero           if (startTime == 0) {
              startTime = now;
           }
           
           long elapsedTime = now - startTime;
           
           // Check if we're still in the shake window we defined           if (elapsedTime > MAX_SHAKE_DURATION) {
              // Too much time has passed. Start over!              resetShakeDetection();
           }
           else {
              // Keep track of all the movements              moveCount++;
              
              // Check if enough movements have been made to qualify as a shake              if (moveCount > MIN_MOVEMENTS) {
                 // It's a shake! Notify the listener.                 mShakeListener.onShake();
                 
                 // Reset for the next one!                 resetShakeDetection();
              }
           }
        }
    }

    @Override    public void onAccuracyChanged(Sensor sensor, int accuracy) {
       // Intentionally blank    }
    
    private void setCurrentAcceleration(SensorEvent event) {
           /*        *  BEGIN SECTION from Android developer site. This code accounts for         *  gravity using a high-pass filter        */              // alpha is calculated as t / (t + dT)        // with t, the low-pass filter's time-constant        // and dT, the event delivery rate
        final float alpha = 0.8f;

        // Gravity components of x, y, and z acceleration        mGravity[X] = alpha * mGravity[X] + (1 - alpha) * event.values[X];
        mGravity[Y] = alpha * mGravity[Y] + (1 - alpha) * event.values[Y];
        mGravity[Z] = alpha * mGravity[Z] + (1 - alpha) * event.values[Z];

        // Linear acceleration along the x, y, and z axes (gravity effects removed)        mLinearAcceleration[X] = event.values[X] - mGravity[X];
        mLinearAcceleration[Y] = event.values[Y] - mGravity[Y];
        mLinearAcceleration[Z] = event.values[Z] - mGravity[Z];
        
        /*         *  END SECTION from Android developer site         */    }
    
    private float getMaxCurrentLinearAcceleration() {
       // Start by setting the value to the x value       float maxLinearAcceleration = mLinearAcceleration[X];
       
       // Check if the y value is greater        if (mLinearAcceleration[Y] > maxLinearAcceleration) {
           maxLinearAcceleration = mLinearAcceleration[Y];
        }
        
        // Check if the z value is greater        if (mLinearAcceleration[Z] > maxLinearAcceleration) {
           maxLinearAcceleration = mLinearAcceleration[Z];
        }
        
        // Return the greatest value        return maxLinearAcceleration;
    }
    
    private void resetShakeDetection() {
       startTime = 0;
       moveCount = 0;
    }
    
    /*     * Definition for OnShakeListener definition. I would normally put this     * into it's own .java file, but I included it here for quick reference     * and to make it easier to include this file in our project.     */    public interface OnShakeListener {
       public void onShake();
    }
}
Share on Google Plus

About Abhishek

0 comments:

Post a Comment