Jump to content
Rpg²S Forum

NMessageVoice.js: Dai voce ai tuoi dialoghi!


ita_fox
 Share

Recommended Posts

NMessageVoice.js

by Nomid

Descrizione

Questo plugin vi consentirà di impostare una voce per i vostri messaggi di dialogo.

Autore

Nomid

...ovvero io u.u

Allegati

voice_good.zip


Istruzioni

--- Prerequisiti

Per prima cosa, è necessario che sia presente almeno un suono per la voce, da mettere nella cartella SE nei due formati m4a e ogg.

Per comodità, vi allego un suono creato da me da usare come voce, già convertito.


--- Configurazione


Usare il mio plugin è molto semplice e necessita di poche impostazioni di base.

http://s25.postimg.org/6onzz25r3/screenshot_704.png

Innanzitutto notiamo che la descrizione dice che ogni lettera avrà il suo suono, quindi il file audio verrà suonato per ogni lettera del dialogo, motivo per cui è probabile che i suoni si accavallino.

Per evitare questo fastidioso effetto sarebbe comodo avere un audio che duri poco come quello che vi ho allegato, oppure potete provare impostando Use Static Sound su true.

Passiamo ora nello specifico:

  • Default Voice

    http://s25.postimg.org/utopgrq1r/screenshot_705.png

    Default: voice_default

    Questo parametro contiene il nome del file senza estensione del suono SE da utilizzare come voce di default, cioè quando non viene specificata alcuna voce per il dialogo.

    Nel nostro caso possiamo usare voice_good come valore.
  • Has Voice By Default

    http://s25.postimg.org/61ton9y8v/screenshot_706.png

    Default: true

    Quando questo parametro è impostato su true tutti i dialoghi avranno una voce (se non specificata verrà usata quella di default), altrimenti, impostare il parametro su false.
  • Voice Volume

    http://s25.postimg.org/aq9oignfj/screenshot_708.png


    Default: 80

    Questo valore imposta il volume del suono della voce, che deve essere compreso tra 0 e 100.
  • Use Static Sound

    http://s25.postimg.org/yvae067q7/screenshot_709.png


    Default: false

    Questo parametro indica se si deve utilizzare il metodo static per suonare la voce.

    Se impostato su true allora i suoni non verranno accavallati, altrimenti impostare false.
  • Fixed Voice Pitch

    http://s25.postimg.org/6jou34ntr/screenshot_710.png

    Default: false

    Se impostato su true le voci avranno un tono fisso (che sarà 100 di default, ma si può modificare con il comando NMsgVoice.setPitch) e non randomico (compreso tra i valori di Voice Pitches che possono essere modificati col comando NMsgVoice.setPitches).
  • Voice Pitches

    http://s25.postimg.org/cynuzsujj/screenshot_711.png

    Default: 70 100 150

    Questo parametro indica una lista di valori possibili separati da spazi per il tono randomico della voce.
    I valori devono essere compresi tra 0 e 200.

    Questa impostazione verrà ignorata se Fixed Voice Pitch è impostato su true.

Se i valori delle impostazioni dovessero risultare erronei, un NMessageVoiceException verrà mostrato come errore.

In tal caso, un try-catch dovrebbe funzionare.

 

--- Comandi plugin

 

Per avere più controllo sulla voce, metto a disposizione alcune imposazioni istantanee per i messaggi di dialogo.

Questi comandi vanno eseguiti prima del dialogo di riferimento e hanno effetto solo su quel medesimo dialogo, mentre sui successivi varranno le impostazioni del plugin se nessun altro comando le modifica.

