package org.zywx.wbpalmstar.plugin.uexaudio; import java.io.File; import java.util.ArrayList; import java.util.List; import org.zywx.wbpalmstar.base.BUtility; import org.zywx.wbpalmstar.base.ResoureFinder; import org.zywx.wbpalmstar.engine.EBrowserView; import org.zywx.wbpalmstar.engine.universalex.EUExBase; import org.zywx.wbpalmstar.engine.universalex.EUExCallback; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.util.Log; public class EUExAudio extends EUExBase { public static final String tag = "uexAudio_"; public static final int F_ACT_REQ_CODE_UEX_AUDIO_RECORD = 4; public static final String F_CALLBACK_NAME_AUDIO_RECORD = "uexAudio.cbRecord"; public static final String F_CALLBACK_NAME_AUDIO_BACKGROUND_RECORD = "uexAudio.cbBackgroundRecord"; public static final String FINISHED = "uexAudio.onPlayFinished"; private PFMusicPlayer m_pfMusicPlayer = null; private String m_mediaPath; private ArrayList<Integer> IdsList = new ArrayList<Integer>(); private AudioRecorder audioRecorder; private ResoureFinder finder = ResoureFinder.getInstance(); private List<String> soundList = new ArrayList<String>(); public EUExAudio(Context context, EBrowserView inParent) { super(context, inParent); audioRecorder = new AudioRecorder(); } /* * 创建音乐播放对象,为播放音乐准备 */ public void open(String[] parm) { if (parm == null || parm.length != 1) return; String inPath = parm[0]; if (inPath != null && inPath.length() > 0) { m_mediaPath = BUtility.makeRealPath(inPath, mBrwView.getCurrentWidget().m_widgetPath, mBrwView.getCurrentWidget().m_wgtType); if (m_pfMusicPlayer == null) m_pfMusicPlayer = new PFMusicPlayer(mContext) { @Override public void onPlayFinished(int index) { String js = SCRIPT_HEADER + "if(" + FINISHED + "){" + FINISHED + "("+index+");}"; onCallback(js); } }; if (m_pfMusicPlayer != null) { m_pfMusicPlayer.basePath = mBrwView.getCurrentUrl(); m_pfMusicPlayer.open(); } else { errorCallback(0, EUExCallback.F_E_AUDIO_MUSIC_OPEN_NO_OPEN_ERROR_CODE, /* "文件未打开错误" */finder.getString(mContext, "plugin_audio_no_open_error")); } } else { errorCallback(0, EUExCallback.F_E_AUDIO_MUSIC_OPEN_PARAMETER_ERROR_CODE, /* "参数错误" */finder.getString(mContext, "plugin_audio_parameter_error")); } } /* * 播放音乐接口 */ public void play(String[] parm) { if(parm.length != 0 && parm.length != 1) return ; int loop = parm.length == 0 ? 0 : Integer.parseInt(parm[0]);//兼容以前没有参数(如果没有参数,默认为0) if (m_pfMusicPlayer != null) { m_pfMusicPlayer.play(m_mediaPath,loop); } else { errorCallback(0, EUExCallback.F_E_AUDIO_MUSIC_PLAY_NO_OPEN_ERROR_CODE, /* "文件未打开错误" */finder.getString(mContext, "plugin_audio_no_open_error")); } } /* * 暂停音乐接口 */ public void pause(String[] parm) { if (m_pfMusicPlayer != null) { m_pfMusicPlayer.pause(); } else { errorCallback(0, EUExCallback.F_E_AUDIO_MUSIC_PAUSE_NO_OPEN_ERROR_CODE, /* "文件未打开错误" */finder.getString(mContext, "plugin_audio_no_open_error")); } } /* * 停止播放音乐 */ public void stop(String[] parm) { if (m_pfMusicPlayer != null) { m_pfMusicPlayer.stop(); } else { errorCallback(0, EUExCallback.F_E_AUDIO_MUSIC_STOP_NO_OPEN_ERROR_CODE, /* "文件未打开错误" */finder.getString(mContext, "plugin_audio_no_open_error")); } } /* * 调高音乐音量接口 */ public void volumeUp(String[] parm) { if (m_pfMusicPlayer != null) { m_pfMusicPlayer.volumeUp(); } else { errorCallback(0, EUExCallback.F_E_AUDIO_MUSIC_STOP_NO_OPEN_ERROR_CODE, /* "文件未打开错误" */finder.getString(mContext, "plugin_audio_no_open_error")); } } /* * 调低音乐音量接口 */ public void volumeDown(String[] parm) { if (m_pfMusicPlayer != null) { m_pfMusicPlayer.volumeDown(); } else { errorCallback(0, EUExCallback.F_E_AUDIO_VOLUMEUP_NO_OPEN_ERROR_CODE, /* "文件未打开错误" */finder.getString(mContext, "plugin_audio_no_open_error")); } } /* * 打开一个音乐播放的activity界面接口,参数urlSet是一个地址字符串数组 */ public void openPlayer(String[] parm) { if (parm.length < 1) { return; } String[] inUrlStrs = parm[0].split(","); String activeIndex = null; if (parm.length == 2) { activeIndex = parm[1]; } if (inUrlStrs != null && inUrlStrs.length > 0) { for (int i = 0; i < inUrlStrs.length; i++) { inUrlStrs[i] = BUtility.makeRealPath(inUrlStrs[i], mBrwView.getCurrentWidget().m_widgetPath, mBrwView.getCurrentWidget().m_wgtType); } Intent intent = new Intent(); intent.putExtra(PMusicPlayerActivity.F_INTENT_DATA_KEY_AUDIOMGR_AUDIO_LIST, inUrlStrs); int index = 0; if (activeIndex != null && activeIndex.length() > 0 && !activeIndex.equals("undefined")) { index = Integer.parseInt(activeIndex); } intent.putExtra("fileIndex", index); intent.setClass(mContext, PMusicPlayerActivity.class); mContext.startActivity(intent); } else { errorCallback(0, EUExCallback.F_E_AUDIO_SOUND_OPENS_PARAMETER_ERROR_CODE, /* "参数出错" */finder.getString(mContext, "plugin_audio_parameter_error")); } } public void record(String[] parm) { final String path = mBrwView.getCurrentWidget().getWidgetPath() + BUtility.F_APP_AUDIO; if (path != null && path.length() > 0) { Intent intent = new Intent(mContext, AudioRecorderActivity.class); intent.putExtra(AudioRecorderActivity.INTENT_KEY_AUDIO_RECORD_SAVE_PATH, path); startActivityForResult(intent, F_ACT_REQ_CODE_UEX_AUDIO_RECORD); } else { jsCallback(F_CALLBACK_NAME_AUDIO_RECORD, 0, EUExCallback.F_C_INT, EUExCallback.F_C_FAILED); } } public void startBackgroundRecord(String[] parm) {for(String par:parm){Log.i("log", par);} final String audioFolder = mBrwView.getRootWidget().getWidgetPath() + BUtility.F_APP_AUDIO; if (!audioRecorder.startRecord(new File(audioFolder),Integer.valueOf(parm[0]))) { errorCallback(0, EUExCallback.F_E_AUDIO_SOUND_PLAY_NO_OPEN_ERROR_CODE, finder.getString(mContext, "plugin_audio_no_open_error")); } } public void stopBackgroundRecord(String[] parm) {for(String par:parm){Log.i("log", par);} audioRecorder.stopRecord(); String recordFile = audioRecorder.getRecordFile(); jsCallback(F_CALLBACK_NAME_AUDIO_BACKGROUND_RECORD, 0, EUExCallback.F_C_TEXT, recordFile); } public void openSoundPool(String[] parm) { if (m_pfMusicPlayer == null) m_pfMusicPlayer = new PFMusicPlayer(mContext) { @Override public void onPlayFinished(int index) { } }; if (m_pfMusicPlayer != null) { m_pfMusicPlayer.openSound(Integer.parseInt("50"), Integer.parseInt("3"), Integer.parseInt("0")); } } public void addSound(String[] parm){ if(parm.length != 2) return; String soundid = parm[0]; String soundurl = parm[1]; String soundPath = BUtility.makeRealPath(soundurl, mBrwView.getCurrentWidget().m_widgetPath, mBrwView.getCurrentWidget().m_wgtType); int soundID = m_pfMusicPlayer.loadSound(soundPath); //用户添加id,音效池中对应id,播放返回id(默认为0,还没播放) soundList.add(soundid+","+soundID+",0");//即使返回为0,也要添加记录 } public void playFromSoundPool(String[] parm) { if (parm == null || parm.length != 1) return; String inSoundID = parm[0]; if (inSoundID != null && inSoundID.length() > 0) { if (m_pfMusicPlayer != null) { String soundID = ""; for (String item : soundList) { String tag = item.substring(0, item.indexOf(',')); if (tag.equals(inSoundID)) { soundID = item.substring(item.indexOf(',') + 1,item.lastIndexOf(',')); int inStreamID=m_pfMusicPlayer.playSound(Integer.parseInt(soundID.trim())); StringBuffer sb=new StringBuffer(item.substring(0,item.lastIndexOf(","))); sb.append(","+inStreamID); int index=soundList.indexOf(item); item=sb.toString(); soundList.set(index, item); return; } } } else { errorCallback(0, EUExCallback.F_E_AUDIO_SOUND_PLAY_NO_OPEN_ERROR_CODE, /* "文件未打开错误" */finder.getString(mContext, "plugin_audio_no_open_error")); } } else { errorCallback(0, EUExCallback.F_E_AUDIO_SOUND_PLAY_PARAMETER_ERROR_CODE, /* "参数错误" */finder.getString(mContext, "plugin_audio_parameter_error")); } } public void stopFromSoundPool(String[] parm) {//停止某个sound if (parm == null || parm.length != 1) return; String inSoundID = parm[0]; if (inSoundID != null && inSoundID.length() > 0 && Integer.parseInt(inSoundID) > 0) { if (m_pfMusicPlayer != null) { for(String item:soundList){ String userID = item.substring(0,item.indexOf(',')); if(userID.equals(inSoundID)){ String inStreamID = item.substring(item.lastIndexOf(',')+1); m_pfMusicPlayer.stopSound(Integer.parseInt(inStreamID.trim())); return; } } } else { errorCallback(0, EUExCallback.F_E_AUDIO_SOUND_STOP_NO_OPEN_ERROR_CODE, /* "文件未打开错误" */finder.getString(mContext, "plugin_audio_no_open_error")); } } else { errorCallback(0, EUExCallback.F_E_AUDIO_SOUND_STOP_PARAMETER_ERROR_CODE, /* "参数错误" */finder.getString(mContext, "plugin_audio_parameter_error")); } } public void closeSoundPool(String[] parm){//关闭所有 if(soundList.size()>0){ for(String item:soundList){ String inStreamID = item.substring(item.lastIndexOf(',')+1); m_pfMusicPlayer.stopSound(Integer.parseInt(inStreamID.trim())); } soundList.removeAll(soundList); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (F_ACT_REQ_CODE_UEX_AUDIO_RECORD == requestCode) { if (resultCode == Activity.RESULT_OK) { String returnPath = data.getStringExtra(AudioRecorderActivity.INTENT_KEY_AUDIO_RECORD_RETURN_PATH); jsCallback(EUExAudio.F_CALLBACK_NAME_AUDIO_RECORD, 0, EUExCallback.F_C_TEXT, returnPath); } } } @Override public boolean clean() { if (m_pfMusicPlayer != null) { m_pfMusicPlayer.stop(); for (Integer id : IdsList) { m_pfMusicPlayer.stopSound(id); } IdsList.clear(); m_pfMusicPlayer = null; } return true; } }