How do I play an audio file in Android?

I have code to play an .ogg audio file, that I downloaded from the internet. I have no errors, so I can run it, but then the app crashes:

package play.my.sound;

import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.media.SoundPool.OnLoadCompleteListener;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;

public class PlaySound2Activity extends Activity {
private SoundPool soundPool;
private int soundID;
boolean loaded = false;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    View view = findViewById(R.id.textView1);
    view.setOnClickListener((OnClickListener) this);
    // Set the hardware buttons to control the music
    this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
    // Load the sound
    soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
    soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
        public void onLoadComplete(SoundPool soundPool, int sampleId,
                int status) {
            loaded = true;
        }
    });
    soundID = soundPool.load("sound1.ogg", 1);

}

public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        // 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 (loaded) {
            soundPool.play(soundID, volume, volume, 1, 0, 1f);
            Log.e("Test", "Played sound");
        }
    }
    return false;
}
}

I think I have two problems:

  • I put this in the main.xml file:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView android:text="Click on the screen to start playing"
        android:id="@+id/textView1" android:layout_width="fill_parent"
        android:layout_height="fill_parent"></TextView>
    </LinearLayout>
    
    And I don't know if it's correct.

  • I put the file sound1.ogg in the workspace->SoundPlay2 folder because in the res folder I had problems, and also, I tried to put it in the two res folders that exist.

  • This is from my console:

    [2012-01-04 19:38:16 - PlaySound2] Failed to install PlaySound2.apk on device 'emulator-5554': timeout
    [2012-01-04 19:38:16 - PlaySound2] Launch canceled!
    [2012-01-04 19:47:33 - PlaySound2] Error in an XML file: aborting build.
    [2012-01-04 19:52:34 - PlaySound2] reslayoutmain.xml:0: error: Resource entry main is already defined.
    [2012-01-04 19:52:34 - PlaySound2] reslayoutmain.out.xml:0: Originally defined here.
    [2012-01-04 19:52:34 - PlaySound2] C:UsersNataliaworkspacePlaySound2reslayoutmain.out.xml:1: error: Error parsing XML: no element found
    

    I took this example from "Android Sounds - Tutorial". I want to play an audio file, more specifically, a .wav file.

    I dont' know where I can find some information about the files that are permitted in the MediaPlayer class and their characteristic (durantion, sample rate...) Could you tell me where I can find this??


    Create raw folder in the res folder and add your file to it. Then play the file using

    soundID = soundPool.load(R.raw.sound1, 1);
    

    And also see this post for your main.xml problem.


    I've never seen the Class SoundPool before, however I would recommend using a MediaPlayer Class:

    mMediaPlayer = new MediaPlayer(this, R.raw.yourfile);
    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mMediaPlayer.prepare();
    mMediaPlayer.start();
    

    Make sure you put the file into the folder PROJECT/res/raw/ (or create it if it does not exist)

    Also there is something wrong with your main.xml. Can you please post it?


    Example for playing some kind of buzzer. In the res folder under raw folder I have a buzzer.wav

    Method to play this buzzer:

         /**
     * Method to play an alarm sound to signal half time or full time.
     */
    private void playAlarm() {
        MediaPlayer mp = MediaPlayer.create(this,
                R.raw.buzzer);
        mp.start();
        mp.setOnCompletionListener(new OnCompletionListener() {
    
            @Override
            public void onCompletion(MediaPlayer mp) {
                mp.release();
            }
    
        });
    
    }
    
    链接地址: http://www.djcxy.com/p/93172.html

    上一篇: 带有滚动视图的android自定义对话框将按钮从屏幕上移开

    下一篇: 如何在Android中播放音频文件?