Playing audio file from Sdcard

2020-01-29 16:51发布

问题:

I would like to play an audio file from the sdcard. How can I read the audio file and play it? Below is my code to play audio file:

int sound1;
sound1 = mSoundPool.load(this, R.raw.om, 1);
mSoundPool.play(sound1, 1, 1, 1, time - 1, 1);

Here in the above code i am using soundpool to play the audio file from raw folder but i need to play the audio file from sdcard using soundpool.

Right now interested to play audio from sdcard.

How to acheive this? please help i need to fix this as soon as possible

回答1:

Use the code below it worked for me.

MediaPlayer mp = new MediaPlayer();
mp.setDataSource("/mnt/sdcard/yourdirectory/youraudiofile.wav");
mp.prepare();
mp.start();


回答2:

I have played the sound from sd card using following code and it works for me.

private SoundPool mSoundPool;
private int mSoundID;
private boolean isLoaded = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "Start Greeting View Activity...");

    setContentView(R.layout.greeting_view_activity);
    //mGiGiView = (GreetingWidget) findViewById(R.id.gigi_greet);
    //mGiGiView.setOnTouchListener(this);

    //Set default animation sound path.
    String soundAnimUrl = "/gigi/anim/evening.ogg";

    // get the Bundle out of the Intent.
    Bundle extras = getIntent().getExtras();
    if (extras != null) {

        // check to see if "soundAnimUrl" is in the bundle, if so then
        // assign it's value to animUrl if not, assign null to soundAnimUrl.
        soundAnimUrl = extras.containsKey("soundAnimUrl") ? extras
                .getString("soundAnimUrl") : null;
    }

    // Set the hardware buttons to control the music.
    this.setVolumeControlStream(AudioManager.STREAM_MUSIC);

    // Load the sound.
    mSoundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
    mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
        @Override
        public void onLoadComplete(SoundPool soundPool, int sampleId,
                int status) {
            isLoaded = true;

            // Play the sound when loaded
            play();
        }
    });

    mSoundID = mSoundPool
            .load(getFile(Environment.DIRECTORY_MUSIC, soundAnimUrl)
                    .getPath(), 1);

    //Play sound from raw directory
    // soundID = soundPool.load(this, R.raw.greeting1, 1);      
}

private void play() {
    // Getting the user sound settings
    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;

    // Is the sound loaded already?
    if (isLoaded) {
        mSoundPool.play(mSoundID, volume, volume, 1, 0, 1f);
        Log.d(TAG, "Played sound");
    }
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        switch (v.getId()) {
        case R.id.gigi_greet:
            play();
            break;

        default:
            break;
        }
    }
    return false;
}   

/**
 * Get File instance from sd card path.
 * 
 * @param deviceFolderPath
 *            - Pictures, Music, etc
 * @param dbFilePath
 *            - path stored in db (/gigi/anim/morning.ogg)
 * @return
 */
public File getFile(final String deviceFolderPath, final String dbFilePath) {

    // Create full path
    String picturePath = deviceFolderPath.concat(File.separator).concat(
            dbFilePath);

    // Create file
    File mFile = getExternalFilesDir(picturePath);

    return mFile;
}