Oniromancie: Scripts - Audio +


Comment ça marche?

Aëdemphia
Par Sylvanor

Fighting Robots Quest
Par Boulon

Forstale
Par Ødd Clock

Geex
Par roys

Inexistence
Par Falco

La Légende d'Ibabou
Par Zaitan

Lije
Par Gaetz

LoveMaster
Par Cuddlefox

Sarcia
Par Kaëlar

Super Mario RPG - Lost Souls
Par Omegabowser

Jeux: Monster World RPG / Jeux: Pif et Hercule / News: Mise à jour de RPG Maker 2003 / Tutos: Création de charset / Jeux: FAYLINAWA /

Chat  (26 connectés)

Bienvenue
visiteur !








Statistiques

Liste des
membres


Contact

77 connectés actuellement

9264096 visiteurs
depuis l'ouverture

784 visiteurs
aujourd'hui

Groupe Facebook

Barre de séparation

Partenaires




TOP
GAMEMAKING


Les 5 plus
visités

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Pixelandgame

Tashiroworld

HeyMakeGames

Au hasard

Rpg Fusion

Level Up!

Yasei Ookami

Les deux derniers

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Nos autres partenaires

Devenir
partenaire


Barre de séparation

Un site du réseau
War Paradise

Annuaires référenceurs




Audio +
Script pour RPG Maker XP
Ecrit par Zeus81

Ce script pour XP et/ou VX permet d'ajouter des fonctionnalités audio comme mettre le son à droite ou à gauche, mettre en pause, répétition, etc...
Vous pouvez aussi vous en servir pour jouer plusieurs BGM, BGS, ME en même temps.
Cependant c'est pas un script pour débutant, il faut savoir gérer ses sons, par exemple tout arrêter quand on retourne à l'écran titre.
C'est pas très compliqué mais ça nécessite quelque modifications des scripts.

Petit inconvénient concernant les fichiers midi :
Déjà on ne peut en lire qu'un à la fois.
Les fichiers midi ne sont pas lu par RM mais par Windows, ce qui fait que le son est différent.
De plus si vous modifiez le volume ou autre d'un fichier midi les modifications se feront directement sur l'ordinateur, ce qui n'est pas terrible.
Je déconseille donc la lecture de midi en utilisant ce script par contre avec RM y'a pas de problème c'est comme avant.

Toutes les explications pour l'utiliser sont au début du script.
A mettre au dessus du Main.



Portion de code:





#=================================

# Audio +
# Script créé par Zeus81
#=================================
#
#
# Manuel d'utilisation :
#
# Les commandes suivantes doivent être écrites dans un script.
#
#
# OUVERTURE D'UN NOUVEAU FICHIER AUDIO :
# Advanced_Audio.new("identifiant", "nom du fichier")
#
# identifiant = Nom quelconque dont on se servira ensuite pour modifier notre son.
#
# nom du fichier = Nom du fichier à lire (avec le chemin et l'extension).
#
# Exemple : Advanced_Audio.new("BGS 01", "Audio/BGS/020-People02.ogg")
#
# Note : Si un autre fichier audio porte le même identifiant il sera remplacé.
#
#
# DEMARRER LA LECTURE :
# Advanced_Audio["identifiant"].play(répétition, départ, fin)
#
# identifiant = Identifiant précédemment indiqué.
# Attention si l'identifiant ne correspond à aucun fichier ouvert, ça plantera.
#
# répétition = Précise si le fichier doit être lu en boucle ou pas.
# Pour lire en boucle mettez true, sinon false.
#
# départ = Temps à partir d'où débute la lecture en millisecondes.
# Si vous mettez -1 ce sera à partir de la dernière position de lecture.
#
# fin = Temps où s'arrêtera la lecture en ms.
# Si vous mettez -1 ça ira jusqu'à la fin du fichier.
#
# Exemple : Advanced_Audio["BGS 01"].play(true, 0, -1)
#
# Note : Les répétitions redémarrent non pas à la position de départ indiqué mais au début du fichier.
#
#
# METTRE EN PAUSE :
# Advanced_Audio["identifiant"].pause
#
#
# SORTIR DE PAUSE :
# Advanced_Audio["identifiant"].resume
#
#
# ARRETER LA LECTURE :
# Advanced_Audio["identifiant"].stop
#
# Note : Contrairement à la pause si vous voulez redémarrer la lecture il faudra passer par play.
# Ce qui signifie qu'il faudra remettre les options (répétition, départ, fin).
#
#
# FERMER LE FICHIER :
# Advanced_Audio["identifiant"].close
#
# Note : Ferme le fichier et libère la mémoire (en théorie).
#
#
# MODIFICATION DU VOLUME :
# Advanced_Audio["identifiant"].volume_change(volume, temps)
#
# volume = Nouveau volume du fichier entre 0 et 100
#
# temps = Durée de transition en nombre de frames.
#
# Exemple : Advanced_Audio["BGS 01"].volume_change(50, 40)
#
# Note : Par défaut le volume est à 100%
#
#
# MODIFICATION DE LA BALANCE (GAUCHE DROITE) :
# Advanced_Audio["identifiant"].balance_change(balance, temps)
#
# balance = Nouvelle balance du fichier entre -100 et 100
# A -100 le son est à gauche, à 0 au centre, à 100 à droite.
#
# Exemple : Advanced_Audio["BGS 01"].balance_change(-75, 200)
#
# Note : Par défaut la balance est à 0
#
#
# MODIFICATION DE LA VITESSE (TEMPO) :
# Advanced_Audio["identifiant"].pitch(vitesse)
#
# vitesse = Nouvelle vitesse de lecture en pourcentage.
# 200 = 2x, 100 = 1x, 50 = 0.5x
#
# Exemple : Advanced_Audio["BGS 01"].pitch(120)
#
# Note : Par défaut la vitesse est à 100%
#
#
# AUTRES FONCTIONS :
#
# Advanced_Audio["identifiant"].position : retourne la position de lecture actuelle
# Advanced_Audio["identifiant"].length : retourne la durée totale du fichier
# Advanced_Audio["identifiant"].mode : retourne l'état actuel (playing, paused, stopped)
#
# Advanced_Audio.reset : Ferme tous les fichiers audio

