Biopsychology.org

English

Artículos Casos   Libros Apuntes Otros  

Análisis del Comportamiento Verbal Articulatorio en Conversaciones Grupales Espontáneas. E. Barrull, 1992. (esteban@biopsychology.org)

Atrás Arriba Siguiente

 

'                    PROGRAMA   GENBAT.BAS
' genera un arxiu .bat, per l'analisi d'un registre de veu
DECLARE SUB Parametres (v$, par$(), separador$, numpar)
DECLARE SUB Canvia (s$, l$, c$)
DECLARE SUB Temps (tmp$, hora!, minut!, segon!, tmp!, errnum!)
DIM lin$(100)
DIM SHARED par$(10)
DIM area AS STRING
gnb$ = COMMAND$
IF gnb$ = "" THEN INPUT "Entra nom arxiu generador:  ", gnb$
IF gnb$ = "" THEN END
b = INSTR(gnb$, ".")
IF b > 0 THEN nom$ = LEFT$(gnb$, b ? 1) ELSE nom$ = gnb$
bat$ = nom$ + ".bat"
OPEN gnb$ FOR INPUT AS #1
OPEN bat$ FOR OUTPUT AS #2
PRINT #2, "echo off"
PRINT #2, ""
WHILE NOT EOF(1)
    LINE INPUT #1, l$
    IF LEFT$(l$, 1) <> ":" THEN
        SELECT CASE l$
            CASE "[sincronitza]"
                GOSUB sincronitza
            CASE "[segments]"
                GOSUB segments
            CASE "[genera linees]"
                GOSUB linees
            CASE "[genera blocs]"
                GOSUB blocs
            CASE ELSE
                ' pasem la linea tal cual al arxiu .bat
                ' també pasem les linees en blanc
                ' insertem area d'analisi si es demana en la linea
                Canvia "#", l$, area
                PRINT #2, l$
        END SELECT
    END IF
WEND
CLOSE
END
errfor:
PRINT "error de format en l'arxiu generador"
CLOSE : END

'========================================================================
'                           SEGMENTS
'========================================================================
'  area codifica l'area d'investigació (#)
'  exemple:  O  [O]rexis
'            U  [U]niversitat
' sistema (%%%), id. segment relatiu al sistema (*)
' (%%%) codifica el sistema (Client) (3 car, [N]om, [C]ognom1 i [C]ognom2)
' (*) codifica l'analisi particular del sistema dins la sessió (1,2,...)
segments:
totsegm = 0
WHILE totsegm = 0
    LINE INPUT #1, i$
    IF i$ <> "" AND LEFT$(i$, 1) <> ":" THEN
        Parametres i$, par$(), ",", npar
        IF npar <> 2 THEN GOTO errfor
        totsegm = VAL(par$(1))
        area = LEFT$(par$(2), 1)
        IF totsegm = 0 THEN GOTO errfor
        ' redimensionem les matrius de segments
        REDIM segm(totsegm) AS STRING, sis(totsegm) AS STRING
        REDIM in$(totsegm), fi$(totsegm)
     END IF
WEND
e = 0
WHILE e < totsegm
    LINE INPUT #1, i$
    IF i$ <> "" AND LEFT$(i$, 1) <> ":" THEN
        Parametres i$, par$(), ",", npar
        IF npar <> 2 THEN GOTO errfor
        e = e + 1
        sis(e) = par$(1)
        segm(e) = par$(2)
    END IF
WEND
' busquem el final de segments
WHILE i$ <> "[fi segments]"
    LINE INPUT #1, i$
WEND
RETURN

'========================================================================
'                           SINCRONITZA
'========================================================================
sincronitza:
PRINT #2, "echo posa en marxa el video per fer un reset del A/D"
PRINT #2, ""
PRINT #2, "pause"
PRINT #2, "caadd q$$p$oz.sis q$$p$oz.td 0 200 1 0 0 0 0 0"
PRINT #2, "del q$$p$oz.td"
PRINT #2, ""
PRINT #2, "echo situa el video a punt per començar l'analisi"
PRINT #2, "echo posa el video en PAUSA"
PRINT #2, "echo entra el temps marcat en el video al ordinador"
PRINT #2, "echo pulsa <enter> i PAUSA alhora"
PRINT #2, ""
PRINT #2, "time"
PRINT #2, ""
RETURN


