| 知乎专栏 |
播放一段特效声音,例如铃音,可以在点击按钮德时候调用 playSound()
private void playSound(){
MediaPlayer mediaPlayer = MediaPlayer.create(FlashLightActivity.this, R.raw.alert);
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mediaPlayer.release();
}
});
mediaPlayer.start();
}
播放 res 中的资源文件
AssetFileDescriptor assetFileDescriptor = context.getResources().openRawResourceFd(R.raw.music);
public void play(AssetFileDescriptor assetFileDescriptor) {
if (mediaPlayer != null) {
try {
this.reset();
mediaPlayer.setDataSource(assetFileDescriptor);
// 或使用这种方式 mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength());
mediaPlayer.prepare();
//注意不能使用异步,异步方式是用来播放网络流音乐
// mediaPlayer.prepareAsync();
assetFileDescriptor.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
mediaPlayer.start();
}
}
播放 assets 文件夹中的资源
//实例化播放器
MediaPlayer mediaPlayer = new MediaPlayer();
AssetManager am = getAssets();
try {
AssetFileDescriptor afd = am.openFd("assets_video.mp4");
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
} catch (IOException e) {
e.printStackTrace();
}
//设置准备就绪状态监听
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// 开始播放
mediaPlayer.start();
}
});
//准备播放
mediaPlayer.prepareAsync();
其他方式获得 assets 文件夹中的资源
String url = "file:///android_asset/" + "video.mp3";
AssetFileDescriptor assetFileDescriptor = null;
try {
assetFileDescriptor = context.getResources().getAssets().openFd("nepal.mp3");
} catch (IOException e) {
throw new RuntimeException(e);
}
//需将资源文件放在assets文件夹
AssetFileDescriptor fd = getAssets().openFd("samsara.mp3");
mMediaPlayer.setDataSource(fd)
mMediaPlayer.prepare()
AssetFileDescriptor fd = getAssets().openFd("samsara.mp3");
mMediaPlayer.setDataSource(fd, fd.getStartOffset(), fd.getLegth())
mMediaPlayer.prepare();
package cn.netkiller.demo.skill;
import android.media.MediaPlayer;
import android.util.Log;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.io.IOException;
public class Bible {
private static final String TAG = Bible.class.getSimpleName();
public Bible(JSONArray array) {
Log.i(TAG, array.toString());
JSONObject item = (JSONObject) array.get(1);
String url = item.getString("url");
Log.i(TAG, "Audio url: " + url);
MediaPlayer mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(url);//设置播放来源
} catch (IOException e) {
throw new RuntimeException(e);
}
mediaPlayer.prepareAsync();//异步准备
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
//异步准备监听
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
Log.i(TAG, "Voice异步文件时长: " + mediaPlayer.getDuration() / 1000 + "");
mediaPlayer.start();//播放
}
});
mediaPlayer.setScreenOnWhilePlaying(true);// 设置播放的时候一直让屏幕变亮
mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
//文件缓冲监听
@Override
public void onBufferingUpdate(MediaPlayer mediaPlayer, int i) {
Log.i(TAG, "Voice进度: " + i + "% Voice文件长度" + mediaPlayer.getDuration() / 1000 + "");
}
});
}
}
package cn.netkiller.demo.skill;
import android.media.MediaPlayer;
import android.util.Log;
import androidx.annotation.NonNull;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.io.IOException;
public class Bible {
private static final String TAG = Bible.class.getSimpleName();
private static MediaPlayer mediaPlayer;
public synchronized static MediaPlayer getInstance() {
if (mediaPlayer == null)
mediaPlayer = new MediaPlayer();
return mediaPlayer;
}
public Bible(@NonNull JSONArray array) {
// Log.i(TAG, array.toString());
JSONObject item = (JSONObject) array.get(1);
String url = item.getString("url");
// Log.i(TAG, "Audio url: " + item.toString());
MediaPlayer mediaPlayer = Bible.getInstance();
try {
mediaPlayer.reset();
mediaPlayer.setDataSource(url);//设置播放来源
} catch (IOException e) {
throw new RuntimeException(e);
}
mediaPlayer.prepareAsync();//异步准备
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
//异步准备监听
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
Log.i(TAG, "Voice 播放异步文件,时长: " + mediaPlayer.getDuration() / 1000 + " Audio: " + item.toString());
mediaPlayer.start();//播放
}
});
mediaPlayer.setScreenOnWhilePlaying(true);// 设置播放的时候一直让屏幕变亮
mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
//文件缓冲监听
@Override
public void onBufferingUpdate(MediaPlayer mediaPlayer, int i) {
Log.i(TAG, "Voice 缓冲区加载进度: " + i + "%");
}
});
}
}
PlaybackParams params = new PlaybackParams();
// params.setSpeed(1.5f);
params.setSpeed(5f);
mediaPlayer.setPlaybackParams(params);
import android.media.MediaPlayer
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import java.io.IOException
class OpusMediaPlayerActivity : AppCompatActivity() {
private var mediaPlayer: MediaPlayer? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_media_player)
val playButton = findViewById<Button>(R.id.btn_play)
val stopButton = findViewById<Button>(R.id.btn_stop)
// 初始化 MediaPlayer
mediaPlayer = MediaPlayer().apply {
setOnPreparedListener { it.start() } // 准备完成后自动播放
setOnErrorListener { _, what, extra ->
// 处理错误(如不支持Opus格式)
true
}
}
// 播放按钮点击事件
playButton.setOnClickListener {
val streamUrl = "http://example.com/stream.opus"
try {
mediaPlayer?.reset()
mediaPlayer?.setDataSource(streamUrl) // 设置Opus流地址
mediaPlayer?.prepareAsync() // 异步准备(避免阻塞UI)
} catch (e: IOException) {
e.printStackTrace()
}
}
// 停止按钮点击事件
stopButton.setOnClickListener {
mediaPlayer?.stop()
}
}
override fun onDestroy() {
super.onDestroy()
mediaPlayer?.release() // 释放资源
mediaPlayer = null
}
}