if defined?(Advanced_Audio)

Advanced_Audio.reset

else

class << Graphics
alias zeus81_advanced_audio_update update
def update
zeus81_advanced_audio_update
Advanced_Audio.update
end
end


class Advanced_Audio

MciSendString = Win32API.new("winmm", "mciSendString", "ppll", "l")
@@buffer = " "*256
@@audio = {}

def self.[](aliasname)
return @@audio[aliasname]
end
def self.call(command)
return (MciSendString.call(command, @@buffer, @@buffer.size, 0) == 0)
end
def self.update
@@audio.each_value {|audio| audio.update}
end
def self.reset
@@audio.each_value {|audio| audio.volume(1000); audio.close}
end

def initialize(aliasname, filename)
@aliasname = aliasname
@@audio[@aliasname].close if @@audio[@aliasname] != nil
@@audio[@aliasname] = self
Advanced_Audio.call("open \"#{filename}\" alias \"#@aliasname\" type MPEGVideo")
Advanced_Audio.call("set \"#@aliasname\" time format ms")
@volume = 1000.0
@balance = 0.0
@volume_duration = @balance_duration = 0
update
end

def play(repeat=true, from=-1, to=-1)
command = "play \"#@aliasname\""
command.concat(" from #{from}") if from != -1
command.concat(" to #{to}") if to != -1
command.concat(" repeat") if repeat
Advanced_Audio.call(command)
end
def pause
Advanced_Audio.call("pause \"#@aliasname\"")
end
def resume
Advanced_Audio.call("resume \"#@aliasname\"")
end
def stop
Advanced_Audio.call("stop \"#@aliasname\"")
end
def close
@@audio.delete(@aliasname)
Advanced_Audio.call("close \"#@aliasname\"")
end
def position
Advanced_Audio.call("status \"#@aliasname\" position")
return @@buffer.to_i
end
def length
Advanced_Audio.call("status \"#@aliasname\" length")
return @@buffer.to_i
end
def mode
Advanced_Audio.call("status \"#@aliasname\" mode")
return @@buffer.gsub("\000", "")
end
def pitch(pitch)
Advanced_Audio.call("set \"#@aliasname\" tempo #{pitch.to_i}")
Advanced_Audio.call("set \"#@aliasname\" speed #{(pitch*10).to_i}")
end
def left_volume(volume)
Advanced_Audio.call("setaudio \"#@aliasname\" left volume to #{volume.to_i}")
end
def right_volume(volume)
Advanced_Audio.call("setaudio \"#@aliasname\" right volume to #{volume.to_i}")
end
def volume(volume)
Advanced_Audio.call("setaudio \"#@aliasname\" volume to #{volume.to_i}")
end

def volume_change(volume, duration=0)
@volume_target = [[volume*10, 0].max, 1000].min
@volume_duration = [duration*2, 1].max
end
def balance_change(balance, duration=0)
@balance_target = [[balance*10, -1000].max, 1000].min
@balance_duration = [duration*2, 1].max
end

def update
if @volume_duration > 0
@volume = (@volume * (@volume_duration - 1) + @volume_target) / @volume_duration.to_f
@volume_duration -= 1
end
if @balance_duration > 0
@balance = (@balance * (@balance_duration - 1) + @balance_target) / @balance_duration.to_f
@balance_duration -= 1
end
if @last_volume != @volume or @last_balance != @balance
@last_volume = @volume
@last_balance = @balance
left_volume((1000 - @balance) * @volume / 1000)
right_volume((1000 + @balance) * @volume / 1000)
end
end

end

end



foxfiesta - posté le 25/02/2009 à 10:22:27. (343 messages postés)

Wah pas mal ce script !

*s'en va ouvrir son éditeur de scripts*


RPG-Man - posté le 25/02/2009 à 12:06:25. (812 messages postés)

Rubyste, C#iste, 17 ans, over-booké.

