TDFA qui es tu?

Salut à tous,
Mon 1er problème
Ok, l'idée est sur le papier, maintenant il manque quoi?...le matos bien entendu.
Une 1ère solution
N'ayant pas le matos directement à disposition et n'ayant aucune autorisation, je décide de commencer à réfléchir à une autre alternative, liée à la première. Si travailler sur des ondes directement peu nécessiter certaines autorisations, on peut toujours se rediriger vers des solution plus simples est moins contraignantes... Et donc je pars du principe qu'avec une simple paire de Tasko avec entré/sortie audio cela ne nécessitera aucune autorisation car avec, je ne vais pas traficoter les ondes, mais simplement diffuser un SON avec l'un, et recevoir ce SON avec l'autre.
Un principe vraiment simple à première vu
Encore plus simple
fichier texte = chaine de caractères -> chaine de caractères = valeur numérique -> valeur umérique = fréquence audio
fréquence audio = valeur umérique -> valeur numérique = chaine de caractères -> chaine de caractères = fichier texte
Un nom qui claque pas deux fesses
TDFA pour Transfert de Donnée par Fréquence Audible
oui, je ne me suis pas foulé, mais le principal etait de savoir qui se cachait derrière TDFA, non?
Pour finir le commencement
voilà donc un petit script python permettant de créer un fichier audio via un fichier binaire (*.txt, .tar.bz2, png...etc), il permet aussi de faire l'opération inverse
un simple "tdfa.py -h" dans le terminal, vous permettra de comprendre la commande.
#!/usr/bin/env python #-*- coding:utf-8 -*- import wave, struct, math, optparse, zlib, base64 def set_wav(infname, fname, data_size): fichier = open(infname, "rb") string="" print "Récupération des données en cours..." while 1: byte = fichier.read(1) if byte: if byte.encode('hex')=="00":string+='[x00]' elif byte.encode('hex')=="20":string+='[x20]' elif byte.encode('hex')=="30":string+='[x30]' else:string+=byte else: break fichier.close() print "Transcodage des données en cours..." string='[TDFA]'+string freq = 440.0 fech = 44100 frate = 11025.0 # framerate as a float amp = 127.5 # multiplier for amplitude sine_list_x = [] for s in string: for x in range(data_size): if int('0x'+s.encode('hex'),0)>0: sine_list_x.append(int('0x'+s.encode('hex'),0)) w = wave.open(fname, "wb") nchannels = 1 sampwidth = 1 framerate = int(frate) nframes = data_size comptype = "NONE" compname = "not compressed" w.setparams((nchannels, sampwidth, framerate, nframes, comptype, compname)) for s in sine_list_x: # write the audio frames to file w.writeframes(struct.pack('<h', int(s))) w.close() print fname+" créé avec succès" def get_wav(fname, outfname, data_size): w = wave.open(fname, "rb") binary_data = w.readframes(w.getnframes()) w.close() number_pass=0 oldByte=-1 newFileBytes = [] binary_data2="" fichier = open(outfname, "wb") print "Récupération des données en cours..." binary_data=binary_data.replace('\x00','') for s in binary_data: if (int('0x'+s.encode('hex'),0)<>oldByte) or (int('0x'+s.encode('hex'),0)==oldByte and number_pass==0): binary_data2+=s oldByte=int('0x'+s.encode('hex'),0) number_pass=1 elif number_pass >= data_size: number_pass=0 else: number_pass+=1 print "Décodage des données en cours..." binary_data=binary_data2.replace('[x00]','\00').replace('[x20]',' ').replace('[x30]','0').replace('[TDFA]','') for s in binary_data: newFileBytes.append(int('0x'+s.encode('hex'),0)) newFileByteArray = bytearray(newFileBytes) fichier.write(newFileByteArray) fichier.close() print outfname+" créé avec succès" if __name__ == '__main__': #Options usage = "%prog [options] arg\n\nTDFA (Transfert de Donnee par Frequence Audible) by David Lhoumaud\nGNU/GPL for g00d fun ;-)" parser = optparse.OptionParser(usage) parser.add_option("-a", "--action", default="set", dest="action", metavar="ACT", help="action: set, get [default: %default] " "Examples: tdfa.py -a set -i file.tar.bz2 -o out.wav" " OR " " tdfa.py -a get -i out.wav -o file.tar.bz2") parser.add_option("-i", "--in", dest="inf", metavar="FILE", help="input file") parser.add_option("-o", "--out", dest="out", metavar="FILE", help="output file") parser.add_option("-p", "--pass", dest="passs", metavar="NUM", default="1", help="pass by byte [default: %default]") (options, args) = parser.parse_args() if options.action: if options.action=="set": set_wav(options.inf,options.out,int(options.passs)) elif options.action=="get": get_wav(options.inf,options.out, int(options.passs))