Annonce

Réduire

Charte du Forum

Sur ces forums, il est possible d'aborder n'importe quels sujets, de façon sérieuse ou tout simplement pour délirer !

Afin de préserver son harmonie et éviter les débordements, nous avons établi un ensemble de règles très simple que nous vous demandons de respecter.

1) Les thèmes suivants ne doivent jamais être abordés: La politique, La religion, La haine raciale, La pédophilie. Faites appel à votre bon sens pour éviter tout autre sujet susceptible de provoquer une polémique trop violente.

2) Ce forum est destiné a l'Abandonware (jeux a l'abandon). Les discussions relatives au Warez (requêtes, liens ...) seront systématiquement fermées ou effacées.

3) Lorsque vous lancez un sujet, veillez a ce qu'il soit dans le forum approprié (ne faites pas par exemple une requête dans le forum Discussion générale / Le bar des amis).

4) Avant de poser une question d'ordre technique, assurez vous d'avoir consulté la FAQ Abandonware-France et la FAQ Abandonware-Forums (questions fréquemment posées) ainsi que les topics Important : du forum Aide de jeux / Problèmes techniques !

5) Ne publiez pas d'images dans vos messages qui pourraient choquer les autres visiteurs.

6) Nous détestons le SPAM et le Flood ! Évitez donc de poster des messages inutiles et de façon répétée.

7) Le forum n'est pas un concours de posts. Il est inutile de poster des messages dans le simple but de monter en grade (Le nombre de posts sera décrémenté en cas d'abus).

8) Les sujets privés destinés a une minorité sont interdits. Le forum est une communauté et vos messages sont destinés a l'ensemble des visiteurs. Nous mettons a votre disposition gratuitement des outils tels que Chat (Fermé pour une période indéterminée) ou Messagerie privée.

9) Il est souhaitable de ne pas faire dévier un sujet. Cela n'est pas très sympa pour celui qui a lancé le sujet !

10) Peace and Love ! Les forums sont un endroit de détente, amusez vous, ne vous prenez pas la tête inutilement en public.

11) Les admins et modérateurs sont la pour vous protéger, et non pour vous faire la guerre ! Ils se réservent le droit de déplacer, modifier, fermer ou effacer un sujet en cas de besoin.

12) Concernant la zone arcade sur le forum, toute personne trichant se verra temporairement bannie du forum et TOUT ses scores seront purement et simplement effacés. (Fermée pour une période indéterminée)

13) Ne proposez pas de lien vers du contenu illégal et n'encouragez pas au piratage d'oeuvres protégés par les droits d'auteurs et de Non-Abandonware.

14) Ce forum n'est pas un téléphone portable ! Corollaire à la proposition précédente: la plupart des gens susceptible de vous répondre n'a pas appris à lire le langage "texto/SMS". Vos messages ne sont pas limités à 160 caractères, alors s'il vous plait, écrivez correctement ! Clairement, on ne va pas vous tomber dessus pour un "s" oublié ou pour un accord incorrect, mais pas de "g chrché c je pandan dé mwa"! Copiez-collez votre message dans Word pour profiter du correcteur orthographique, au besoin.

Ces règles sont très importantes, merci de les respecter ! En cas de non respect, vous pourrez recevoir un avertissement, ou en fonction de la faute, être banni temporairement, voir définitivement du forum.
Voir plus
Voir moins

Dune CD

Réduire
X
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • 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 | Ogg-Winmm : pour lire les musiques CD depuis le disque dur | Mes builds DOSBox SVN complets
    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

    Commentaire


    • 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-05-2019, 23h57.

      Commentaire


      • 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 | Ogg-Winmm : pour lire les musiques CD depuis le disque dur | Mes builds DOSBox SVN complets
        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

        Commentaire


        • 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-05-2019, 06h50.

          Commentaire


          • 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 | Ogg-Winmm : pour lire les musiques CD depuis le disque dur | Mes builds DOSBox SVN complets
            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

            Commentaire


            • 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-05-2019, 23h55.

              Commentaire


              • 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-05-2019, 23h59.

                Commentaire


                • 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 | Ogg-Winmm : pour lire les musiques CD depuis le disque dur | Mes builds DOSBox SVN complets
                  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

                  Commentaire


                  • 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


                    • 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 | Ogg-Winmm : pour lire les musiques CD depuis le disque dur | Mes builds DOSBox SVN complets
                      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

                      Commentaire


                      • 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

                        Chargement...
                        X