'========================================================================
'                           GENERA LINEES
'========================================================================
linees:
IF totsegm = 0 THEN GOTO errfor
lr$ = ""
LINE INPUT #1, i$
WHILE i$ <> "[fi linees]"
    ' si no es un comentari, procesem la linea
    IF i$ <> "" AND LEFT$(i$, 1) <> ":" THEN
        ' l$ conté la linea del programa a generar
        l$ = i$
        ' cargem valors temporals si el programa es "caad.."
        IF LEFT$(i$, 4) = "caad" THEN
            perm = 0
            WHILE perm = 0
                ' obtenim el valors de mostreig i temporals del analisi
                LINE INPUT #1, i$
                IF i$ <> "" AND LEFT$(i$, 1) <> ":" THEN
                    Parametres i$, par$(), ",", npar
                    IF npar <> 6 THEN GOTO errfor
                    perm = VAL(par$(1)): ' periode de mostreig
                    mi = VAL(par$(2)): ' mostres a integrar
                    dia = VAL(par$(3))
                    mes = VAL(par$(4))
                    aa = VAL(par$(5))
                    tref$ = par$(6): ' temps inicial de referencia
                    IF mi > 0 THEN
                        fri = 1000000! / (mi * perm)
                    ELSE
                        IF LEFT$(l$, 5) <> "caadd" THEN GOTO errfor
                        fri = 1000000 / perm
                    END IF
                    Temps tref$, hora, minut, segon, tref, errnum
                    IF errnum > 0 THEN GOTO errfor
                    ' obtenim la localització temporal de cada segment
                    e = 0
                    WHILE e < totsegm
                        LINE INPUT #1, i$
                        IF i$ <> "" AND LEFT$(i$, 1) <> ":" THEN
                            Parametres i$, par$(), ",", npar
                            IF npar <> 2 THEN GOTO errfor
                            e = e + 1
                            in$(e) = par$(1): ' temps inicial del segment
                            fi$(e) = par$(2): ' temps final del segment
                        END IF
                    WEND
                END IF
            WEND
        END IF
       
        ' generem linees per cada segment
        FOR x = 1 TO totsegm
            s$ = l$: ' incialitzem la linea de sortida
            Canvia "*", s$, segm(x): ' insertem el id.de segment relatiu
            Canvia "%%%", s$, sis(x): ' insertem sistema
            Canvia "#", s$, area: ' insertem area d'analisi
            ' completem la linea si la linea es "caad..."
            IF LEFT$(l$, 4) = "caad" THEN
                Temps in$(x), hora, minut, segon, ti, errnum
                IF errnum > 0 THEN GOTO errfor
                Temps fi$(x), hora, minut, segon, tf, errnum
                IF errnum > 0 THEN GOTO errfor
                t = tf ? ti
                mostres = t * fri
                segments = mostres \ 1024
                IF mostres MOD 1024 > 512 THEN segments = segments + 1
                IF segments > 128 THEN segments = 128
                IF LEFT$(l$, 5) = "caadd" THEN
                    s$ = s$ + STR$(perm) + STR$(segments)
                ELSE
                    s$ = s$ + STR$(perm) + STR$(mi) + STR$(segments)
                END IF
                s$ = s$ + STR$(ti) + STR$(dia) + STR$(mes)
                s$ = s$ + STR$(aa) + STR$(tref)
            END IF
            ' imprimim la linea .bat generada
            PRINT #2, s$
        NEXT
        ' separem cada grup de linees
        PRINT #2, ""
    END IF
    ' obtenim una nova linea a generar
    LINE INPUT #1, i$
WEND
RETURN

'========================================================================
'                           GENERA BLOCS
'========================================================================
blocs:
IF totsegm = 0 THEN GOTO errfor
' cargem les linees del bloc
lin = 0
LINE INPUT #1, l$
WHILE l$ <> "[fi blocs]"
    lin = lin + 1
    lin$(lin) = l$
    LINE INPUT #1, l$
WEND
bloc1:
FOR t = 1 TO totsegm
    ' generem etiqueta al principi del bloc que correspon a cada segment
    PRINT #2, ":" + sis(t) + segm(t)
    FOR l = 1 TO lin
        s$ = lin$(l)
        ' si no es una linea de comentari, generem linea .bat
        IF LEFT$(s$, 1) <> ":" THEN
            ' si es una linea en blanc, la imprimim tal cual
            IF s$ <> "" THEN
                ' generem linea del bloc
                Canvia "*", s$, segm(t): ' insertem id.segment relatiu
                Canvia "#", s$, area: ' insertem area d'analisi
                Canvia "%%%", s$, sis(t): 'insertem sistema
            END IF
            PRINT #2, s$
        END IF
    NEXT l
    ' separem cada bloc
    PRINT #2, ""
NEXT t
RETURN
SUB Canvia (s$, l$, c$)
p = 1: ls = LEN(s$)
WHILE p > 0
        p = INSTR(p, l$, s$)
        IF p > 0 THEN
                ll = LEN(l$)
                IF p < ll THEN
                r$ = LEFT$(l$, p ? 1) + c$ + RIGHT$(l$, ll ? (p + ls ? 1))
                ELSE
                r$ = LEFT$(l$, p ? 1) + c$
                END IF
                l$ = r$
        END IF
WEND
END SUB
SUB Parametres (v$, param$(), separador$, numpar)
numpar = 0
pa = 1
DO WHILE pa > 0 AND pa <= LEN(v$)
    p = INSTR(pa, v$, separador$)
    numpar = numpar + 1
    IF p > 0 THEN
        param$(numpar) = MID$(v$, pa, p ? pa)
        pa = p + 1
    ELSE
        param$(numpar) = MID$(v$, pa, LEN(v$) ? pa + 1)
        EXIT DO
    END IF
LOOP
' eliminem espais en blanc
FOR x = 1 TO numpar
    param$(x) = LTRIM$(param$(x))
    param$(x) = RTRIM$(param$(x))
NEXT
END SUB
SUB Temps (tmp$, hora, minut, segon, tmp, errnum)
errnum = 0
Parametres tmp$, par$(), ":", numpar
IF numpar <> 3 THEN errnum = 1: EXIT SUB
hora = VAL(par$(1))
minut = VAL(par$(2))
segon = VAL(par$(3))
tmp = hora * 3600 + minut * 60 + segon
END SUB
 

© Biopsychology.org, 1998-2006

 
Última actualización:
22/03/06