AntiGuide: AndroidBranleurMp3



PagePrincipale :: DerniersChangements :: ParametresUtilisateur :: Vous êtes 216.73.216.176 :: Signaler un abus :: le: 20250719 12:06:19
20120130: pour les historiens, voir la version 2011: AndroidBranleurMp3Obsolete, et janvier 2012: AndroidBranleurMp3PasLight

but: enregistrer les accélérations 3D dans un fichier wav (à lire par exemple avec AudaCity).
ce programme convertit le fichier des accélérations enregistré par AndroidBranleur pour le rendre visualisable par un lecteur MP3.
ce programme corrige les retards d'enregistrement du capteur sur la base de 20 Hz

produit 5 pistes:

pour programmeur:
pour l'écriture d'un .wav (mono): http://antiguide.logsm.net/divers/v21/ , pour un autre chantier similaire: KlimaloggPro2Wav
pour l'entête: http://fr.wikipedia.org/wiki/WAVEform_audio_format#En-t.C3.AAte_de_fichier_WAV

zonage du fichier d'entrée (délimité par des espaces) postérieur à 0.5.5

- ignorer les lignes #

- les lignes @ @ donnent la seconde

- ligne courante:


20110704 (échange avec LE lecteur):
ben 'mp3' c'est un joke, ce serait dommage de dégrader les données, par contre .wav, c'est très sérieux (voir le paragraphe "non audio data de la page wikipedia: http://en.wikipedia.org/wiki/WAV )
cela permettra facilement d'explorer les trois directions en parallèle avec AudaCity (ou autre), et éventuellement d'entendre les vibrations!.
c'était sous la pile, mais ça vient de repasser sur le dessus.
je m'y colle!
c'est comme le .kml, je fais une maquette en vbscript, "ON" portera en java plus tard.

bug: je ne sais pas contrôler l'amplitude! actuellement chaque piste est limitée à l'intervalle [-10 à +10]

Usage:


version 20120208 (light):
' 20120208
' en cours gérer la file d'attente des messages
'20120208  capture branleur to wav
' adapté à Branleur 0.5.6 (version light)
' GAFFE: les points sont asynchrones
' le programme se charge de:
'  - générer les points supplémntaires 
' supprimer les points plus rapide que la fréquence
' la frequence de sortie est en dur ici!
frequence=20
prtlu=false ' imprimer lecture

dim fs
set fs=createobject("scripting.filesystemobject")
dim fi
dim fo
dim flog
dim nbechantillonparbit
dim nbpts
dim lu
nbliused=0
nbsecplus=0
nbhzplus=0
nbhzmoins=0
milli=0
millipre=0
pas=0
cumul=0
xp=0
yp=0
zp=0
nbg=0
nbtop=0
perdu=0

Set args = Wscript.Arguments

if nom="" then 
if args.count =1 then 
nom=args(0)
else
nom=inputbox("Conversion Branleur vers .WAV" & vbcrlf & _
"pour un usage amical," & vbcrlf & _
"après avoir fermé cette fenêtre, " &vbcrlf & _
"draguez l'icône du fichier produit par Branleur sur ce '3dwav.vbs'" & vbcrlf & _
  "Vous pouvez également donner directement ici le nom de ce fichier.")
if nom="" then wscript.quit
end if

end if ' nom ""


' ajustement
pt=0
pt=instr(pt+1,nom,".")

'msgbox pt & "?" & nom
while pt>0
 p2=pt
 pt=instr(pt+1,nom,".")
'msgbox "pt=" & pt & vbcrlf & "p2=" & p2 & vbcrlf & nom 
wend
nextnom=mid(nom,1,p2)& frequence
'msgbox nextnom


towav nom,nextnom

sub towav(branleur,nomfo)

set fi=fs.opentextfile(branleur,1)
set fo=fs.createtextfile(nomfo& ".wav",true)
set flog=fs.createtextfile(nomfo& ".log",true)

' compter les points

nbpts=0

datedeb=""
while not fi.atendofstream
lu=ucase(fi.readline)
if instr(lu,"@@")=1 then 
   if datedeb="" then datedeb=lu
   datefin=lu
end if
wend
fi.close

' msgbox datedeb & vbcrlf & datefin



dd=dpo(datedeb)

df=dpo(datefin)
flog.writeline  "dd df " &  datedeb & " " & datefin
flog.writeline  "dd df " &  dd & " " & df

el=datediff("s",dd,df)

flog.writeline  "dd df el " & vbcrlf & dd & vbcrlf & df & vbcrlf & el

nbsec=el

nbpts=nbsec*frequence

'msgbox "créneau enregistrement" & vbcrlf & nbpts & vbcrlf & dd & " " & mid(datedeb,ideb+1,14) & vbcrlf &  da & vbcrlf & df & vbcrlf & nbsec & vbcrlf & "nbpts=" & nbpts
flog.writeline  "créneau enregistrement" & vbcrlf & nbpts & vbcrlf & dd & " " & mid(datedeb,ideb+1,14) & vbcrlf &  da & vbcrlf & df & vbcrlf & nbsec & vbcrlf & "nbpts=" & nbpts


' deuxième passage

set fi=fs.opentextfile(branleur,1)

nbrcanaux=5
nbbytes=1
lontot=nbpts*nbbytes*nbrcanaux

a4="RIFF"
lon=44+lontot
wave="WAVE"
fmt="fmt "
bloc=16
audioformat=1
bytepersec=frequence*6 
byteperbloc=nbrcanaux*nbbytes
bitspersample=8 ' 16

data="data"
datasize=lontot

wa 4,a4
wi 4,lon-datasize
wa 4,wave
wa 4,fmt
wi 4,bloc
wi 2,audioformat
wi 2,nbrcanaux
wi 4,frequence
wi 4, bytepersec
wi 2,byteperbloc
wi 2,bitspersample
wa 4,data

wi 4,datasize


nbtop=0

millipre=0

pas=(1000\frequence)
' pour ajouster sortie donner date en format YYYYMMDD-HHMMSS
dd=""

write=false
rattrapper=0
pan=true

while not fi.atendofstream
  lu=ucase(fi.readline) & " " 


   if prtlu then flog.writeline lu

if left(lu,3)="#@@" then 
   write=true
     flog.writeline "                 write fait"
end if

   if left(lu,2)="@@"  and instr(lu,".")=0 then 
     ' calculer écrat de date 
     df=dpo(lu)

     if dd<>"" then 
        el=datediff("s",dd,df)
        millipre=1000
        millipre=millipre-1000*el
      end if

      dd=df


   end if

'
  lusave=lu 
 
  if  instr(lu,"#")=0 and instr(lu,"@")=0  and (lupre<>"") and len(trim(lu))>0  then 
'     msgbox "accepte:" & vbcrlf & lu
      nbliused=nbliused+1
 
      'intercepter milli
       milli=mid(lu,1,3)


      ' et le retard
if write then
      iret=instr(lu,">")
      retard=mid(lu,iret+1)

      if retard>50 and not pan then 
         rattrapper=retard-50
     flog.writeline "                 write false rattraper:" & rattrapper
      end if
         write=false
pan=false
 end if

if rattrapper>50 then 
      milli=milli-rattrapper
      rattrapper=rattrapper-50
      flog.writeline "                          milli=" & milli
  end if


      ' flog.writeline milli & " " & millipre & vbcrlf & lusave
      lu=mid(lu,instr(lu," ")+1)
      doun 
      '    millipre=milli-perdu+pas
      lupre=lusave
   end if
 
if instr(lusave,"#")=0 and instr(lusave,"@@")=0 then  lupre=lusave
 wend ' eof 

fo.close
flog.writeline "pour: " & nomfo & vbcrlf & _
     " nbtop=" & nbtop & " nbg=" & nbg & vbcrlf & _ 
    "termine:" &  a4 & " lontot=" & lon+8 & vbcrlf & _
     "bloc:" & bloc & vbcrlf & _
     "AudioFormat=" & audioformat & vbcrlf & _
     "Nbrcanaux:"&nbrcanaux & vbcrlf & _
     "Frequence:" & frequence & vbcrlf & _
     "BytePerSec:" & bytepersec & vbcrlf & _
     "BytePerBloc" & byteperbloc & vbcrlf & _
     "BitsparSample:" & bitspersample & vbcrlf & vbcrlf & _
     "data:" & data & vbcrlf & _
     "dataSize:" & datasize &vbcrlf & _
     "nbechantillonparbit:" & nbechantillonparbit & vbcrlf & _ 
     "nbhzplus:" & nbhzplus & vbcrlf & _ 
     "nbhzmoins:" & nbhzmoins & vbcrlf & _ 
     "nbsecplus:" & nbsecplus & vbcrlf & _ 
     "nbc:" & nbc & vbcrlf & _ 
     "Nbliused: " & nbliused & vbcrlf & _
     "ouf"
flog.close
end sub

function dpo(d)
ideb=instr(d,"@@")
x=mid(d,ideb+2)
dpo=mid(x,7,2) & "/" & mid(x,5,2) & "/" &mid(x,1,4) & " " & mid(x,10,2) & ":" & mid(x,12,2) & ":" &mid(x,14,2) 
end function

sub doun 
' flog.writeline "doun" & " "  & lu & " " & millipre & " "  & milli

          perdu=milli-millipre ' au cas ou aucun point!
          lu=lu & " 0.0 "
 

x=f1
y=f1
z=f1
m=sqr(x*x+y*y+z*z) ' v1

d=sqr( (x-xp)*(x-xp)+(y-yp)*(y-yp)+(z-zp)*(z-zp))
xp=x
yp=y
zp=z

' msgbox "xyz=" & vbcrlf & x & vbcrlf & y & vbcrlf & z & vbcrlf & m
xc=o1(x)
yc=o1(y)
zc=o1(z)
mc=o1(m)
dc=o1(d)
ela=(-millipre+milli)
'flog.writeline "mmp ela -" & millipre & " +" & milli & " =" & ela
nb=ela\pas
' flog.writeline nbg & ":" & millipre & " à " & milli & " =" & nb & " " & x & " " & y & " "  & z & " "  & m & " "  & d 

if millipre<milli then
    for echantillon=millipre to milli-1 step pas
          nbg=nbg+1   
          perdu=milli-echantillon
           fo.write xc & yc & zc & mc & dc 
'         flog.writeline nbg & ":" & echantillon
         millipre=echantillon+pas
    next
else
   flog.writeline nbg & " rien " 
 millipre=millipre-pas
end if
         nbtop=nbtop+1
'flog.writeline "report " & perdu
end sub

function o1(xyz)
' msgbox lu & vbcrlf & xyz
ixyz=128+int(10*xyz)
if ixyz>255 then ixyz=255
if ixyz<0 then ixyz=0
o1=chr(ixyz) 
end function

function f1
luori=lu
lu=trim(lu)
ji=instr(lu+" "," ")
motpoint= mid(lu,1,ji)
lu=trim(mid(lu,ji+1))
motvirgule=""
for iii=1 to len(motpoint)-1
  cun=mid(motpoint,iii,1)
  if cun="." then cun=","
  motvirgule=motvirgule & cun
  if cun<>"," and cun<>"-" then if cun<"0" or cun>"9" then  msgbox "erreur " & cun & " '" & motpoint & "'" & vbcrlf & lu
next ' iii
'msgbox "w1" & vbcrlf & lu & vbcrlf & lulu & vbcrlf & motvirgule & vbcrlf & "'" & motpoint & "'"
if len(motvirgule)=0 then msgbox "vide" & vbcrlf & lu 
xyz=motvirgule
' msgbox lu & vbcrlf & xyz
f1=xyz 
end function


sub wa(lon,quoi)

' msgbox "ecrire " & quoi
for ip=1 to lon
 fo.write(mid(quoi,ip,1))
next 
end sub


function a(lon)
rw=""
for ip=1 to lon
r1=fi.read(1)

rw=rw & r1
next 
a=rw
end function

sub wi(lon,quoi)
'flog.writeline "quoi=" & quoi
ww=quoi
for ip=1 to lon
q=ww\256
u=ww-256*q
' msgbox ww & " " & q & " " & u
 if u<0 then u=256+u
fo.write(chr(u))
ww=q
next 

end sub

function i(lon)
rw=0
m=1
for ip=1 to lon
r1=fi.read(1)

rw=rw +asc(r1)*m
m=256*m
next 
i=rw
end function


exemple de fichier "light"
#Hot start @20120208_103400
#data:20120208_103400
@@20120208_100000
#on create not initialized
#Branleur, version:0.5.6.7 (20120207-0800)
#save @20120208_103400.329
#@@20120208_103400.415 e:1328693640415|u:84 size:0
#top ms DeltaMss Stamp GD AA HB [module] ~combi
@20120208_103400 Start button
#startCapture @20120208_103400 ui
#onStart @20120208_103400 0/0
#onResume @20120208_103400
667 -1.37 4.29 7.96 >1328693640667
723 -1.37 4.13 7.96 >56
764 -1.53 4.29 7.96 >41
813 -1.22 3.98 7.81 >49
863 -1.37 4.13 8.42 >50
914 -1.53 4.29 7.81 >51
963 -1.37 4.13 7.96 >49
@@20120208_103401
013 -1.37 4.29 8.12 >50
063 -1.37 4.44 7.96 >50
113 -1.37 4.29 7.96 >49
163 -1.37 4.29 7.81 >50
213 -1.22 4.13 7.96 >50
303 -1.68 4.29 7.81 >90
342 -1.37 3.98 7.96 >40
392 -1.37 4.13 7.96 >50
442 -1.53 4.29 7.81 >50
492 -1.53 4.29 8.12 >50
543 -1.53 4.29 7.96 >51
596 -1.53 4.29 7.81 >53
643 -1.37 4.29 8.12 >47
742 -1.53 4.29 8.12 >99
842 -1.53 4.29 7.81 >100
884 -1.37 4.13 7.96 >42
933 -1.37 4.13 7.81 >49
983 -1.37 4.13 7.96 >50
@@20120208_103402
033 -1.37 3.98 8.12 >50
093 -1.37 4.13 7.96 >60
193 -1.37 4.13 8.12 >100
243 -1.53 3.98 7.96 >50