Per comodità e per evitare conflitti con altri plugin, ogni comando ha il prefisso NMsgVoice:

  • NMsgVoice.setName

    Questo comando imposta il nome del file della voce da utilizzare per il dialogo successivo.

    Uso:
    NMsgVoice.setName voice_good
  • NMsgVoice.setVolume

    Questo comando imposta il volume della voce per il dialogo successivo.
    Il valore è numerico e deve essere compreso tra 0 e 100.

    Uso:
    NMsgVoice.setVolume 80
  • NMsgVoice.setPan

    Questo comando imposta la direzione dalla quale proviene la voce per il dialogo successivo.
    Il valore è numerico e deve essere compreso tra -100 e 100.

    Il che significa che se il valore è -100, il suono proverrà dall'estrema sinistra.

    Uso:
    NMsgVoice.setPan -100
  • NMsgVoice.setPitch

    Questo comando imposta il tono della voce per il dialogo successivo.
    Il valore è numerico e deve essere compreso tra 0 e 200.

    Viene ignorato se Fixed Voice Pitch è impostato su false.

    Uso:
    NMsgVoice.setPitch 100
  • NMsgVoice.setPitches

    Quando Fixed Voice Pitch è false, questo comando imposta i toni che può randomicamente assumere la voce del dialogo successivo.
    I valori sono numerici, separati da spazi e devono essere compresi tra 0 e 200.

    Uso:
    NMsgVoice.setPitches 70 100 150
  • NMsgVoice.useFixedPitch

    Questo comando modifica il parametro Fixed Voice Pitch del plugin per il dialogo successivo.
    Può essere true oppure false.

    Uso:
    NMsgVoice.useFixedPitch true
  • NMsgVoice.useStatic

    Questo comando modifica il parametro Use Static Sound del plugin per il dialogo successivo.
    Può essere true oppure false.

    Uso:
    NMsgVoice.useStatic true
  • NMsgVoice.useDefault

    Questo comando imposta la voce di default per il dialogo successivo.
    Non ha parametri.

    Uso:
    NMsgVoice.useDefault
  • NMsgVoice.hasVoiceByDefault

    Questo comando modifica il parametro Has Voice By Default del plugin per il dialogo successivo.
    Può essere true oppure false.

    Uso:
    NMsgVoice.hasVoiceByDefault false

Se i valori delle impostazioni dovessero risultare erronei, un NMessageVoiceException verrà mostrato come errore.

In tal caso, un try-catch dovrebbe funzionare.

 


--- enjoy u.u

Script

 

 

//=============================================================================
// NMessageVoice.js
//=============================================================================

