Sign in to follow this  
Followers 0
Fegarur

Crear M?sicas

3 posts in this topic

Descripción:
Gracias a este script podrás crear sin demasiada dificultad tus melodías para usarlas en el RMXP. El programa las leerá de un archivo *.txt o un archivo *.rxdata, que será lo que editaremos. Se necesitan 'instrumentos', sonidos de instrumentos para que suenen.

Demo:
Descargar Demo (MegaUpload)
Descargar Demo (FileFront)
Descargar Demo (Fortaleza Friki)

Script:
Está divivido en dos partes:
user posted image Parte 1: [SPOILER]
CODE
class CustomSong
 def initialize
   @music = load
   @position = 0
   @length = @music.size
   @loop = 0
   @pause = 0
   @speed = 5
   @wait = 0
   @echos = []
 end
 def setup(new)
   @music = new
   @position = 0
   @length = @music.size
   @loop = 0
   @pause = 0
   @speed = 5
   @wait = 0
   @echos = []
 end
 def update
   # Echo playing
   for i in [email protected]
     e = @echos[i]
     e[4] -= 1
     if e[4] != 0
       next
     end
     e[4] = e[3]
     vop = e[2]
     pct = (vop * 100) / (e[1] + 1)
     for ins in @music[e[0]]
       if ins[0,1] != "="
         letter = ins[0,1]
         vol = ins[1,1]
         volume = (alphabet.index(vol)*100)/alphabet.size
         volume = (pct * volume) / 100
         pitch = 50+(ins[2,2].to_i*100)/99
         name = "instrument_" + letter.downcase
         snd = RPG::AudioFile.new(name, volume, pitch)
         $game_system.se_play(snd)
       end
     end
     e[2] -= 1
   end
   if @pause != 0
     @pause -= 1
     return
   end
   if @wait == 0
     line = @music[@position]
     do_line(line)
     @position += 1
     if @position == @length
       @position = @loop
     end
     @wait = @speed
   end
   @wait -= 1
 end
 def do_line(l)
   for ins in l
     if ins[0,1] == "="  # It is an ACTION
       case ins[1,3]
       when "SPD"
         @speed = ins[5,ins.size-5].to_i
       when "PSE"
         if ins[5,ins.size-5].upcase != "X"
           @pause = ins[5,ins.size-5].to_i
         else
           @pause = @speed
         end
       when "ECO"
         line = ins[5,1].to_i
         ecos = ins[7,2].to_i
         ecos = [[ecos, 1].max, 15].min
         time = ins[10,1].to_i
         echo = [@position-line,ecos,ecos,time,time]
         #   Echo array:
         # 0  Echo Line
         # 1  # of Echos
         # 2  Echos still left
         # 3  Delay time
         # 4  Time remaining for the next echo
         if line != 0 and ecos != 0 and time != 0
           @echos.push(echo)
         end
       when "LOP"
         @loop = @position
       end
     else                # It is a NOTE
       letter = ins[0,1]
       vol = ins[1,1]
       volume = (alphabet.index(vol)*100)/alphabet.size
       pitch = 50+(ins[2,2].to_i*100)/99
       name = "instrument_" + letter.downcase
       snd = RPG::AudioFile.new(name, volume, pitch)
       $game_system.se_play(snd)
     end
   end
 end
