package ru.net.jimm.sound; import android.content.Context; import android.content.res.AssetFileDescriptor; import android.media.AudioManager; import android.media.MediaPlayer; import jimm.modules.DebugLog; import jimm.modules.fs.FileSystem; import jimm.modules.fs.JSR75FileSystem; import protocol.net.TcpSocket; import ru.net.jimm.JimmActivity; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; /** * * @author vladimir */ public class SoundPlayer implements MediaPlayer.OnCompletionListener { private MediaPlayer androidPlayer; @Override public void onCompletion(MediaPlayer mp) { mp.release(); } public void close() { if (null != androidPlayer) { androidPlayer.release(); androidPlayer = null; } } public void play(String source, int volume) throws IOException { AudioManager audioManager = (AudioManager)JimmActivity.getInstance().getSystemService(Context.AUDIO_SERVICE); if (AudioManager.RINGER_MODE_NORMAL == audioManager.getRingerMode()) { playIt(source.substring(1), volume); } else { close(); } } private void playIt(String source, int volume) throws IOException { androidPlayer = new MediaPlayer(); try { String in = openFile(source); if (null == in) { AssetFileDescriptor afd = JimmActivity.getInstance().getAssets().openFd(source); androidPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); } else { androidPlayer.setDataSource(in); } androidPlayer.prepare(); androidPlayer.setVolume(volume / 100f, volume / 100f); } catch (IOException e) { close(); throw e; } } public static String openFile(String file) { JSR75FileSystem fs = FileSystem.getInstance(); String in = null; try { fs.openFile(FileSystem.getJimmHome() + FileSystem.RES + "/" + file); in = fs.getAbsolutePath(); } catch (Exception ignored) { } fs.close(); return in; } public void start() { if (null != androidPlayer) { androidPlayer.setOnCompletionListener(this); androidPlayer.start(); } } }