Pra*_*kar 12 java audio android soundpool
我正在关注一个Android编程视频讲座系列,它是在API之前设计的21次.因此它告诉我以下面的方式创建一个SoundPool变量.
SoundPool sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
//SoundPool(int maxStreams, int streamType, int srcQuality)
Run Code Online (Sandbox Code Playgroud)
但是,我也希望将此SoundPool用于API 21.所以,我这样做:
if((android.os.Build.VERSION.SDK_INT) == 21){
sp21 = new SoundPool.Builder();
sp21.setMaxStreams(5);
sp = sp21.build();
}
else{
sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
}
Run Code Online (Sandbox Code Playgroud)
sp21是BuilderAPI 21 的类型变量,sp是SoundPool类型的变量.
这与我的具有API 21的AVD和具有API 19的真实设备非常适用.(没有尝试使用具有API 21的真实设备但我认为它将工作良好).现在,我想在之前将if 设置为streamTypeto .所以我键入:USAGE_MEDIAsp = sp21.build();
sp21.setAudioAttributes(AudioAttributes.USAGE_MEDIA);
Run Code Online (Sandbox Code Playgroud)
但是Lint用红色标记它说:
SoundPool.Builder类型中的方法setAudioAttributes(AudioAttributes)不适用于参数(int)
我知道即使我没有将它设置为USAGE_MEDIA,它默认也会设置为相同.但是我要求将来参考,如果我必须将它设置为其他类似的东西:USAGE_ALARM.
我该怎么办?
请帮忙!
小智 18
AudioAttributes实例是通过其构建器AudioAttributes.Builder构建的.
您可以通过以下方式使用它.
sp21.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build());
Run Code Online (Sandbox Code Playgroud)
参考:https://developer.android.com/reference/android/media/AudioAttributes.html
小智 16
我有点要补充一下.我在我的游戏应用程序中使用SoundPool来播放小而简单的ogg音频文件.它甚至在使用API 21的模拟器上工作正常.今天我决定修改它以使用SoundPool.Builder().
我查看了Android的SoundPool.Builder文档.它说那里
public static class
SoundPool.Builder
extends Object
java.lang.Object
? android.media.SoundPool.Builder
Class Overview
Builder class for SoundPool objects.
Run Code Online (Sandbox Code Playgroud)
请注意"SoundPool对象的Builder类"行.所以SoundPool.Builder()创建了SoundPool对象.SoundPool()还会创建SoundPool对象.所以这就是我所做的.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
AudioAttributes audioAttrib = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build();
mSound = new SoundPool.Builder().setAudioAttributes(audioAttrib).setMaxStreams(6).build();
}
else {
mSound = new SoundPool(6, AudioManager.STREAM_MUSIC, 0);
}
Run Code Online (Sandbox Code Playgroud)
mSound声明为
private SoundPool mSound;
Run Code Online (Sandbox Code Playgroud)
其余的代码(我加载,播放,停止,释放声音的地方)仍然与之前完全一样.它在API 21及更早版本中运行
希望这能帮到你们所有人