- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在做一个项目,我必须在一个 Activity 中加载 6 种不同的声音,并在单击按钮时播放所有声音。声音文件不是很大,但问题是它们可能会更多。所以我的问题是哪个是在单个 Activity 中加载声音文件的最快方法。出于测试目的,我使用 res/raw 文件夹来存储声音文件并尝试使用两种不同的方法来播放文件,但结果并不令我满意。这是两种不同类型的代码:
方法一:
Button first = (Button) findViewById(R.id.one);
Button second = (Button) findViewById(R.id.two);
first.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MediaPlayer mp = MediaPlayer.create(SoundFXActivity.this, R.raw.drumtwo);
mp.start();
mp.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.release();
}
});
}
});
second.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MediaPlayer mp = MediaPlayer.create(SoundFXActivity.this, R.raw.drumone);
mp.start();
mp.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.release();
}
});
}
});
方法二:
private SoundPool spool;
private int soundID,soundID2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
spool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
soundID = spool.load(this, R.raw.drumone, 1);
soundID2 = spool.load(this, R.raw.drumtwo, 1);
Button three = (Button) findViewById(R.id.three);
three.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Sound();
}
});
}
public void Sound(){
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
float volume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
spool.play(soundID, volume, volume, 1, 0, 1f);
};
但问题是这两种方法都很慢..我需要找到一种更快的方法来播放声音..但是现在我点击按钮播放声音后几乎有一秒钟。
你能给我一些建议如何更快地播放声音吗?我应该在应用程序启动时将它们加载到缓存中还是将它们保存在数据库或其他地方(我认为数据库不是一个好的选择事实上,但我想听听一些建议)。或者也许从 Assets 文件夹加载它们,但我认为它仍然会很慢。
那么有什么想法或建议吗?提前致谢!
最佳答案
您可以在 onCreate
中创建媒体播放器,然后按钮会让它们播放。我会说,那将是最简单的解决方案。
或者,根据它对您的重要性以及您想要完成的工作量,您可以考虑使用 JetPlayer:
这是媒体的 android 开发页面:
http://developer.android.com/guide/topics/media/index.html
JetPlayer类的页面:
http://developer.android.com/reference/android/media/JetPlayer.html
以及创建 JET 文件的页面:
http://developer.android.com/guide/topics/media/jet/jetcreator_manual.html
如果您实现了它,它可能会工作得最好,但绝对是最有效的。
JetPlayer 基本上可以让您拥有一个音频文件(我认为它是一个 MIDI 文件),其中包含多个轨道,您可以随意静音和取消静音。我个人没有这方面的经验,只是阅读了一些文档,但它似乎对任何有不止一种声音的情况都非常有用。
编辑:此外,值得一提的是this mailing list万一链接发生变化this google search如果有人对 android 音频主题感兴趣。
关于Android 在应用程序中加载和播放声音的最快方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7264261/
我正在开发一个需要能够平均三个数字的 Facebook 应用程序。但是,它总是返回 0 作为答案。这是我的代码: $y = 100; $n = 250; $m = 300; $number = ($y
我只是无法弄清楚这一点,也找不到任何对我来说有意义的类似问题。我的问题:我从数据库中提取记录,并在我的网页上以每个面板 12 条的倍数显示它们。因此,我需要知道有多少个面板可以使用 JavaScrip
我是一名优秀的程序员,十分优秀!