/*:
 * @plugindesc Every letter in the dialogs has a voice.
 * @author Nomid
 *
 * @param Default Voice
 * @desc The sound to be played by default.
 * @default voice_default
 *
 * @param Has Voice By Default
 * @desc Whether or not the messages have a voice by default.
 * @default true
 *
 * @param Voice Volume
 * @desc Volume of the voice sound between 0 and 100.
 * @default 80
 *
 * @param Use Static Sound
 * @desc If true, every instance of the sound will be stopped to play another one (can be useful for long sounds).
 * @default false
 *
 * @param Fixed Voice Pitch
 * @desc If true, all the messages will use a fixed pitch instead of a random one and the pitch will be set to 100 as default.
 * @default false
 *
 * @param Voice Pitches
 * @desc A list of possible pitches for the voice.
 * @default 70 100 150
 *
 * @help
 * --- Prerequisites
 * First, you need at least one sound to use as a voice, to be placed in the SE folder as both m4a and ogg.
 *
 * --- Configuration
 * Using my plugin is really simple and requires just a few settings.
 *
 * First of all, every letter will have its sound, so they might overlap.
 * To avoid this effect you can shorten the audio length or try setting Use Static Sound on true.
 *
 * Let's now go to the technical specifications:
 *
 * --- Plugin Settings
 * > Default Voice
 * Default: voice_default
 * This contains the name of the SE sound to be used as default voice when no voice has been specified.
 *
 * > Has Voice By Default
 * Default: true
 * When this is true, all dialogs will have a voice (when not specified, the default voice will play).
 *
 * > Voice Volume
 * Default: 80
 * This sets the voice volume; values between 0 and 100.
 *
 * > Use Static Sound
 * Default: false
 * Whether to use the Static sound method.
 * When it is true, sounds will not overlap.
 *
 * > Fixed Voice Pitch
 * Default: false
 * If true, voices will play with a fixed pitch (which is 100 by default, you can modify with the command NMsgVoice.setPitch).
 *
 * > Voice Pitches
 * Default: 70 100 150
 * A list of pssible voice pitches.
 * Values between 0 and 200, separated by spaces.
 * Ignored if Fixed Voice Pitch is true.
 *
 * If an invalid setting is given, a NMessageVoiceException is thrown.
 * Try-catch should work.
 *
 * --- Plugin Commands
 * These commands modifies the settings for the next dialog only.
 * To avoid conflicts with other plugins, each command has the prefix NMsgVoice.:
 *
 * > NMsgVoice.setName
 * This command sets the file name for the next dialog.
 * Example:
 * NMsgVoice.setName some_voice
 *
 * > NMsgVoice.setVolume
 * Sets the volume of the voice for the next dialog.
 * Values between 0 and 100.
 * Example:
 * NMsgVoice.setVolume 80
 *
 * > NMsgVoice.setPan
 * This command sets the audio panning of the voice for the next dialog.
 * Values between -100 and 100, so -100 means "far left".
 * Example:
 * NMsgVoice.setPan -100
 *
 * > NMsgVoice.setPitch
 * This command sets the voice pitch for the next dialog.
 * Values between 0 and 200.
 * Ignored if Fixed Voice Pitch is false.
 * Example:
 * NMsgVoice.setPitch 100
 *
 * > NMsgVoice.setPitches
 * If Fixed Voice Pitch is false, sets the random voice pitches for the next dialog.
 * Values between 0 and 200, separated by spaces.
 * Ignored if Fixed Voice Pitch is true.
 * Example:
 * NMsgVoice.setPitches 70 100 150
 *
 * > NMsgVoice.useFixedPitch
 * Sets the parameter Fixed Voice Pitch for the next dialog.
 * true or false.
 * Example:
 * NMsgVoice.useFixedPitch true
 *
 * > NMsgVoice.useStatic
 * Sets the parameter Use Static Sound for the next dialog.
 * true or false.
 * Example:
 * NMsgVoice.useStatic true
 *
 * > NMsgVoice.useDefault
 * Uses the default voice for the next dialog.
 * No parameters.
 * Example:
 * NMsgVoice.useDefault
 *
 * > NMsgVoice.hasVoiceByDefault
 * Sets the parameter Has Voice By Default for the next dialog.
 * true or false.
 * Example:
 * NMsgVoice.hasVoiceByDefault false
 * 
 * If an invalid setting is given, a NMessageVoiceException is thrown.
 * Try-catch should work.
 * 
 * --- enjoy u.u
 */

var Imported = Imported || {};
Imported.NOMID_Message_Voice = true;

