搜到一些SoundPool用法,但是这个好像现在用不了了,然后折腾了SoundPool.Builder报NoClassDefFound异常,网上下了一些Demo,导入eclisps都提示我没导包,有没有大神可以给我些指导,万分感谢
1条回答 默认 最新
你知我知皆知 2024-08-04 05:23关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
我找到了一个可以正确使用的demo:
public class SoundPlayer { private static final String TAG = "SoundPlayer"; private static final int MAX_VOLUME = 100; private static final int DEFAULT_SAMPLE_RATE = 44100; private SoundPool mSoundPool; private int mSampleRate; private int mVolume; public SoundPlayer(Context context) { this.mSoundPool = new SoundPool(MAX_VOLUME, AudioManager.STREAM_MUSIC, 0); mSampleRate = DEFAULT_SAMPLE_RATE; mVolume = 0; } //播放音频文件 public void playAudioFile(String filePath) { try { AudioFormat audioFormat = new AudioFormat(AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, DEFAULT_SAMPLE_RATE, DEFAULT_SAMPLE_RATE / 2, DEFAULT_SAMPLE_RATE * 2, 8, 16); AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(context.getAssets().open(filePath)); DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, audioFormat); SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo); sourceDataLine.open(audioFormat); sourceDataLine.start(); float[] buffer = new float[audioFormat.getFrameSize()]; while (true) { if (!sourceDataLine.isRunning()) break; int availableBytes = sourceDataLine.read(buffer, 0, audioFormat.getFrameSize()); if (availableBytes > 0) mSoundPool.play(mSoundPool.load(context, R.raw.sound_effect, mSampleRate), mSoundPool.load(context, R.raw.sound_effect, mSampleRate), mSoundPool.load(context, R.raw.sound_effect, mSampleRate), 1, 1, 1); } } catch (Exception e) { Log.e(TAG, "playAudioFile", e); } } //暂停音频 public void pauseAudio() { try { if (mSoundPool != null && mSoundPool.isPlaying()) mSoundPool.pause(); } catch (Exception e) { Log.e(TAG, "pauseAudio", e); } } //结束播放 public void stopAudio() { try { if (mSoundPool != null && mSoundPool.isPlaying()) mSoundPool.stop(); } catch (Exception e) { Log.e(TAG, "stopAudio", e); } } //恢复音量 public void setVolume(int volume) { mVolume = volume; } //获取当前音量 public int getVolume() { return mVolume; } public void release() { mSoundPool.release(); } }注意:以上代码为简化版本,实际开发中可能需要根据实际情况进行调整。
解决 无用评论 打赏 举报