How to play audio file in Android?

I have code to play the .ogg audio file that I downloaded from the Internet. I have no errors, so I can start it, but then the application 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 do not know if this is correct.
  • I put the sound1.ogg file in the workspace->SoundPlay2 , because I had problems in the res folder, and I also tried to put it in two existing res folders.

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] res\layout\main.xml:0: error: Resource entry main is already defined. [2012-01-04 19:52:34 - PlaySound2] res\layout\main.out.xml:0: Originally defined here. [2012-01-04 19:52:34 - PlaySound2] C:\Users\Natalia\workspace\PlaySound2\res\layout\main.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, in particular a .wav file.

I do not know where I can find information about the files that are allowed in the MediaPlayer class and their characteristics (durantion, sample rate ...) Could you tell me where I can find this?

+6
source share
3 answers

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

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

Also see this post for your main.xml problem.

+3
source

An example for playing some kind of buzzer. In the res folder in the raw folder, I have buzzer.wav

The way to play this sound signal:

  /** * 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(); } }); } 
+1
source

I have not seen Class SoundPool before, but I would recommend using the MediaPlayer class:

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

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

There is also something wrong with your main.xml. Could you post it?

+1
source

Source: https://habr.com/ru/post/905129/


All Articles