!function()
{
    "use strict";

    /******* UTILS *******/

    // Try-Catch works
    function NMessageVoiceException(message)
    {
        SceneManager.stop();
        AudioManager.stopAll();

        Graphics.printError('NMessageVoice Exception', message);

        return new Error("NMessageVoice Exception: " + message);
    }

    function _parseBool(val)
    {
        return Boolean(val == "true" || parseFloat(val) == true || parseInt(val) == true);
    }

    function _param(what, typ)
    {
        var val = PluginManager.parameters("NMessageVoice")[what];

        switch (typ)
        {
            case "str":
                return String(val);
                break;
            case "bool":
                return _parseBool(val);
                break;
            case "int":
                return parseInt(val);
                break;
            case "float":
                return parseFloat(val);
                break;
        }
    }

    function _falls_in_range(val, range, func)
    {
        if(parseFloat(range[0]) <= parseFloat(val) && parseFloat(range[1]) >= parseFloat(val))
            return parseFloat(val);
        else
            NMessageVoiceException(func + "(): Value \"" + String(val) + "\" does not fall in the required range.");
    }

    function _parse_pitches(val, func)
    {
        if(typeof val === "object")
            val.forEach(function (v, i)
            {
                val[i] = _falls_in_range(v, [0, 200], func);
            });
        else
            return _parse_pitches(val.split(" "), func);

        return val;
    }

    /******* UTILS END *******/

    /******* PLUGIN PRIVATES *******/

    var Voice = function(name, volume, pan)
    {
        this.name = name;
        this.volume = volume;
        this.pitch = 100;
        this.pan = pan || 0;
    };

    var _pars = {
        has_voice_by_default: _param("Has Voice By Default", "bool"),

        voice_default: _param("Default Voice", "str"),
        voice: new Voice(_param("Default Voice", "str"), _param("Voice Volume", "float")),

        useStatic: _param("Use Static Sound", "bool"),

        fixed_pitch: _param("Fixed Voice Pitch", "bool"),

        pitch_list: _param("Voice Pitches", "str")
    };
    var _default_pars = _pars;

    /******* PLUGIN PRIVATES END *******/

    /******* OVERRIDES ********/

    var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function (command, args)
    {
            _Game_Interpreter_pluginCommand.call(this, command, args);

            switch (command) {
                case "NMsgVoice.setName":
                    _pars.voice.name = String(args[0]);
                    break;
                case "NMsgVoice.setVolume":
                    _pars.voice.volume = _falls_in_range(args[0], [0, 100], "NMsgVoice.setVolume");
                    break;
                case "NMsgVoice.setPan":
                    _pars.voice.pan = _falls_in_range(args[0], [-100, 100], "NMsgVoice.setPan");
                    break;
                case "NMsgVoice.setPitch":
                    _pars.pitch_list = [_falls_in_range(args[0], [0, 200], "NMsgVoice.setPitch")];
                    break;
                case "NMsgVoice.setPitches":
                    _pars.pitch_list = _parse_pitches(args, "NMsgVoice.setPitches");
                    break;
                case "NMsgVoice.useFixedPitch":
                    _pars.voice.fixed_pitch = _parseBool(args[0]);
                    break;
                case "NMsgVoice.useDefault":
                    _pars.voice.name = "default";
                    break;
                case "NMsgVoice.useStatic":
                    _pars.useStatic = _parseBool(args[0]);
                    break;
                case "NMsgVoice.hasVoiceByDefault":
                    _pars.has_voice_by_default = _parseBool(args[0]);
                    break;
            }
        };

    Window_Message.prototype.processVoice = function ()
    {
            _pars.voice.pitch = _parse_pitches(_pars.pitch_list)[Math.floor(Math.random() * _pars.pitch_list.length)];

            if (_pars.voice.name == "null" || _pars.voice.name == "default")
                _pars.voice.name = _pars.voice_default;

            if (_pars.useStatic)
                AudioManager.playStaticSe(_pars.voice);
            else
                AudioManager.playSe(_pars.voice);
        };

    var _WMESS_PROC_NORM_CHAR = Window_Message.prototype.processNormalCharacter;
    Window_Message.prototype.processNormalCharacter = function (textState)
    {
            if (_pars.has_voice_by_default)
                this.processVoice();

            if (this.isEndOfText(this._textState))
                _pars = _default_pars;

            _WMESS_PROC_NORM_CHAR.apply(this, arguments);
        };

    /******* OVERRIDES END *******/
}();

 

 

Bug e conflitti noti

N/A

 

Termini di utilizzo

Credit & link me e il plugin

voice_good.zip

Edited by ita_fox

Ho una pistola a raggi R e non ho paura di usarla!! (generalmente la uso su di me, quindi...)

Hai quella canzoncina in testa, famosissima, ma non sai come si chiama??? Dai, che forse lo so io ;)

 

