Libgdx之Music Sound 音效

您所在的位置:网站首页 mymusicmp3官网 Libgdx之Music Sound 音效

Libgdx之Music Sound 音效

2023-08-18 20:59| 来源: 网络整理| 查看: 265

教程总目录: http://blog.csdn.net/zqiang_55/article/details/50878524

一个好的游戏,如果没有游戏音效那么这个游戏就过于简单乏味。Libgdx中常用的游戏音效有2中,一种是Music,这种音频文件以流媒体的方式加载,一般文件比较大。还有一种是Audio,这种音频文件一般比较小,直接加载在内存中,主要用于枪声、起跳的声音。

Libgdx支持ogg, mp3, wav文件格式,官方推荐ogg。 但是个人感觉没必要非得去转换为ogg,那个文件格式小就用那个。Note:1. RoboVM (iOS) 不支持 OGG 文件类型。 2. 在Android设备上Sound文件不要超过1M,如果超过请用Music接口。

Audio接口

Audio接口是用来生成Music和Sound文件的,主要用来管理各种音频文件,底层是在backends里面实现的。 这里写图片描述

所有用Audio生成的对象,最后都需要调用dispose来销毁Music 对象自动调用pause方法当ApplicationListener调用pause方法时。自动调用resume Music接口

这里写图片描述 从上面类图中可以看出Music中常用的方法,而且还设置了音乐播放完成之后的监听函数

public void setPan (float pan, float volume); 这个方法时设置声音的左右声道,pan=-1是左声道,pan=1是右声道,pan=0声音中间。volume取值在[0,1]。 这个方法可以用在声音由远及近。

Sound接口

这里写图片描述

这里提几个要注意的地方。1. 从上面类图可以看出play方法返回一个long值,这与Music类不同,主要是这个long值代表了当前正在播放的sound的一个值,因为有时候Sound对象可能需要播放多次,这时你想让某一个正在播放的sound对象进行具体操作就可以用到这个long值。2. setPitch方法,这个方法主要用来设置游戏音调,比如说游戏引擎的声音。

long id = sound.play(1.0f); // play new sound and keep handle for further manipulation sound.stop(id); // stops the sound instance immediately sound.setPitch(id, 2); // increases the pitch to 2x the original pitch id = sound.play(1.0f); // plays the sound a second time, this is treated as a different instance sound.setPan(id, -1, 1); // sets the pan of the sound to the left side at full volume sound.setLooping(id, true); // keeps the sound looping sound.stop(id); // stops the looping sound

测试代码,测试代码包括测试音效的左右声道

private static final String TAG = AudioTest.class.getSimpleName(); Music music; Sound sound; Stage stage; BitmapFont font; Label labelMusic, labelSound, soundLeft, soundRight; long soundId; @Override public void create() { music = Gdx.audio.newMusic(Gdx.files.internal("sound/song_1.mp3")); music.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(Music music) { Gdx.app.log(TAG, "music completed"); } }); sound = Gdx.audio.newSound(Gdx.files.internal("sound/car-engine.wav")); stage = new Stage(); Gdx.input.setInputProcessor(stage); font = new BitmapFont(); font.getData().setScale(2.0f); Label.LabelStyle style = new Label.LabelStyle(); style.font = font; labelMusic = new Label("Music Test", style); labelMusic.setPosition(20, Gdx.graphics.getHeight() / 2); labelMusic.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { music.play(); Gdx.app.log(TAG, "play music"); } }); labelSound = new Label("Sound Test", style); labelSound.setPosition((Gdx.graphics.getWidth() - labelSound.getWidth()) / 2, 20); labelSound.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { Gdx.app.log(TAG, "play sound"); soundId = sound.play(); sound.setLooping(soundId, true); } }); soundLeft = new Label("Left Test", style); soundLeft.setPosition(20, 20); soundLeft.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { Gdx.app.log(TAG, "Left sound"); sound.setPan(soundId, -1, 1.0f); } }); soundRight = new Label("Right Test", style); soundRight.setPosition(Gdx.graphics.getWidth() - soundRight.getWidth() - 50, 20); soundRight.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { Gdx.app.log(TAG, "Left sound"); sound.setPan(soundId, 1, 1.0f); } }); stage.addActor(labelMusic); stage.addActor(labelSound); stage.addActor(soundLeft); stage.addActor(soundRight); } @Override public void render() { Gdx.gl.glClearColor(0.39f, 0.58f, 0.92f, 1.0f); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); stage.act(); stage.draw(); } @Override public void dispose() { music.dispose(); font.dispose(); stage.dispose(); }

这里写图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3