gpt4 book ai didi

android - 安卓游戏音效

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:51:24 25 4
gpt4 key购买 nike

我正在用 Android 开发一个简单的游戏。我想为每个触摸添加音效事件。但是我添加了贯穿整个游戏的背景音效。但如何为触摸游戏的任何角色添加微小的声音效果。为了更好地理解以下是我的类(class)设计:我有一个主要 Activity ,从那里我正在调用我的 GameView 类扩展表面 View 。对于免费声音,我刚刚在 mainActivity 中创建了声音,然后调用该 GameView 类如下所示:

public class MainActivity extends Activity {
MediaPlayer backgroundMusic;



@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
backgroundMusic = MediaPlayer.create(MainActivity.this, R.raw.bg);


backgroundMusic.setLooping(true);
backgroundMusic.setVolume(10.0f, 3.0f);
backgroundMusic.start();

setContentView(new GameView(this));
}
}

下面是我的 GameView 类。我想在这个类的 onTouchEvent 中添加音效,如下所示:

public class GameView extends SurfaceView {
@Override
public boolean onTouchEvent(MotionEvent event) {
//checking condition I want to give different sound here.

}
}

我尝试将其作为 mainActivity 来执行(即使用 MediaPlayer.creat() ),但它显示错误。有人知道如何在我的类(class)设计的基础上添加这样的音效吗?

最佳答案

对于爆炸、硬币收集等短音效,最好使用SoundPool

你只需要创建一个声音池:

SoundPool sp = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);

在 Lollipop 及更高版本中:

AudioAttributes attrs = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build();
SoundPool sp = new SoundPool.Builder()
.setMaxStreams(10)
.setAudioAttributes(attrs)
.build();

这将创建最大的声音池。 10 个声音流(即一次可以同时播放多少个声音效果)并使用 AudioManager.STREAM_MUSIC 作为声音流。

请务必在您的 Activity 中设置音量控制,以便用户能够更改适当流的音量:

setVolumeControlStream(AudioManager.STREAM_MUSIC);

然后,您需要将音效加载到池中并为它们提供标识符:

int soundIds[] = new int[10];
soundIds[0] = sp.load(context, R.raw.your_sound, 1);
//rest of sounds goes here

您需要将上下文传递给加载方法,因此您要么在 Activity 中执行此操作,要么从其他地方获取。

播放声音的最后一步是调用play方法:

sp.play(soundIds[0], 1, 1, 1, 0, 1.0);

参数是:

  • soundID load() 函数返回的 soundID

  • leftVolume 左音量值(范围 = 0.0 到 1.0)

  • rightVolume 右音量值(范围 = 0.0 到 1.0)

  • priority 流优先级(0 = 最低优先级)

  • loop 循环模式(0 = 不循环,-1 = 永远循环)

  • rate 播放速率(1.0 = 正常播放,范围 0.5 到 2.0)

您需要记住,SoundPool 不应使用超过 1MB 的媒体文件,文件越小,效果和性能越好。

确保在完成后释放 SoundPool,或者在 Activity.onDestroy 中释放。

sp.release();

希望对你有帮助

关于android - 安卓游戏音效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19272646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com