Progetto in corso: ------- Ancora senza nome --------
Progresso: [--------------------------------------------------0%] 3to.gif
Stato corrente: -

--------------------------------------------------------------------

Mie creazioni...

 

 

Citazioni degli utenti (non voglio pavoneggiarmi, giuro!)

 

Mmmh... è molto puccioso così che dorme! [...] questo è più carino e simpatico XD...
http://www.mediafire.com/convkey/8f00/bpccrnvcrkt0q0wfg.jpg

http://www.rpg2s.net/forum/index.php/topic/6762-pa-le-vostre-opere-di-pixelart/page-176

Nonostante io abbia studiato musica e sia un musicista, lascio le lezioni di composizione ai "grandi maestri" del forum, con i loro schemi, strutture di base, ecc...

Da parte mia penso che il brano sia bellissimo.
Delicato e semplice, trasmette quasi un'idea di purezza.

Inoltre la sua ripetitività è coerente con il titolo "La strada infinita", poiché attribuisce al brano un senso di continuità, senza per questo diventare frustrante per chi lo ascolta.

Bel lavoro!

http://www.rpg2s.net/forum/index.php/topic/18213-la-mia-prima-canzone-di-tre-minuti/

Questa è decisamente una BGM come si deve.

http://www.rpg2s.net/forum/index.php/topic/18265-chiptune-dungeon/


Figata sto topic XD!

http://www.rpg2s.net/forum/index.php/topic/18679-le-canzoni-che-conoscono-tutti-ma-di-cui-non-si-sa-il-nome/page-2

 

Link to comment
Share on other sites

Ottima la descrizione del plugin con screen punto per punto e comandi! :3

 

Essendoci il set_name si possono creare quindi diversi suoni per diversi personaggi, bel lavoro! ^ ^

(\_/)
(^ ^) <----coniglietto rosso, me!
(> <)


Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^

http://i.imgur.com/KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^

http://i.imgur.com/FwnGMI3.png completo! Giocabile online, qui i dettagli! ^ ^

REVERIE : : RENDEZVOUS (In allenamento per apprendere le buone arti prima di cominciarlo per bene ^ ^) Trovate i dettagli qui insieme alla mia intervista (non utilizzerò più rpgmaker) ^ ^

 

SUWOnzB.jpg 🖤
http://www.rpg2s.net/dax_games/r2s_regali2s.png E:3 http://www.rpg2s.net/dax_games/xmas/gifnatale123.gif
http://i.imgur.com/FfvHCGG.png by Testament (notare dettaglio in basso a destra)! E:3
http://i.imgur.com/MpaUphY.jpg by Idriu E:3

Membro Onorario, Ambasciatore dei Coniglietti (Membro n.44)

http://i.imgur.com/PgUqHPm.png
Ufficiale
"Ad opera della sua onestà e del suo completo appoggio alla causa dei Panda, Guardian Of Irael viene ufficialmente considerato un Membro portante del Partito, e Ambasciatore del suo Popolo presso di noi"


http://i.imgur.com/TbRr4iS.png<- Grazie Testament E:3
Ricorda...se rivolgi il tuo sguardo ^ ^ a Guardian anche Guardian volge il suo sguardo ^ ^ a te ^ ^
http://i.imgur.com/u8UJ4Vm.gifby Flame ^ ^
http://i.imgur.com/VbggEKS.gifhttp://i.imgur.com/2tJmjFJ.gifhttp://projectste.altervista.org/Our_Hero_adotta/ado2.png
Grazie Testament XD Fan n°1 ufficiale di PQ! :D

Viva
il Rhaxen! <- Folletto te lo avevo detto (fa pure rima) che non
avevo programmi di grafica per fare un banner su questo pc XD (ora ho di
nuovo il mio PC veramente :D)

Rosso Guardiano della
http://i.imgur.com/Os5rvhx.png

Rpg2s RPG BY FORUM:

