https://manuais.iessanclemente.net/index.php?title=LIBGDX_Musica_son&feed=atom&action=historyLIBGDX Musica son - Historial de revisiones2024-03-29T05:27:41ZHistorial de revisiones de esta página en el wikiMediaWiki 1.36.2https://manuais.iessanclemente.net/index.php?title=LIBGDX_Musica_son&diff=56348&oldid=prevAngelfg: /* Introdución */2015-05-02T17:57:23Z<p><span dir="auto"><span class="autocomment">Introdución</span></span></p>
<p><b>Página nueva</b></p><div><span style="font-size:150%;">UNIDADE 2: Música e efectos de son</span><br />
<br />
===Introdución===<br />
<br />
Aínda que non o pareza a música e efectos de son son moi importantes para un xogo. Agora mesmo como tedes o xogo non 'engancha' moito, pero xa veredes como cambia a cousa cando poñamos a música e os efectos de son.<br />
<br />
Algúns dos recursos que temos en Internet son:<br />
<br />
* Música: http://dig.ccmixter.org<br />
* Efectos de son: <br />
::http://www.soundboard.com/category/Sound-Effects<br />
::http://www.sonidosmp3gratis.com/download.php?sonido=claxon%20de%20coche<br />
::http://www.drpetter.se/project_sfxr.html: Programa para xerar sons de tipo arcade.<br />
<br />
===Efectos de son===<br />
<br />
Información da wiki: https://github.com/libgdx/libgdx/wiki/Sound-effects<br />
<br />
Os efectos de son a diferenza da música, son sons que duran uns segundos e que son tocados cando se produce algún evento no xogo.<br />
<br />
A clase que manexa os sons é a [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/audio/Sound.html clase Sounds].<br />
<br />
A forma que temos de cargar un arquivo será a seguinte:<br />
<br />
<syntaxhighlight lang="java" line enclose="div"><br />
Sound son = Gdx.audio.newSound(Gdx.files.internal("data/arquivo_son.mp3"));<br />
</syntaxhighlight><br />
<br />
Veremos no punto [http://manuais.iessanclemente.net/index.php?title=LIBGDX_Gardando_datos Gardando datos] que daremos despois, explicamos que Gdx.files.internal fai referencia ó cartafol assets do proxecto Android.<br />
<br />
Podedes ver todos os métodos dispoñibles no enlace anterior da clase Sound.<br />
Entre eles temos:<br />
<br />
<br />
* [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/audio/Sound.html#play-- play()]: toca o son. Está sobrecargado e pode usarse a versión no que se lle envía o nivel de volume.<br />
:Dito método devolve un id (long) o cal pode ser usado para:<br />
<br />
:: [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/audio/Sound.html#setLooping-long-boolean- Facer looping]: que se repita o son.<br />
:: [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/audio/Sound.html#setVolume-long-float- Modificar o volume]: modifica o volume do son. Valores entre 0 e 1.<br />
<br />
* [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/audio/Sound.html#stop-- Método stop]: para de tocar.<br />
<br />
* [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/audio/Sound.html#dispose-- Método dispose]: libera o son da memoria. Necesario facelo ó saír do xogo.<br />
<br />
<br />
<br />
Por exemplo:<br />
<syntaxhighlight lang="java" line enclose="div"><br />
Sound son = Gdx.audio.newSound(Gdx.files.internal("data/arquivo_son.mp3"));<br />
son.play();<br />
son.dispose();<br />
</syntaxhighlight><br />
<br />
<br />
<br />
===Música===<br />
<br />
<br />
Información da wiki: https://github.com/libgdx/libgdx/wiki/Streaming-music<br />
<br />
A diferenza dos efectos de son que se gardan en memoria, a música é cargada do disco cando se necesita.<br />
Sempre deberemos utilizar esta opción cando teñamos unha música de fondo.<br />
<br />
A música de fondo soe ocupar moito espazo en disco polo que é aconsellable editala e reducir a súa calidade (frecuencia de muestreo, canal mono,....)<br />
<br />
Un programa para facer isto é o Audicity: http://audacity.sourceforge.net/?lang=es<br />
<br />
<br />
Unha vez temos a música no cartafol assets da versión Android podemos utilizala facendo uso da [https://github.com/libgdx/libgdx/wiki/Streaming-music clase Music].<br />
<br />
<syntaxhighlight lang="java" line enclose="div"><br />
Music musica = Gdx.audio.newMusic(Gdx.files.internal("data/arquivo_musica.mp3"));<br />
</syntaxhighlight><br />
<br />
<br />
Entre os métodos a utiliza temos:<br />
<br />
* [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/audio/Music.html#play-- Método play]: reproduce o arquivo de audio.<br />
* [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/audio/Music.html#isPlaying-- Método isPlaying]: devolve un boolean indicando se a música segue tocando.<br />
* [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/audio/Music.html#isPlaying-- Método isLooping]: devolve un boolean indicando se a música non vai parar.<br />
* [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/audio/Music.html#getPosition-- Método getPosition]: devolve a posición en segundos.<br />
* [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/audio/Music.html#setVolume-float- Modificar o volume]: modifica o volume do son. Valores entre 0 e 1.<br />
* [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/audio/Music.html#stop-- Método stop]: para de tocar.<br />
* [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/audio/Music.html#dispose-- Método dispose]: libera o son da memoria. Necesario facelo ó saír do xogo.<br />
<br />
<br />
<br />
<br />
Por exemplo:<br />
<syntaxhighlight lang="java" line enclose="div"><br />
Music musica = Gdx.audio.newMusic(Gdx.files.internal("data/arquivo_musica.mp3"));<br />
musica .setVolume(0.5f); <br />
musica .setLooping(true);<br />
musica .stop(); <br />
musica.dispose();<br />
</syntaxhighlight><br />
<br />
<br />
<br />
-----<br />
'''TAREFA 2.12 A FACER:''' Esta parte está asociada á realización dunha tarefa. <br />
-----<br />
<br />
===Efectos de son aleatorios===<br />
<br />
No noso xogo queremos que cada certo tempo se escoite un son de claxon.<br />
<br />
Para facer isto temos dúas opcións:<br />
<br />
*Opción a): <br />
:*Definir unha variable no método controlarXogo de tipo float: float tempo=0;<br />
:*Sumarlle delta: tempo+=delta dentro do método update e cada certo tempo facer tocar o claxon:<br />
:::<br />
<syntaxhighlight lang="java"><br />
tempo+=delta;<br />
if(tempo>=2f){<br />
tempo=0f;<br />
Audio.claxon[0].play();<br />
}<br />
</syntaxhighlight> <br />
<br />
*Opción b):<br />
<br />
Utilizar a [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/utils/Timer.html clase Timer].<br />
<br />
Esta clase permite cada certo tempo e optativamente, de forma continuada, realizar [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/utils/Timer.Task.html unha tarefa (Task)].<br />
<br />
O proceso para o que nos ocupa sería:<br />
<br />
Definimos na clase Audio e dentro do método incializarMusica (feito na tarefa anterior) un array de efectos de son para os coches:<br />
<br />
<br />
'''Código da clase Audio'''<br/><br />
'''Obxectivo:''' definir un array de son para os tipos de claxon.<br />
<syntaxhighlight lang="java"><br />
public static Sound claxon[] = new Sound[3];<br />
...............<br />
public static void inicializarMusica() {<br />
claxon[0] = Gdx.audio<br />
.newSound(Gdx.files.internal("MUSICA/LIBGDX_claxon.mp3"));<br />
claxon[1] = Gdx.audio<br />
.newSound(Gdx.files.internal("MUSICA/LIBGDX_claxon2.mp3"));<br />
claxon[2] = Gdx.audio<br />
.newSound(Gdx.files.internal("MUSICA/LIBGDX_claxon3.mp3"));<br />
....................<br />
}<br />
<br />
</syntaxhighlight> <br />
<br />
<u>Nota:</u> Os arquivos de audio os tedes subidos previamente na realización da tarefa 2.12.<br />
<br />
<br />
Agora definimos na mesma clase unha tarefa para tocar o claxon. Necesitamos definila (poderíamos crear unha tarefa sen ter referencia a ela, de forma anónima) xa que cando vaiamos á pantalla de pausa, temos que parar os claxon´s e volvelos a poñer en marcha cando volvamos á pantalla do xogo.<br />
<br />
<br />
'''Código da clase Audio'''<br/><br />
'''Obxectivo:''' definir a tarefa para que cada certo tempo toque un claxon.<br />
<syntaxhighlight lang="java" line enclose="div" highlight="" ><br />
public class Audio {<br />
................<br />
private static Task claxonCoches;<br />
public static void iniciarClaxon(){<br />
claxonCoches = new Task(){<br />
<br />
@Override<br />
public void run() {<br />
// TODO Auto-generated method stub<br />
Audio.claxon[MathUtils.random(0, 2)].play();<br />
}<br />
};<br />
<br />
Timer.schedule(claxonCoches, 0, 2f);<br />
<br />
}<br />
<br />
public static void paraClaxon(){<br />
claxonCoches.cancel();<br />
}<br />
................<br />
}<br />
</syntaxhighlight> <br />
<br />
<br />
Agora só temos que chamar a ditos métodos dende a pantalla do xogo.<br />
<br />
'''Código da clase PantallaXogo'''<br/><br />
'''Obxectivo:''' iniciar e deter o claxon dos coches en función se estamos xogando ou en pausa/saír.<br />
<syntaxhighlight lang="java" line enclose="div" highlight="8,15,24" ><br />
<br />
@Override<br />
public void show() {<br />
// TODO Auto-generated method stub<br />
Gdx.input.setInputProcessor(this);<br />
if (pause) Audio.playMusica();<br />
pause=false;<br />
Audio.auga.play();<br />
Audio.iniciarClaxon();<br />
}<br />
@Override<br />
public void hide() {<br />
// TODO Auto-generated method stub<br />
Audio.auga.stop();<br />
if ((finXogo) || (sair)) dispose();<br />
Audio.paraClaxon();<br />
}<br />
<br />
@Override<br />
public void resume() {<br />
// TODO Auto-generated method stub<br />
Gdx.input.setInputProcessor(this);<br />
pause=false;<br />
Audio.playMusica();<br />
Audio.iniciarClaxon();<br />
<br />
}<br />
................<br />
</syntaxhighlight> <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br> -- [[Usuario:angelfg|Ángel D. Fernández González]] -- (2014).</div>Angelfg