Dune CD

Réduire
X
 
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages
  • The Uploader
    MechWarrior


    • février 2010
    • 7353

    #181
    Tout est prêt sur Google Drive :
    https://drive.google.com/drive/folde...cW?usp=sharing

    Dossier _filmVF :
    Tous les SEQ*.VOC prêts (synchronisés, aussi long ou un peu plus court que l'original, normalisés)

    Dossier DuneFrenchVoicesFinalTreated :
    - clics enlevés sur toutes les voix
    - toutes les voix normalisées
    RUNEXITW : pour quand RUNEXIT quitte le jeu trop tôt |
    Pack émulation PCem + Windows 95 | Pack émulation PCem + Windows 98SE | Pack émulation DOSBox + Win 3.11 | Pack PCem + Win 3.11 | Ma collection de wrappers (pas à jour)

    Commentaire

    • Tgames
      Barbarian


      • mars 2014
      • 306

      #182
      Cliquez sur l'image pour la voir en taille réelleà  Nom : 		fetch?id=789403&d=1555577374.jpgà Affichages :	2à Taille :		339 Koà ID : 			791000

      Dernière version de Dune CD pour moi (PC WINDOWS) avec les voix françaises !

      Version stable du jeu sur PC avec les voix françaises intégrés :

      Nouveautés (Version 2.0 Final) :

      Ajout de toutes les cinématiques bonus présentes dans le livre du jeu (cinématiques tirées du film Dune avec audio en français).

      Installation

      Copiez-Collez le fichier DUNEFR.ISO dans le dossier "CD", du répertoire d'installation de la version "Abandonware-France" du jeu.
      Windows va demander de remplacer le fichier, faites "OUI".

      Comme vous remarquez, le son a besoin d'être nettoyé. Sinon tout est bon.

      Téléchargement (Dune PC WINDOWS - Voix Françaises - Version Stable 2.0 Final) :

      https://mega.nz/#!aT4CBKaA!-EIEyC65x...F6BptCSVfJLDes

      Bon jeu !


      PS: Je n'ai pas pu intégrer les voix avec le correctif de clic The Uploader , il y a plein de problèmes qui découlent de ce correctif :

      - Certaines voix sont corrompu (Exemple : PB056I.wav, dont l'onde est complètement retournée, même soucis sur plein plein de fichiers).
      - Certaines voix maintenant grésillent en écoutant (c'est léger mais on sens de temps en temps une légère différence de qualité)
      - Certaines voix ont toujours des clics mais différents (donc le correctif ne corrige qu'une faible partie des voix).

      Bref pour toutes ces raisons, j'ai laissé les voix de la V1.0 et V1.1 qui n'ont aucun soucis sauf de clics.

      Dès que c'est corrigé, j’intégrerai ces nouvelles voix corrigées .
      Au moins on a intégré les cinématiques.
      Dernière modification par Tgames, 13 mai 2019, 23h57.

      Commentaire

      • The Uploader
        MechWarrior


        • février 2010
        • 7353

        #183
        Parfait, j'ai hâte de voir les cinématiques dans le jeu. Je DL ça et je vais mettre à jour la version automatique.

        Bon, je pense que j'ai compris la leçon : sur autant de voix, va falloir les faire "à la main" pour être sûr.
        Ou du moins si je corrige mon programme, je vais les écouter d'abord.

        Merci à toi pour ta vigilance et ta patience. ^^
        RUNEXITW : pour quand RUNEXIT quitte le jeu trop tôt |
        Pack émulation PCem + Windows 95 | Pack émulation PCem + Windows 98SE | Pack émulation DOSBox + Win 3.11 | Pack PCem + Win 3.11 | Ma collection de wrappers (pas à jour)

        Commentaire

        • Tgames
          Barbarian


          • mars 2014
          • 306

          #184
          Oui c'est dommage car ça rendais bien pour les premières voix. J'avais mis 3h pour te les inclures.
          Puis rapidement j'ai constaté des problèmes comme des voix corrompu etc. Enfait tu as l'ondes qui est complètement retourné et ça sur plein plein de fichiers.
          Donc malheureusement c'est inexploitable. Et même certaines voix rendent moins bien que l'origine avec des petits grésillements aux niveaux des modifs.

          Mais dès que tu aura un pack de voix avec correctifs et bien vérifiés je les intégrerais à la prochaine version.
          On intégrera également les voix extérieures quand elles seront prêtes.

          En tout cas la V2.0 est stable et intègre toutes les cinématiques en français.
          N'hésite pas à regarder les cinématiques pour vérifier si tout va bien par rapport au film.

          Ouvre toutes les voix d'un dossier dans audacity tu verra toutes les voix qui sont retournées avec leur ondes.
          Dernière modification par Tgames, 13 mai 2019, 06h50.

          Commentaire

          • The Uploader
            MechWarrior


            • février 2010
            • 7353

            #185
            Pour les grésillement je pense que c'est la normalisation.

            Je pense qu'elle est inutile voire mauvaise sur les voix.

            D'autant que ça peut être normal/voulu que les voix en jeu n'aient pas forcément le même volume.

            En jeu, je n'ai pas eu de surprise là dessus (et je jouais avec des écouteurs).

            Jeu DL, MAJ prévue cette nuit de la version automatique.
            Je vais voir si c'est bien synchrone dès ce midi.
            RUNEXITW : pour quand RUNEXIT quitte le jeu trop tôt |
            Pack émulation PCem + Windows 95 | Pack émulation PCem + Windows 98SE | Pack émulation DOSBox + Win 3.11 | Pack PCem + Win 3.11 | Ma collection de wrappers (pas à jour)

            Commentaire

            • Tgames
              Barbarian


              • mars 2014
              • 306

              #186
              Une nouvelle version arrive dans quelques minutes elle corrige un bug d'un bruit de BZZZZZZ quand tu démarre une cinématique dans le livre.

              Enfait il faut rajouter 200ms de silence pour régler ce problème sur toutes les cinématiques.
              Cela ne change pas la synchronisation vidéo-audio mais permet au jeu de ne pas faire le bruit d'un CD rayé.

              C'est vraiment du perfectionnisme mais au moins ça sera plus propre .
              Dernière modification par Tgames, 13 mai 2019, 23h55.

              Commentaire

              • Tgames
                Barbarian


                • mars 2014
                • 306

                #187
                Cliquez sur l'image pour la voir en taille réelle   Nom : 		fetch?id=791000&d=1557602367.jpg  Affichages :	1  Taille :		339 Ko  ID : 			791023

                Dernière version de Dune CD (PC WINDOWS) avec les voix françaises !

                Version stable du jeu sur PC avec les voix françaises intégrés :

                Nouveautés (Version 2.0a) :

                Correction du problème de glitch sonore "BZZZ" quand on charge une cinématique dans le livre (en rajoutant 200ms de silence au début de la piste sonore, le problème est résolu).

                Installation

                Copiez-Collez le fichier DUNEFR.ISO dans le dossier "CD", du répertoire d'installation de la version "Abandonware-France" du jeu.
                Windows va demander de remplacer le fichier, faites "OUI".

                Téléchargement (Dune PC WINDOWS - Voix Françaises - Version Stable 2.0a) :

                https://mega.nz/#!zGJxXA5D!qyaQOQXPc...NPKF_5woGnmMJ4

                Bon jeu !
                Dernière modification par Tgames, 13 mai 2019, 23h59.

                Commentaire

                • The Uploader
                  MechWarrior


                  • février 2010
                  • 7353

                  #188
                  Oui j'avais remarqué ce BZZZ hier.
                  Je me disais que c'était un bug du jeu car je me souvenais pas avoir mis ça.
                  Effectivement les sons d'origine avaient du silence au début.

                  A part ça la syncho me semble excellente.

                  Vivement que je corrige mon programme pour les clics.
                  Je pense qu'il faut que je regarde plus de cas. Peut-être que les autres ce n'est pas 01 qu'il faut chercher, mais 02, 03, 00, ...
                  RUNEXITW : pour quand RUNEXIT quitte le jeu trop tôt |
                  Pack émulation PCem + Windows 95 | Pack émulation PCem + Windows 98SE | Pack émulation DOSBox + Win 3.11 | Pack PCem + Win 3.11 | Ma collection de wrappers (pas à jour)

                  Commentaire

                  • Tgames
                    Barbarian


                    • mars 2014
                    • 306

                    #189
                    Envoyé par The Uploader Voir le message
                    Oui j'avais remarqué ce BZZZ hier.
                    Je me disais que c'était un bug du jeu car je me souvenais pas avoir mis ça.
                    Effectivement les sons d'origine avaient du silence au début.

                    A part ça la syncho me semble excellente.

                    Vivement que je corrige mon programme pour les clics.
                    Je pense qu'il faut que je regarde plus de cas. Peut-être que les autres ce n'est pas 01 qu'il faut chercher, mais 02, 03, 00, ...
                    Oui le jeu a un micro bug pendant quelques fractions de secondes en lisant le son d'un HNM. Respecter ce court silence ne génère plus de BZZZ.

                    N'hésite pas à revérifier si tout est bon sur la synchro dans la version 2.0a.

                    Pour les clics j'avais commencé à modifier ton programme et le recompiler. Sauf que ça créé des micro problèmes sur pas mal de fichiers en supprimant les clics ça s'entends quand c'est collé déjà une autre onde.

                    Code:
                    using System;
                    using System.IO;
                    using System.Threading.Tasks;
                    
                    namespace ClicsRemover
                    {
                        class Program
                        {
                            static void Main()
                            {
                                var workDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
                                string[] subDirs = { "PA", "PB", "PC", "PD", "PE", "PF", "PG", "PH", "PI", "PJ", "PK", "PL", "PM", "PN", "PO", "PZ" };
                                foreach (string wavDir in subDirs)
                                {
                                    Environment.CurrentDirectory = Path.Combine(workDir, wavDir);
                                    if (Directory.Exists("nettoyé") == false)
                                    {
                                        Directory.CreateDirectory("nettoyé");
                                    }
                                    Parallel.ForEach(Directory.GetFiles(Environment.CurrentDirectory, "*.WAV"), wavFile =>
                                    {
                                        var destFilePath = Path.Combine(Environment.CurrentDirectory, "nettoyé", Path.GetFileName(wavFile));
                                        File.Copy(wavFile, destFilePath, true);
                                        bool processed = false;
                                        using (var stream = new FileStream(destFilePath, FileMode.Open, FileAccess.ReadWrite))
                                        {
                                            //Skip WAVHEADER (it contains false positives)
                                            stream.Position = 50;
                                            byte bytetoPut = 0x7B;
                                            while (stream.Position < stream.Length)
                                            {
                                                if (stream.Position < stream.Length)
                                                {
                                                    var value = stream.ReadByte();
                                                    if (value == 0x01)
                                                    {
                                                        processed = true;
                                                        stream.Position -= 1;
                                                        stream.WriteByte(bytetoPut);
                                                    }
                                                    else if (value == 0x0A)
                                                    {
                                                        processed = true;
                                                        stream.Position -= 1;
                                                        stream.WriteByte(bytetoPut);
                                                    }
                                                    else if (value == 0x1E)
                                                    {
                                                        processed = true;
                                                        stream.Position -= 1;
                                                        stream.WriteByte(bytetoPut);
                                                    }
                                                    else if (value == 0x2A)
                                                    {
                                                        processed = true;
                                                        stream.Position -= 1;
                                                        stream.WriteByte(bytetoPut);
                                                    }
                                                    else if (value == 0xFE)
                                                    {
                                                        processed = true;
                                                        stream.Position -= 1;
                                                        stream.WriteByte(bytetoPut);
                                                    }
                                                    else if (value == 0xF9)
                                                    {
                                                        processed = true;
                                                        stream.Position -= 1;
                                                        stream.WriteByte(bytetoPut);
                                                    }
                                                    else if (value == 0xE5)
                                                    {
                                                        processed = true;
                                                        stream.Position -= 1;
                                                        stream.WriteByte(bytetoPut);
                                                    }
                                                }
                                            }
                                            if (processed)
                                            {
                                                Console.WriteLine("file treated : " + destFilePath);
                                            }
                                        }
                                    });
                                }
                            }
                        }
                    }

                    Commentaire

                    • The Uploader
                      MechWarrior


                      • février 2010
                      • 7353

                      #190
                      Mise à jour :
                      J'ai amélioré grandement mon programme. C'est mieux (pas de voix distordues ni inversées, plus de clics traités) mais beaucoup de clics passent à travers encore. Et des voix sans clics sont traitées (sans qu'à l'oreille ça s'entende, mais tout de même).

                      On peut voir le résultat dans le dossier Treated.
                      Un fichier batch permet de lire le résultat avec wavPlayer (s'il ne se lance pas, installer vcredist_x86.exe d'abord)

                      Du coup, je les fait à la main. Et la réverbération en même temps pour les voix en extérieur qui en ont besoin. Évidemment, c'est plus long. J'en suis à la moitié du dossier PA...
                      Mais c'est moins long que de corriger encore et encore mon programme, et ensuite enlever les modifs sur les voix qui n'en ont pas besoin.

                      Si tu veux tester ou l'améliorer, les sources sont sur le Google Drive, ou ci-dessous :
                      Code:
                      using System;
                      using System.Collections.Generic;
                      using System.IO;
                      using System.Linq;
                      using System.Runtime.Serialization;
                      using System.Runtime.Serialization.Formatters.Binary;
                      using System.Threading;
                      using System.Threading.Tasks;
                      
                      namespace ClicsRemover
                      {
                          class Program
                          {
                              private static readonly int[] searchedValues = { 0x01, 0x0A, 0x1E, 0x2A, 0xFE, 0xF9, 0xE5 };
                              private const string cacheFileName = "clics.bin";
                      
                              static void Main(string[] args)
                              {
                                  var workDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
                                  string[] subDirs = { "PA", "PB", "PC", "PD", "PE", "PF", "PG", "PH", "PI", "PJ", "PK", "PL", "PM", "PN", "PO", "PZ" };
                                  Dictionary<string, List<Tuple<long, int>>> filePathAndClicsPositionsAndPreviousBytes;
                                  if (File.Exists(cacheFileName) == false || args.Any())
                                  {
                                      filePathAndClicsPositionsAndPreviousBytes = ScanFiles(workDir, subDirs);
                                      SaveCacheToDisk(filePathAndClicsPositionsAndPreviousBytes);
                                  }
                                  else
                                  {
                                      filePathAndClicsPositionsAndPreviousBytes = LoadCacheFromDisk();
                                  }
                                  Console.WriteLine("");
                                  Console.WriteLine("Now correcting files...");
                                  CorrectFiles(workDir, filePathAndClicsPositionsAndPreviousBytes);
                              }
                      
                              private static Dictionary<string, List<Tuple<long, int>>> LoadCacheFromDisk()
                              {
                                  Dictionary<string, List<Tuple<long, int>>> addresses = null;
                      
                                  FileStream fs = new FileStream(cacheFileName, FileMode.Open);
                                  try
                                  {
                                      BinaryFormatter formatter = new BinaryFormatter();
                                      addresses = (Dictionary<string, List<Tuple<long, int>>>)formatter.Deserialize(fs);
                                  }
                                  catch (SerializationException e)
                                  {
                                      Console.WriteLine("Failed to deserialize cache! Reason: " + e.Message);
                                      throw;
                                  }
                                  finally
                                  {
                                      fs.Close();
                                  }
                                  return addresses;
                              }
                      
                              private static void SaveCacheToDisk(Dictionary<string, List<Tuple<long, int>>> filePathAndClicsPositionsAndPreviousBytes)
                              {
                                  FileStream fs = new FileStream(cacheFileName, FileMode.Create);
                      
                                  BinaryFormatter formatter = new BinaryFormatter();
                                  try
                                  {
                                      formatter.Serialize(fs, filePathAndClicsPositionsAndPreviousBytes);
                                  }
                                  catch (SerializationException e)
                                  {
                                      Console.WriteLine("Failed to serialize cache! Reason: " + e.Message);
                                      throw;
                                  }
                                  finally
                                  {
                                      fs.Close();
                                  }
                              }
                      
                              private static Dictionary<string, List<Tuple<long, int>>> ScanFiles(string workDir, string[] subDirs)
                              {
                                  var filePathAndClicsPositionsAndPreviousBytes = new Dictionary<string, List<Tuple<long, int>>>();
                                  Console.Write("Scanning files concurrently...");
                                  var spinner = new Spinner(31, 0);
                                  spinner.Start();
                                  Parallel.ForEach(subDirs, wavDir =>
                                  {
                                      foreach (var wavFile in Directory.GetFiles(Path.Combine(workDir, wavDir), "*.WAV"))
                                      {
                                          var clicsPositionsAndPreviousBytes = new List<Tuple<long, int>>();
                                          using (var stream = new FileStream(wavFile, FileMode.Open, FileAccess.Read))
                                          {
                                              //Skip WAVHEADER (it contains false positives)
                                              stream.Position = 50;
                                              while (stream.Position < stream.Length)
                                              {
                                                  if (stream.Position < stream.Length)
                                                  {
                                                      long currentPosition = stream.Position;
                                                      var value = stream.ReadByte();
                                                      if (searchedValues.Contains(value))
                                                      {
                                                          stream.Position -= 2;
                                                          var previousByte = stream.ReadByte();
                                                          var coupledValues = new Tuple<long, int>(currentPosition, previousByte);
                                                          clicsPositionsAndPreviousBytes.Add(coupledValues);
                                                          stream.Position += 1;
                                                      }
                                                  }
                                              }
                                          }
                                          filePathAndClicsPositionsAndPreviousBytes.Add(Path.Combine(workDir, wavDir, wavFile), clicsPositionsAndPreviousBytes);
                                      }
                                  });
                                  spinner.Stop();
                                  spinner.Dispose();
                                  return filePathAndClicsPositionsAndPreviousBytes;
                              }
                      
                              private static void CorrectFiles(string workDir, Dictionary<string, List<Tuple<long, int>>> filePathAndClicsPositionsAndPreviousBytes)
                              {
                                  Console.WriteLine("Correcting files...");
                                  var spinner = new Spinner(20, 1);
                                  spinner.Start();
                                  var treatedFilePaths = new List<string>();
                                  foreach (var wavFile in filePathAndClicsPositionsAndPreviousBytes)
                                  {
                                      var destFilePath = Path.Combine(Path.GetDirectoryName(wavFile.Key), Path.GetFileNameWithoutExtension(wavFile.Key) + ".tmp");
                                      treatedFilePaths.Add(wavFile.Key);
                                      File.Copy(wavFile.Key, destFilePath, true);
                                      using (var stream = new FileStream(wavFile.Key, FileMode.Open, FileAccess.ReadWrite))
                                      {
                                          foreach (var coupledValue in wavFile.Value)
                                          {
                                              stream.Position = coupledValue.Item1;
                                              stream.WriteByte(Convert.ToByte(coupledValue.Item2));
                                          }
                                      }
                                  }
                                  File.WriteAllLines(Path.Combine(workDir, "treated.log"), treatedFilePaths);
                                  var batFileLines = new List<string>();
                                  foreach (var filePath in treatedFilePaths)
                                  {
                                      var playCommand = "wavPlayer.exe " + '"' + filePath + '"';
                                      batFileLines.Add(playCommand);
                                  }
                                  File.WriteAllLines(Path.Combine(workDir, "readTreatedFiles.bat"), batFileLines);
                                  spinner.Stop();
                                  spinner.Dispose();
                              }
                          }
                      
                          internal class Spinner : IDisposable
                          {
                              private const string Sequence = @"/-\|";
                              private int counter = 0;
                              private readonly int left;
                              private readonly int top;
                              private readonly int delay;
                              private bool active;
                              private readonly Thread thread;
                      
                              public Spinner(int left, int top, int delay = 100)
                              {
                                  this.left = left;
                                  this.top = top;
                                  this.delay = delay;
                                  thread = new Thread(Spin);
                              }
                      
                              public void Start()
                              {
                                  active = true;
                                  if (!thread.IsAlive)
                                      thread.Start();
                              }
                      
                              public void Stop()
                              {
                                  active = false;
                                  Draw(' ');
                              }
                      
                              private void Spin()
                              {
                                  while (active)
                                  {
                                      Turn();
                                      Thread.Sleep(delay);
                                  }
                              }
                      
                              private void Draw(char c)
                              {
                                  Console.SetCursorPosition(left, top);
                                  Console.ForegroundColor = ConsoleColor.Green;
                                  Console.Write(c);
                              }
                      
                              private void Turn()
                              {
                                  Draw(Sequence[++counter % Sequence.Length]);
                              }
                      
                              public void Dispose()
                              {
                                  Stop();
                              }
                          }
                      }
                      RUNEXITW : pour quand RUNEXIT quitte le jeu trop tôt |
                      Pack émulation PCem + Windows 95 | Pack émulation PCem + Windows 98SE | Pack émulation DOSBox + Win 3.11 | Pack PCem + Win 3.11 | Ma collection de wrappers (pas à jour)

                      Commentaire

                      • Tgames
                        Barbarian


                        • mars 2014
                        • 306

                        #191
                        Super boulot The Uploader , tiens moi au courant dès que tu as tout pu nettoyer au maximum et vérifié qu'aucun fichier de voix pose de problème ou ai de glitchs.
                        Ensuite je referai une nouvelle version avec ces voix intégrés .

                        Commentaire

                        • Tgames
                          Barbarian


                          • mars 2014
                          • 306

                          #192
                          Attention la version automatique utilise toujours un très vielle version de l'ISO avec les voix françaises.
                          Celle-ci ne contient pas les vidéos avec les voix françaises.

                          @The Uploader, tu peux corriger ça ?

                          Commentaire

                          • The Uploader
                            MechWarrior


                            • février 2010
                            • 7353

                            #193
                            Salut

                            Je m'en occupe.

                            D'ailleurs, tu as raison, faut que je continue le traitement à la main des clicks, pour la version finale, et on est déjà fin août !

                            Hop, hop !
                            RUNEXITW : pour quand RUNEXIT quitte le jeu trop tôt |
                            Pack émulation PCem + Windows 95 | Pack émulation PCem + Windows 98SE | Pack émulation DOSBox + Win 3.11 | Pack PCem + Win 3.11 | Ma collection de wrappers (pas à jour)

                            Commentaire

                            • Tgames
                              Barbarian


                              • mars 2014
                              • 306

                              #194
                              Envoyé par The Uploader Voir le message
                              Salut

                              Je m'en occupe.

                              D'ailleurs, tu as raison, faut que je continue le traitement à la main des clicks, pour la version finale, et on est déjà fin août !

                              Hop, hop !
                              Merci The Uploader,

                              ça m'a fait tilt car je regardais un streameur sur Twitch qui jouais à notre version française et il s'étonnait qu'on ait pas traduis les vidéos.
                              Or on l'a bien fait il y a des mois déjà ^^
                              Donc j'ai vérifié et la version automatique est pas à jour.

                              ça marche, tiens moi au courant et on réintégrera les voix corrigées dans une future version. Et quand on sera satisfait elle remplacera la version automatique.
                              Mais déjà en attendant proposer la dernière version sur la version automatique.

                              Cordialement.

                              Commentaire

                              • The Uploader
                                MechWarrior


                                • février 2010
                                • 7353

                                #195
                                MAJ faite.
                                RUNEXITW : pour quand RUNEXIT quitte le jeu trop tôt |
                                Pack émulation PCem + Windows 95 | Pack émulation PCem + Windows 98SE | Pack émulation DOSBox + Win 3.11 | Pack PCem + Win 3.11 | Ma collection de wrappers (pas à jour)

                                Commentaire

                                Chargement...