Nome: Darth Reveal

 

PV totali 2
PA totali 16

Descrizione: ragazzo dai lunghi capelli rossi ed occhi dello stesso colore. Indossa una elegante giacca rossa sopra ad una maglietta nera. Porta pantaloni rossi larghi, una cintura nera e degli stivali dello stesso colore. E' solito trasportare lo spadone dietro la schiena in un fodero apposito. Ha un pendente al collo e tiene ben legato un pezzo di stoffa (che gli sta particolarmente a cuore) intorno al braccio sinistro sotto la giacca, copre una cicatrice.
Bozze vesti non definitive qui.

Equipaggiamento:
Indossa:
60$ e 59$ divisi in due tasche interne
Levaitan

Spada a due mani elsa lunga

Guanti del Defender (2PA)
Anello del linguaggio animale (diventato del Richiamo)

Scrinieri da lanciere (2 PA)

Elmo del Leone (5 PA)

Corazza del Leone in Ferro Corrazzato (7 PA)

ZAINO (20) contenente:
Portamonete in pelle di cinghiale contenente: 100$
Scatola Sanitaria Sigillata (può contenere e tenere al sicuro fino a 4 oggetti curativi) (contiene Benda di pronto soccorso x3, Pozione di cura)
Corda
Bottiglia di idromele
Forma di formaggio
Torcia (serve ad illuminare, dura tre settori)

Fiasca di ceramica con Giglio Amaro (Dona +1PN e Velocità all'utilizzatore)
Ampolla Bianca

Semi di Balissa

 

CAVALLO NORMALE + SELLA (30 +2 armi) contentente:
66$
Benda di pronto soccorso x3
Spada a due mani

Fagotto per Adara (fazzoletto ricamato)


 

Link to comment
Share on other sites

Ottima la descrizione del plugin con screen punto per punto e comandi! :3

Ho cercato di essere più semplice, diretto e dattagliato possibile u.u

 

Essendoci il set_name si possono creare quindi diversi suoni per diversi personaggi, bel lavoro! ^ ^

Grazie u.u

Edited by ita_fox

Ho una pistola a raggi R e non ho paura di usarla!! (generalmente la uso su di me, quindi...)

Hai quella canzoncina in testa, famosissima, ma non sai come si chiama??? Dai, che forse lo so io ;)

 

Progetto in corso: ------- Ancora senza nome --------
Progresso: [--------------------------------------------------0%] 3to.gif
Stato corrente: -

--------------------------------------------------------------------

Mie creazioni...

 

 

Citazioni degli utenti (non voglio pavoneggiarmi, giuro!)

 

Mmmh... è molto puccioso così che dorme! [...] questo è più carino e simpatico XD...
http://www.mediafire.com/convkey/8f00/bpccrnvcrkt0q0wfg.jpg

http://www.rpg2s.net/forum/index.php/topic/6762-pa-le-vostre-opere-di-pixelart/page-176

Nonostante io abbia studiato musica e sia un musicista, lascio le lezioni di composizione ai "grandi maestri" del forum, con i loro schemi, strutture di base, ecc...

Da parte mia penso che il brano sia bellissimo.
Delicato e semplice, trasmette quasi un'idea di purezza.

Inoltre la sua ripetitività è coerente con il titolo "La strada infinita", poiché attribuisce al brano un senso di continuità, senza per questo diventare frustrante per chi lo ascolta.

Bel lavoro!

http://www.rpg2s.net/forum/index.php/topic/18213-la-mia-prima-canzone-di-tre-minuti/

Questa è decisamente una BGM come si deve.

http://www.rpg2s.net/forum/index.php/topic/18265-chiptune-dungeon/


Figata sto topic XD!

http://www.rpg2s.net/forum/index.php/topic/18679-le-canzoni-che-conoscono-tutti-ma-di-cui-non-si-sa-il-nome/page-2

 

Link to comment
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
 Share

×
×
  • Create New...