end
[/SPOILER]
user posted image Parte 2: [SPOILER]
CODE
class CustomSong
 def alphabet
   part1 = ['A','B','C','D','E','F','G','H','I','J','K','L','M']
   part2 = ['N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
   return part1+part2
 end
 def load(filen = "")
   if filen == ""
     return [["AA00"]]
   end
   if FileTest.exist?("Audio/Custom/"+filen+".rxdata")
     filen = "Audio/Custom/"+filen+".rxdata"
   elsif FileTest.exist?("Audio/Custom/"+filen+".txt")
     filen = "Audio/Custom/"+filen+".txt"
   else
     if $DEBUG
       head = "  ALERTA CANCIÓN PERSONALIZADA:\n"
       print(head+"No se encuentra la canción" + filen + ".")
     end
     return [["AA00"]]
   end
   file = open(filen, "r")
   file.pos = 0
   lines = file.readlines
   for line in lines
     if line.include?("\n")
       line.slice!("\n")
     end
   end
   song = []
   for i in 0...lines.size
     l = lines[i]
     if l == "" or l[0,1] == " " or l[0,1] == "/"
       next
     end
     if not l.include?(" ")
       song[i] = [l]
     else
       if l[l.size-1, 1] != " "
         l += " "
       end
       p = 0
       song[i] = []
       while p < l.size
         ins = ""
         while l[p,1] != " "
           p += 1
         end
         ins = l[0,p]
         song[i].push(ins)
         p += 1
         l = l[p,l.size-p]
         p = 0
       end
     end
   end
   if song.include?(nil)
     song.compact!
   end
   return song
 end
end
[/SPOILER]

Instrucciones:
A ver... por dónde empezamos... Supongo que por el principio.

Necesitas crear un archivo de texto, por comodidad abre el Bloc de Notas. xD.png
Bueno, veamos, aquí es donde se escribirán las notas que luego sonarán, así que este es el punto principal del asunto.
user posted image-> Cada línea que escribas será una nota, y llevará cuatro caracteres. Estos serán:
- Una letra, que corresponde al instrumento utilizado.
- Otra letra indicando el volumen de la nota. (Desde A=Bajo a Z=Alto)
- Un número de dos cifras, que indica la nota en sí. Vamos a explicar esto.
Ese número de dos cifras viene de esto, que supongo que hay que entender un mínimo de música para utilizarlo:
QUOTE
Fa = F = 05
Sol = G = 15
La = A = 25
Si = B = 35
Do = C = 40
Re = D = 50
Mi = E = 60
Fa = F = 65
Sol = G = 75
La = A = 85
Si = B = 95

El primer término (Fa, Sol...) indica el nombre de la nota para la mayor parte de la población. El segundo término se corresponde con el cifrado americano. Y el tercero es el número de dos cifras que hay que copiar para el script.
Si no entiendes de notas, cuanto mayor el número más agudo va sonando.

Ej: Si queremos que suene la nota Re, el número que escribiremos será el 50.

user posted image-> Bien, pero... ¿cómo definimos el instrumento? Es sencillo. Necesitamos un archivo de sonido que contenga el instrumento (hay un montón por internet). Pongamos que vamos a usar este como archivo de Piano: Piano
Bien, tiene que ir en la carpeta SE, dentro de Audio en el proyecto. Llama al archivo de audio así: instrument_a.wav.
Si utilizas más instrumentos, el siguiente será instrument_b.wav, y así hasta que llegues a tener los instrumentos que quieras.
Bien, esa 'A' no está de adorno, es la letra que define nuestro instrumento.

Ejemplo General:
Pongamos que usamos la nota AU40. Esto significa que esta nota la dará el instrumento A, en un volumen bastante alto (U) y será la nota Do/C.


user posted image-> Comandos:
Además de las notas se pueden usar comandos especiales en las líneas:
=SPD>x = Velocidad de la canción. Cambia 'x' por valores de 1 a 9, siendo 1 el más rápido.
=PSE>xxx = Tiempo de pausa, de 1 a 999. Si dejas 'X' será una línea en blanco. A esto no le afecta la velocidad de la canción.
=ECO>x>yy>z = Eco que tendrá la música. 'x' es la línea que tendrá eco. pon 1 para que sea la línea justo anterior a esta acción. 'y' es el número de ecos. 'z' es el retraso/pausa entre los ecos. Tampoco le afecta la velocidad de la canción.
=LOP = Mi comando preferido, que sirve para crear ciclos. Cuando la canción termina vuelve a esta línea.

user posted image-> El archivo *.txt puede ser convertido a *.rxdata, lo que hará que se encripte. laugh.gif

user posted image-> Este archivo tiene que ir en la carpeta Custom que debes crear dentro de Audio.

user posted image Uso:
-> Pon $custom_songs = CustomSong.new justo debajo de "begin" en Main.
-> Para cargar una canción, usa en Llamar Script:
QUOTE
@mi_cancion = $custom_songs.load("cancion")
Cambia "cancion" por el nombre de la canción que quieras cargar.
-> Para que suene la canción utiliza:
QUOTE
$custom_songs.setup(@my_song)

-> Sólo nos queda una cosa por hacer, definir dónde queremos que suene, y eso se hace en el editor de scripts. Busca en los "Scene_" la línea Input.update, y copia debajo:
QUOTE
$custom_songs.update

Sólo tienes que ponerlo donde quieras que suene. Si las canciones van a sonar en el mapa, ponlo en Scene_Map. Si es en el menú, ponlo en Scene_Menu, etc.

Nota: Es mucho más sencillo de lo que parece, mirad el Demo.

Créditos:
Script creado por LegacyCrono.
0

Share this post


Link to post
Share on other sites
Nooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

Mi engine al carajoooooooo

T_T, maldito LegacyCrono xD

Bueno, me gusta el script, está bien en si.
Mucha utilidad CASI no tiene pero bueno...

Bien, muchas gracias por el aporte

Salu2 laugh.gif laugh.gif laugh.gif
0

Share this post


Link to post
Share on other sites
Ahora que hay tropecientos programas con los que crear midis tiene poca utilidad, pero en realidad una midi es esto de forma un pelín más compleja. De hecho, no demasiado más compleja.
Y bueno, desde luego es una buena forma de entretenerte un buen rato.
0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0