/* * This file is part of WhereYouGo. * * WhereYouGo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WhereYouGo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with WhereYouGo. If not, see <http://www.gnu.org/licenses/>. * * Copyright (C) 2012 Menion <whereyougo@asamm.cz> */ package menion.android.whereyougo.utils.audio; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.util.Hashtable; import menion.android.whereyougo.R; import menion.android.whereyougo.utils.A; import menion.android.whereyougo.utils.FileSystem; import menion.android.whereyougo.utils.Logger; import menion.android.whereyougo.utils.Utils; import android.content.Context; import android.content.Intent; import android.media.AudioManager; import android.media.SoundPool; /** * @author menion * @since 15.3.2010 2010 */ public class ManagerAudio { private static final String TAG = "ManagerAudio"; public static final int SOUND_POOL_BEEP = 1001; private SoundPool soundPool; private Hashtable<Integer, Integer> soundPoolMap; public ManagerAudio() { soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); soundPoolMap = new Hashtable<Integer, Integer>(); soundPoolMap.put(SOUND_POOL_BEEP, soundPool.load(A.getApp(), R.raw.sound_beep_01, 1)); } public void putAudio(int audioId, String fileName, String fileEnd, InputStream is) { try { byte[] data = new byte[is.available()]; is.read(data); Utils.closeStream(is); String filePath = FileSystem.ROOT + FileSystem.CACHE_AUDIO + Utils.hashString(fileName) + "." + fileEnd; FileSystem.saveBytes(filePath, data); soundPoolMap.put(audioId, soundPool.load(filePath, 1)); } catch (Exception e) { Logger.e(TAG, "putAudio(" + audioId + ", " + fileName + ", " + is + ")", e); } } public void putAudio(int audioId, String filePath) { try { soundPoolMap.put(audioId, soundPool.load(filePath, 1)); } catch (Exception e) { Logger.e(TAG, "putAudio(" + audioId + ")", e); } } public void removeAudio(int audioId) { try { soundPool.unload(audioId); soundPoolMap.remove(audioId); } catch (Exception e) { Logger.e(TAG, "removeAudio(" + audioId + ")", e); } } private long lastVolumeCheck; private float volume; public void playSound(int sound) { if (volume == 0.0f || (System.currentTimeMillis() - lastVolumeCheck) > 1000) { /* The next 4 lines calculate the current volume in a scale of 0.0 to 1.0 */ AudioManager mgr = (AudioManager) A.getMain().getSystemService(Context.AUDIO_SERVICE); float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC); float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC); volume = streamVolumeCurrent / streamVolumeMax; lastVolumeCheck = System.currentTimeMillis(); } /* Play the sound with the correct volume */ soundPool.play(soundPoolMap.get(sound), volume, volume, 1, 0, 1f); } public void playMp3File(String fileName, String fileEnd, InputStream is) { try { // load data byte[] data = new byte[is.available()]; is.read(data); Utils.closeStream(is); // write data File fileMp3 = new File(FileSystem.ROOT + FileSystem.CACHE_AUDIO + fileName + fileEnd); if (fileMp3.exists()) fileMp3.delete(); fileMp3.getParentFile().mkdirs(); FileOutputStream fos = new FileOutputStream(fileMp3); fos.write(data); fos.flush(); Utils.closeStream(fos); //Logger.d(TAG, "playMp3File(), file:" + fileMp3.getAbsolutePath() + ", " + fileMp3.exists()); // version 01 - good for MP3, wrong on WAV for unknown reason // new AudioClip(fileMp3.getAbsolutePath(), false).play(); // version 02 - as service Intent intent = new Intent(A.getMain(), AudioPlayService.class); intent.putExtra(AudioPlayService.EXTRA_FILEPATHS, fileMp3.getAbsolutePath()); intent.putExtra(AudioPlayService.EXTRA_DELETE_FILE, false); intent.putExtra(AudioPlayService.EXTRA_PLAY_AS_NOTIFICATION, false); A.getMain().startService(intent); } catch (Exception e) { Logger.e(TAG, "playMp3File(" + fileName + ", " + fileEnd + ", " + is + ")", e); } } }