IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

conversion de son en code ascii


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 41
    Points
    41
    Par défaut
    bonjour,
    après avoir réussi le cryptage des images et du texte en me basant sur la conversion des données en code ascii, je souhaite maintenant faire exactement la même chose mais pour un fichier son (pour tous les formats existants), seulement je n'ai aucune idée sur la manière de convertir un fichier son en un fichier texte contenant des codes ascii!!
    je fais actuellement des recherches sur ça, et je souhaite être bien orientée si vous avez déjà réalisé ça.
    merci
    [EDIT]
    je veux le faire en c++ et c'est pour ça que j'ai posté cette question dans ce sous forum

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Citation Envoyé par eclipse2007 Voir le message
    convertir un fichier son en un fichier texte contenant des codes ascii!!
    je ne comprends pas ce que tu veux dire par là. Peux-tu être un peu plus explicite?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  3. #3
    Membre éclairé
    Avatar de Floréal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 456
    Points : 849
    Points
    849
    Par défaut
    Dit comme c'est dit j'ai l'impression qu'il parle de faire de l'ASCII art (ou de la reconnaissance de caractère?) avec des images et que maintenant il veut faire de la reconnaissance vocale. Mais je me dit aussi que j'ai de grande chance de faire fausse route!
    Ancien membre du projet "Le Dernier Âge".

  4. #4
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 41
    Points
    41
    Par défaut
    bonsoir,
    je vais essayer de vous expliquer le mieux possible ce que je veux faire.
    jusqu'à maintenant j'ai réussi à crypter des fichiers textes et des images, le principe était tout simple, tout d'abord il fallait transformer ces données en une série de valeurs entre 0 et 255 (équivalent au code ascii de chaque caractère dans un fichier texte et à la couleur de chaque pixel dans une image), une clé était appliqué à ces données afin de les sécuriser.
    maintenant je veux faire la même chose mais avec un fichier son (.wav, .mp3,...). seulement je n'ai aucune idée sur comment transformer un fichier son en suite de valeurs entre 0 et 255 (je stocke ces valeurs dans un fichier binaire ou un fichier texte, peu importe) , je sais que ça se fait, en tout cas sous matlab le tour est joué en 3 instructions, mais je doit le faire en c++.
    j'espère que je me suis bien expliquée cette fois.
    merci pour vos réponse

  5. #5
    Invité
    Invité(e)
    Par défaut
    Tout fichier , image, son, video, texte, n'est rien qu'une suite d'octets... Si tu oublies qu'il s'agit d'un son, le lit octet par octet (en mode binaire) et crypte ce que tu obtiens, tu auras un fichier crypté....

    Francois

  6. #6
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 41
    Points
    41
    Par défaut
    suivant vos instructions j'ai fait ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    std::ifstream myfile;
    myfile.open("fichier.wav", ios::binary);
    myfile.seekg (0, ios::end);
    taille = myfile.tellg();
    myfile.seekg (0, ios::beg);
    buffer = new char [taille];
    myfile.read (buffer,taille);
    myfile.close();
     
      x0=new long double[taille];
      for (i=0;i<taille;i+=1) {
                   x0[i]=mod((int)buffer[i],256);
        }
     
    CRYPTAGE
    et à la fin je sauvegarde mes données cryptées en faisant ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ofstream fichier4("fichierCrypte.wav"), ios::out | ios::trunc);
       for (i=0;i<taille;i+=1) {
                      fichier4 <<  (char) x0[i] ;
                      }
      fichier4.close();
    seulement quand j'ouvre le fichier crypté avec windows media player, j'ai une erreur :il est possible que le lecteur ne prenne pas en charge ce type de fichier!!

    PS:mon code n'est pas très optimisé, mais je cherche maintenant à ce que ça marche, j'optimiserai après

  7. #7
    Invité
    Invité(e)
    Par défaut
    Tu veux dire que tu veux qu'une fois crypté, ton fichier wav soit encore un son, que tu pourras écouter sur un player?

    Dans ce cas, il te faut garder intacte l'en tête du fichier WAV (ou la modifier si tu modifies le nombre d'octets en les cryptant...). Tu dois pouvoir trouver la description de ces fichiers sur MSDN ou sur l'internet (essaie google format fichier wav ou un truc comme ca).

    L'en tete indique au player que c'est un fichier wav, et des informations sur sa durée et la nature des données qu'il contient. Si tu veux que ton fichier crypté soit un wav, il faut qu'il ait un tel en tete...

    Donc, tu dois :

    1- décoder l'en tete du fichier wav original
    2- charger et crypter le son
    3- recopier l'en tête (éventuellement modifié)
    4- recopié le son crypté...
    5- ne pas le jouer trop fort, sinon tu vas faire du mal à tes haut parleurs, tes oreilles et tes voisins (dans cet ordre).

    Francois

  8. #8
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 41
    Points
    41
    Par défaut
    j'ai fait quelques recherches sur le format de l'entête d'un fichier wav, j'ai trouvé le lien suivant qui explique chacune des parties:
    http://www.ringthis.com/dev/wave_format.htm

    en me basant sur ça j'ai implémenté le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
      std::ifstream myfile;
      myfile.open("fichier.wav", ios::binary);
      myfile.seekg (0, ios::end);
      taille = myfile.tellg();
      taille=taille-44;   //44 correspond à la taille de l'entête (44 bytes)
     
      myfile.seekg (0, ios::beg);
     
      entete= new char [44];  //je réserve 44 cases pour stocker l'entête
      myfile.read (entete,44);
     
      buffer = new char [taille]; //je réserve le reste pour le stockage des données
      myfile.read (buffer,taille);  
      myfile.close();
    je pense avoir bien calculé ta taille de l'entête, cependant, l'enregistrement que j'obtiens à la suite du cryptage est tout à fait erroné, j'entend un bruit assourdissant au début puis plus rien, la durée de l'enregistrement est aussi de 40min au lieu de 4s qui est celui de l'enregistrement d'origine "ma méthode ne change pas la taille".
    que faire a votre avis ?

  9. #9
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Je ne connais pas vraiment par coeur le format wav, mais, de toute évidence, les octets ont eux même une signification particulière.

    Je ne serais pas étonné qu'il s'agisse en fait d'une valeur d'amplitude, d'une valeur de fréquence et d'une valeur de temps (ou quelque chose de fort proche)

    Le fait d'appliquer une clé de type "succession d'octets" à des valeurs qui peuvent très bien être considérées comme des entiers ou des doubles va, fatalement, modifier énormément le son joué, dans la tonalité obtenue (pouvant aller jusqu'aux ultra / infra sons), dans le volume sonore voire dans la durée

    Ceci dit, le cryptage sert en théorie à rendre quelque chose incompréhensible aux gens ou aux matériels non autorisés à y accéder...

    Il est donc, si l'on parle de cryptage, tout à fait normal qu'une image, un texte ou un son crypté ne soit pas compréhensible / affichable / écoutable avant d'avoir été crypté.

    J'ai l'impression que ton but est beaucoup plus proche de l'intention de rendre une "authentification" nécessaire avant de pouvoir manipuler le fichier, et, pour cela, tu devrais en fait te tourner du coté des "plugins" des applications et autres possibilités "naturelles" des formats que tu utilises afin de faire quelque chose qui soit compatible avec le format et / ou les applications cibles
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    J'avoue que ta question est assez déroutante...
    Tu veux crypter des données son et obtenir en sortie des données son valides ? Alors, il ne te faut probablement pas te placer au niveau de l'octet mais au niveau du signal.
    L'objectif est de rendre le premier signal illisible par un tiers (cryptage) ou empêcher sa modification (intégrité) ou garantir son origine (signature) ?

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Je ne serais pas étonné qu'il s'agisse en fait d'une valeur d'amplitude, d'une valeur de fréquence et d'une valeur de temps (ou quelque chose de fort proche)
    En fait, le format wav est de type succession de valeurs donnant l'amplitude du signal en fonction du temps... Plus précisément, il se caractérise par trois paramètres :

    1- un nombre de canaux (1 en mono, 2 en stéréo)
    2- une fréquence d'échantillonnage (par exemple 44 100 pour le "son CD")
    3- une valeur de quantification (8 ou 16 bits, généralement).

    Avec un programme qui copie un CD, par exemple, on aura 2 canaux, 44100 Hz, et 16 bits, et donc le fichier contiendra deux nombres sur 16 bits (un mot gauche et un mot droit) par échantillon, et 44 100 échantillons par secondes.

    Eclipse2007, tu devrais regarder précisément le fichier sur lequel tu travailles. Si je me souviens bien, il y a pas mal de variétés de fichier Wav. La spec que tu fournis est celle du plus grand nombre, mais il est fort possible que le tiens soit d'un format différent. La spec la plus complète sera probablement sur MSDN (vu que c'est à la base un format Microsoft).

    Francois

  12. #12
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Points : 41
    Points
    41
    Par défaut
    bonjour,
    merci pour vos réponse, elles ont toutes étaient très utiles, en effet, le format wav peut varier, il peut avoir différentes entête.
    j'ai réalisé quelques changements au niveau de mon code et ça marche maintenant, j'arrive donc a crypter quelques fichiers wav et a les décrypter.
    je cherche maintenant à généraliser cela pour tous les formats de fichiers audio (mp3 entre autres). j'avoue que la documentation manque sur le net. et que je n'ai pas encore trouvé quelque chose de vraiment précis sur ça et de vraiment technique.
    merci encore

Discussions similaires

  1. Conversion de caractère en code ASCII
    Par jca dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 09/02/2013, 11h46
  2. Algorithmie C conversion de chaine en code ascii
    Par Onitsha dans le forum Débuter
    Réponses: 19
    Dernier message: 13/10/2011, 12h30
  3. Insérer caractère par son code ASCII
    Par Ange44 dans le forum Mise en forme
    Réponses: 2
    Dernier message: 10/04/2007, 12h04
  4. Conversion utf-8 an code ascii
    Par Haplo2006 dans le forum Langage
    Réponses: 2
    Dernier message: 22/03/2007, 10h11
  5. Réponses: 2
    Dernier message: 30/05/2006, 08h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo