Watermarking wav - Algo - Programmation
Marsh Posté le 03-01-2009 à 13:21:39
dans un premier temps, tu mets les bits de poids faible à 0. puis tu repasse en mettant un 1 pour les secondes, et deux 1 pour les minutes...
regarde par là :
http://www.thisisnotalabel.com/How [...] and-VB.php
Marsh Posté le 03-01-2009 à 20:04:15
Merci pour ta réponse,
Oui c'est ce que j'ai fait dans un premier temps.
Je dois donc modifier les bits de poids faible aux alentours de la valeur 127 (puisque les valeurs d'un wav sont entre -1 et 1, je les multiplie par 127 puis je leur ajoute 127 pour obtenir une échelle 0-255)
Cependant, pour initialiser tous les échantillons du son (mettre les bits de poids faibles à 0), ça prend un temps infini (je développe en Matlab)...
Que faire donc :s ?
Marsh Posté le 04-01-2009 à 16:43:03
ça prend pas un temps infini... Mais un certain temps. quelle est la taille de ton échantillon ?
Marsh Posté le 04-01-2009 à 17:19:18
Oui, c'était pour dire que ça prenait pas mal de temps...
Mais Matlab est hyper lent pour les boucles, j'ai un son de 3 secondes à peu près soit 71000 échantillons de 8 bits...
Marsh Posté le 04-01-2009 à 17:32:24
En matlab, la loi n°1 c'ets jamais de faire de boucle mais d'ecrire sous forme matricielle direct. Ensuite, le pb c'ets que matlab et les manip de bits = LOL.
Marsh Posté le 04-01-2009 à 18:32:07
En fait je ne vois pas comment je pourrais écrire mon programme sous forme matricielle...
Je prends donc chaque échantillon de mon son que je transpose de 0 à 255, je le mets en vecteur binaire puis je dois lui modifier 1 ou 2 bits...
Comment je pourrais faire ?
Et par LOL tu veux dire que c'est impossible ?
Marsh Posté le 04-01-2009 à 18:54:05
ben ça à l'air possible...
Citation : Integer Bit Manipulation Functions |
http://www.uni-kassel.de/hrz/serve [...] /ch14.html
Marsh Posté le 04-01-2009 à 18:54:13
Non ça veut dire que c'est un peu comme sortir Comsol pour regarder le champ magnétique généré par un fil rectiligne : ça va marcher mais c'est juste démesuré comme outil ..
Pour faire des opérations bit / bit utilise du C/C++ ou alors un autre langage que tu maitrises mieux (Java, Ruby, Python,...), mais laisse matlab tranquille si t'as le choix
Marsh Posté le 04-01-2009 à 19:03:24
Je n'ai malheureusement pas le choix...
Marsh Posté le 04-01-2009 à 19:05:25
Alors utilise ce que t'as présenté jagstang ..
Marsh Posté le 04-01-2009 à 19:06:43
et à mon avis c'est beaucoup plus rapide qu'avec une boucle...
Marsh Posté le 04-01-2009 à 19:12:06
jagstang a écrit : ben ça à l'air possible...
|
Merci de ta recherche mais je sais que c'est possible...
Je réexplique le fonctionnement du programme:
1)lire un son, pour chaque échantillon, initialiser 2 bits à 0
2)à chaque seconde mettre 1 de ces bits à 1
3)à chaque minute mettre les 2 bits à 1
4)Réencoder en Wav
Maintenant
1) lire le son wav qu'on a réencodé
2) lire les 2 bits choisis pour chaque échantillon
3) à chaque fois qu'on lit 1 bit à 1 ==> on affiche seconde
4) à chaque fois qu'on lit les 2 bits à 1 ==> on affiche minute
Je rencontre des problemes pour initialiser ces bits à 0 (quand je ré-ouvre le fichier que jai réencodé, la valeur des bits a changé )
et donc afficher ce que je veux...
J'ai utilisé les fonctions dec2binvec pour transformer chacun de mes valeurs de mon fichier wav en un vecteur de 8 bits, puis je fais mes opérations dessus (or, and,...)
C'est pas bon? Je suis vraiment paumé là
Marsh Posté le 04-01-2009 à 19:13:24
par LOL, j'entends les perfs.
Quand je dis matricielle, je veut dire elementwise.
au lieu d'ecrire :
for(i=1:100)
a(i) = toto(a,i);
ecrire
a = toto(a);
aka trouver une formulation data-oriented de l'algo et l'ecrire cash.
Marsh Posté le 04-01-2009 à 19:19:16
Joel F a écrit : par LOL, j'entends les perfs. |
Ah ok,
Mais j'ai du mal à comprendre comment tu voudrais procéder...
J'ai tous mes éléments et je leur faire subir des transformations, comment je peux faire ça sans boucles ?
(y'en a 70 000)
Marsh Posté le 04-01-2009 à 20:23:17
Code :
|
Marsh Posté le 04-01-2009 à 20:36:27
Étonnant que ça s'éternise en effet
Tu te rend compte que, ne serait-ce que les 2 premier steps de ton algo, DOIVENT être fait sous forme matricielle ?
Après, regarde dans la doc s'il existe un AND qui prend comme argument des matrices .
Probablement tu devras créé un revoir un peu ta variable init pour qu'elle contienne une matrice qui va bien ... Mais là ce que tu demandes de faire c'est carrément pas optimisé matlab :|
Marsh Posté le 04-01-2009 à 22:01:04
Je suis limite débutant en Matlab et je n'ai reçu aucune notions sur le développement en forme Matricielle, c'est pourquoi j'ai du mal à optimiser tout ça, sinon je ne serais pas ici...
De plus, le résultat demandé pour ce projet a mis très longtemps à être compris car assez mal expliqué.
Marsh Posté le 04-01-2009 à 22:09:59
En une passe matricielle :
Code :
|
Marsh Posté le 04-01-2009 à 23:47:18
merci, je vais essayer de comprendre et intégrer tout ça
Marsh Posté le 05-01-2009 à 08:26:17
Il y a rien à comprendre
Il a juste pris tes instructions et les a modifiées pour que ça s'applique directement à la matrice d'entrée, et non pas à 1 element (nécessitant donc une boucle)
Marsh Posté le 05-01-2009 à 15:28:44
La prog c'est pas mon fort, je suis en finalité réseaux et télécom mais j'ai un peu de traitement de signal donc voilà, mais je me soigne, en tout cas merci à tout le monde
Marsh Posté le 02-01-2009 à 17:16:45
Bonjour à tous,
Voilà pour un projet, je dois insérer une notion de temps dans un fichier wav (je me suis limité à un mono 8bits).
Il faudrait pour bien faire, insérer des tops (1 pour les secondes et 2 pour les minutes) dans ce fichier sans le dégrader et en utilisant la technique du bit de poids faible.
Je comprends tout le système de masque mais je ne vois pas comment je pourrais insérer mes "tops" (qui doivent être inaudibles) et pouvoir ensuite permettre à quelqu'un de les retrouver...
Quelqu'un aurait une piste à me proposer ?
---------------
[topic des lieux abandonnés] | "Sur HFR chacun a raison et les autres sont des cons"