2010-03-16 114 views
3

我正在制作一个应用程序,并且我希望它在打开活动时发出声音,声音文件位于R.raw.sound_file,如果有人可以做一些示例代码以使我的应用程序播放出的声音非常好。我如何获得.wav声音播放?

回答

11

不是android.media.MediaPlayer这个班吗?

参考:http://developer.android.com/reference/android/media/MediaPlayer.html

实施例:http://developer.android.com/guide/topics/media/index.html

的例子的步骤2中表示:

MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1); 
mp.start(); 

在你的情况,我使用onStart()您的活动类中:

public class MyActivity extends Activity { 
    ... 
    protected void onStart() { 
     super.onStart(); 
     MediaPlayer mp = MediaPlayer.create(this, R.raw.sound_file_1); 
     mp.start(); 
    } 
    ... 
} 
+0

我不知道该用什么作为背景下,香港专业教育学院试图把它作为空,但应用程序只是强制关闭 – Dan 2010-03-17 07:05:14

+0

上下文应该是你的Activity(或Service,BroadcastReceiver,...),你可以从中调用它。 但是在你的情况下:当你想在应用程序第一次启动时播放声音,你可以从Application.onCreate()启动MediaPlayer(如上所述),这样我就可以更早地播放音频了。但是,不要,这会始终播放音频,并且如果其他任务启动了其他任何活动(如果可能的话)。 – MrSnowflake 2010-03-17 09:16:47

+0

好的,如果我想要执行.onCreate()方法,我会使用什么代码... – Dan 2010-03-17 16:45:58

0

我有同样的问题。 这个工作对我来说,通过使用应用程序上下文如下:

public class MyActivity extends Activity { 
    ... 
    protected void onStart() { 
     super.onStart(); 
     Context appContext = getApplicationContext(); 
     MediaPlayer mp = MediaPlayer.create(appContext , R.raw.sound_file_1); 
     mp.start(); 
    } 
    ... 
} 

另外,不要忘记调用mp.release()一旦你完成

另外,最佳选择是使用的Soundpool类

2

我有使用MediaPlayer对象为Android应用我创建的经验,我发现了以下内容:

  • 的Wav文件H如果MediaPlayer有一个32kbps的比特率问题,但是较高比特率的wav文件似乎可以正常播放,即使它是一个大的wav文件,只要具有较高的比特率就可以播放。

  • 如果可能的话,使用MP3文件音频,我遇到任何与使用MediaPlayer对象的mp3音频文件没有问题,这样是最好的方式,使用谷歌有很多不同类型的MP3的听起来可以免费听到铃声和叮叮声,可以听到树皮,猫咪的喵声,或者任何你想要的声音。

+0

我在使用MediaPlayer阅读WAV文件时也遇到问题。有问题的文件上的Linux命令'file'说:* RIFF(little-endian)数据,WAVE音频,MPEG Layer 3,mono 44100 Hz * – 2013-02-15 02:06:33

0

尝试使用我的代码,它完美地工作。你也需要有声音文件.WAV带RES /生

public class PianoActivity extends Activity { 

private MediaPlayer mediaPlayer = null; 

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

@Override 
protected void onPause() { 
    super.onPause(); 
    if (mediaPlayer != null) { 
     mediaPlayer.release(); 
     mediaPlayer = null; 
    } 
} 

private void setupUI() { 
    findViewById(R.id.doo).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      managerOfSound(); 
     } 
    }); 
} 

private void managerOfSound() { 
    mediaPlayer = MediaPlayer.create(this, R.raw.doo); 
    if (!mediaPlayer.isPlaying()) { 
     mediaPlayer.start(); 
    } else { 
     mediaPlayer.stop(); 
    } 
    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     @Override 
     public void onCompletion(MediaPlayer mp) { 
      mp.reset(); 
      mp.release(); 
     } 
    }); 
} 

}