Huhu, je garde en mémoire ça! Très utile (par exemple si on veut mettre le son en pause dans le menu, pour reprendre après!).
Zeus81, tu es un génie!

Blog de l'Usine en Folie| Vous l'attendez tous impatiemment ! | Geex


Metroid_Prime - posté le 25/02/2009 à 12:17:44. (174 messages postés)

Ca peut être très utile comme script ^^


Rockmik - posté le 25/02/2009 à 18:45:50. (12633 messages postés) - honor

Merci. ;)


tamtammort - posté le 26/02/2009 à 13:20:44. (376 messages postés)

Merci pour ce script, une p'tite place dans mes crédits pour Zeus !


berka - posté le 26/02/2009 à 16:57:58. (493 messages postés)

planchant sur un script

Portion de code : Tout sélectionner

1
Advanced_Audio.call("open \"#{filename}\" alias \"#@aliasname\" type MPEGVideo")  



pas besoin de définir un format particulier, ca évitera les problemes de codecs pour les formats autres que mp3.

bon script !

amicalement,
berka

Twitter: Pensées politiques et juridiques. Réflexions informatiques


Zeus81 - posté le 26/02/2009 à 20:59:31. (11072 messages postés)

Ben justement si on précise rien, ça ne lit plus les ogg et les fonctions de boucle ou de balance ne marchent quasiment que pour le mp3.


FoxFiesta - posté le 27/02/2009 à 11:01:17. (343 messages postés)

Pour ceux qui ont des problèmes avec les MIDIs, je pense que DBPowerAmp peut les transformer en mp3, ogg...

Le logiciel est téléchargeable ici. :D


megalatios - posté le 27/02/2009 à 17:20:28. (12145 messages postés)

Alias God Mode, alias Zeus. Je suis absolu...

Super. Est-ce que ce script permet aussi de diffuser des BGM aléatoires lors qu'on a accès au menu? Si oui, Zeus81 sera l'un de mes messies...

Onche onche party - Fan de géopolitique et de Trotter - Calcul mental - Je suis une star


Ipnoz - posté le 27/02/2009 à 22:21:22. (539 messages postés)

Nostalgique!

Cool ton script zeus :)

Moi, j'active les flocons d'oniro :D


RPG-man - posté le 17/03/2009 à 18:24:54. (812 messages postés)

Rubyste, C#iste, 17 ans, over-booké.

Ben, Zeus ça y'est, je l'ai prit pour Galactic Battle, pour par exempler mettre la musique en pause pendant le mini-menu en jeu.
Merci!

Blog de l'Usine en Folie| Vous l'attendez tous impatiemment ! | Geex


Ryk - posté le 12/10/2010 à 16:50:27. (33 messages postés)

C++ && Ruby

Alors ça c'est du beau code!! Content de voir un script si bien documenté qui fonctionne nickel.

:elusun

L'imagination est plus importante que la connaissance.


Nana - posté le 15/05/2013 à 19:33:39. (45 messages postés)

Rêveuse Passionée

Super script merci beaucoup !


Degenpy - posté le 18/11/2015 à 18:30:44. (1 messages postés)

Excellent script Zeus comme d'hab ! :D
Pensez à bien installer un codec Ogg si ce n'est pas déjà le cas. Il est trouvable ici http://www.vorbis.com/setup_windows/ (site officiel), sinon les musiques en Ogg ne se liront pas.
Par contre lors de la lecture multipistes les pistes se désynchronisent entre elles. Pour mon projet j'aimerai rajouter des pistes qui se greffe à la mélodie principal au fur et à mesure de l'avancé dans un donjon. Pour qu'elles soient bien synchronisées je les lancent toutes en même temps et je met à le volume à zéro pour les pistes que je n'utilise pas tout de suite (j'ai régler le volume à 0 de base dans le script) puis j'augmente le volume de ces pistes en fondu au fur et à mesure de l'avancé dans le donjon avec des commandes script dans les événements. Mais à force de boucler les pistes finissent par se désynchroniser entre elles.
J'ajoute que les pistes font toutes la même longueur et que le problème apparait que soit en OGG, Mp3 ou Wav.
Tu aurais une solution Zeus ?

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe

Plan du site:

Activité: Accueil | News | Forum | Flash-news | Chat | Commentaires | Galerie | Screen de la semaine | Sorties | Articles perso | Livre d'or | Recherche
Jeux: Index jeux séparés | Top Classiques | Top Originaux | Les autres | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Jeux complets | Proposer
Rubriques: Le Wiki | Collection Oniro | Tutoriaux | Scripts | Guides | Gaming-Live | Tests | Making-of | Interviews | Articles perso | OST | L'Annuaire | Divers | Palmarès
Hébergés: Aëdemphia | Fighting Robots Quest | Forstale | Geex | Inexistence | La Légende d'Ibabou | Lije | LoveMaster | Sarcia | Super Mario RPG - Lost Souls
Ressources: Jeux | Programmes | Packs de ressources | Midis | Eléments séparés | Sprites
RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis