在 SoundPool.Builder class 中为 API 设置音频属性 21
set Audio Attributes in SoundPool.Builder class for API 21
我正在关注 Android 前 API 21 次设计的编程视频讲座系列。因此它告诉我以下列方式创建一个 SoundPool 变量。
SoundPool sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
//SoundPool(int maxStreams, int streamType, int srcQuality)
不过,我也想将此 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);
}
sp21是Builder
类型的变量,用于API21,sp是SoundPool
类型的变量。
这适用于我的 AVD API 21 和真实设备 API 19。(还没有尝试过 API 21 的真实设备,但我认为它将运作良好)。现在,我想在 sp = sp21.build();
之前的 if 块中将 streamType
设置为 USAGE_MEDIA
。所以我输入:
sp21.setAudioAttributes(AudioAttributes.USAGE_MEDIA);
但是 Lint 将其标记为红色并表示:
The method setAudioAttributes(AudioAttributes) in the type
SoundPool.Builder is not applicable for the arguments (int)
我知道即使我不设置成USAGE_MEDIA也会默认设置成一样的。但如果我必须将其设置为其他内容,我会要求将来参考:USAGE_ALARM.
我应该如何进行?
请帮忙!
我已经提到了Audio Attributes, SoundPool, SoundPool.builder and AudioManager。
AudioAttributes 实例是通过其构建器构建的,AudioAttributes.Builder。
您可以通过以下方式使用。
sp21.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build());
参考:https://developer.android.com/reference/android/media/AudioAttributes.html
我有话要补充。
我在我的游戏应用程序中使用 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.
注意行 "Builder class for SoundPool objects."
所以 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);
}
mSound 声明为
private SoundPool mSound;
其余代码(我加载、播放、停止、释放声音的地方)与之前完全相同。它适用于 API 21 和更早版本
希望对大家有所帮助
我正在关注 Android 前 API 21 次设计的编程视频讲座系列。因此它告诉我以下列方式创建一个 SoundPool 变量。
SoundPool sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
//SoundPool(int maxStreams, int streamType, int srcQuality)
不过,我也想将此 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);
}
sp21是Builder
类型的变量,用于API21,sp是SoundPool
类型的变量。
这适用于我的 AVD API 21 和真实设备 API 19。(还没有尝试过 API 21 的真实设备,但我认为它将运作良好)。现在,我想在 sp = sp21.build();
之前的 if 块中将 streamType
设置为 USAGE_MEDIA
。所以我输入:
sp21.setAudioAttributes(AudioAttributes.USAGE_MEDIA);
但是 Lint 将其标记为红色并表示:
The method setAudioAttributes(AudioAttributes) in the type SoundPool.Builder is not applicable for the arguments (int)
我知道即使我不设置成USAGE_MEDIA也会默认设置成一样的。但如果我必须将其设置为其他内容,我会要求将来参考:USAGE_ALARM.
我应该如何进行?
请帮忙!
我已经提到了Audio Attributes, SoundPool, SoundPool.builder and AudioManager。
AudioAttributes 实例是通过其构建器构建的,AudioAttributes.Builder。
您可以通过以下方式使用。
sp21.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build());
参考:https://developer.android.com/reference/android/media/AudioAttributes.html
我有话要补充。 我在我的游戏应用程序中使用 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.
注意行 "Builder class for SoundPool objects." 所以 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);
}
mSound 声明为
private SoundPool mSound;
其余代码(我加载、播放、停止、释放声音的地方)与之前完全相同。它适用于 API 21 和更早版本
希望对大家有所帮助