|
Pagina 2 di 5 Consideriamo di aver estratto il numero 3, imposto 1 nel registro GPRM1: 0000 0000 0000 0001 Moltiplico per 2: 0000 0000 0000 0010 Sottraggo 1 al numero estratto registrato in GPRM2: 3 – 1 = 2 Il valore ottenuto è superiore ad 1, quindi ripeto il ciclo moltiplicando di nuovo GPRM1 per 2: 0000 0000 0000 0100 Sottraggo 1 al valore presente in GPRM2: 2 – 1 = 1 Quindi GPRM2 non è più maggiore di 1, allora abbiamo correttamente impostato la maschera bit che indicherà qualche media eseguire, cioè il 3° media. Possiamo proseguire controllando che il media estratto non sia già stato eseguito. A questo punto non abbiamo più bisogno del valore memorizzato in GPRM1 e possiamo usarlo per altro, in particolare dobbiamo copiare il valore presente in GPRM2 in quanto eseguiremo un AND logico con il valore in GPRM5 per verificare la traccia scelta e questo cancellerà il numero estratto presente in GPRM2. Label2: GPRM2 = GPRM1 Eseguiamo la verifica con un AND logico ricordando che 0 & 0 = 0, 1 & 0 = 0, 0 & 1 =0 mentre 1 & 1 = 1. GPRM2 = GPRM2 & GPRM5 Se il risultato dell’AND logico è diverso a 0 significa che il media è già stato eseguito e quindi dovremo ricominciare l’estrazione. If (GPRM2 != 0) then GotoLabel ‘Label0’ Se invece il media estratto non è stato eseguito, potremo proseguire. Per prima cosa dovremo memorizzare in GPRM5 il media estratto per evitare che alla successiva estrazione possa venir nuovamente eseguito e per far questo useremo un altro operando logico: OR. GPRM5 = GPRM5 ^ GPRM1 L’OR Logico, a differenza dell’AND, funziona in questo modo: 0 & 0 = 0, 1 & 0 = 1, 0 & 1 = 1, 1 & 1 = 1. Pertanto se GPRM5 è a 0 e GPRM1 corrisponde al 3 media, confrontando bit per bit, avremo: GPRM 1 0000 0000 0000 0100 GPRM5 0000 0000 0000 0000 Esenguendo l’OR sui singoli bit otterremo: GPRM5 0000 0000 0000 0100 Memorizzato il media non resta che attivare la riproduzione tramite una serie di Link condizionato al valore di GPRM1. if (GPRM0 = 1) then Link page: ‘Media (Page 1)’, button: ‘Default’ if (GPRM0 = 2) then Link page: ‘Media (Page 2)’, button: ‘Default’ if (GPRM0 = 3) then Link page: ‘Media (Page 3)’, button: ‘Default’ e così via, infine non dovremo far altro che verificare il tutto nella preview. Questo esempio è basato sul seguente link: http://benderydt.com/tech/DVD_Studio_Pro/random_play Di seguito il listato completo dello script: - If (GPRM5 >= 65535) then GPRM5 = 0
Label0: - GPRM0 = Random (16)
- GPRM1 = 1
- If (GPRM0 = 1) the GotoLabel ‘Label2’
- GPRM2 = GPRM0
Label1: - GPRM1 = GPRM1 * 2
- GPRM2 = GPRM2 - 1
- If (GPRM2 > 1) then GotoLabel ‘Label1’
Label2: - GPRM2 = GPRM1
- GPRM2 = GPRM2 & GPRM5
- If (GPRM2 != 0) then GotoLabel ‘Label0’
- GPRM5 = GPRM5 | GPRM1
- if (GPRM0 = 1) then Link page: ‘Media (Page 1)’, button: ‘Default’
- if (GPRM0 = 2) then Link page: ‘Media (Page 2)’, button: ‘Default’
- if (GPRM0 = 3) then Link page: ‘Media (Page 3)’, button: ‘Default’
- if (GPRM0 = 4) then Link page: ‘Media (Page 4)’, button: ‘Default’
- if (GPRM0 = 5) then Link page: ‘Media (Page 5)’, button: ‘Default’
- if (GPRM0 = 6) then Link page: ‘Media (Page 6)’, button: ‘Default’
- if (GPRM0 = 7) then Link page: ‘Media (Page 7)’, button: ‘Default’
- if (GPRM0 = 8) then Link page: ‘Media (Page 8)’, button: ‘Default’
- if (GPRM0 = 9) then Link page: ‘Media (Page 9)’, button: ‘Default’
- if (GPRM0 = 10) then Link page: ‘Media (Page 10)’, button: ‘Default’
- if (GPRM0 = 11) then Link page: ‘Media (Page 11)’, button: ‘Default’
- if (GPRM0 = 12) then Link page: ‘Media (Page 12)’, button: ‘Default’
- if (GPRM0 = 13) then Link page: ‘Media (Page 13)’, button: ‘Default’
- if (GPRM0 = 14) then Link page: ‘Media (Page 14)’, button: ‘Default’
- if (GPRM0 = 15) then Link page: ‘Media (Page 15)’, button: ‘Default’
- if (GPRM0 = 16) then Link page: ‘Media (Page 16)’, button: ‘Default’
Qui trovate il file d’esempio. (Random_01.dar) E’ consigliabile spezzare questo lungo script in due più piccoli per evitare problemi con i lettori DVD, in questo caso sposteremo tutti i 16 link finali in un nuovo script ed in quello iniziale aggiungeremo semplicemente: - Link script: ‘DVD Script 2’
Qui trovate il file d’esempio. (Random_02.dar) Nei miei esempi ho utilizzato dei Menu, tuttavia è possibile utilizzare lo stesso meccanismo con dei filmati. Nel caso si volesse effettuare una selezione random con meno media, basta modificare le prime due righe: - If (GPRM5 >= 65535) then GPRM5 = 0
Label0: Nella 2° riga inseriremo il numero di media massimo entro cui estarre (max 16!), mentre nella prima riga inseriremo il valore decimale dei corrispondente 16bit. | Media | 16Bit | Valore GPRM5 | | 1 | 0000 0000 0000 0001 | 1 | | 2 | 0000 0000 0000 0011 | 3 | | 3 | 0000 0000 0000 0111 | 7 | | 4 | 0000 0000 0000 1111 | 15 | | 5 | 0000 0000 0001 1111 | 31 | | 6 | 0000 0000 0011 1111 | 63 | | 7 | 0000 0000 0111 1111 | 127 | | 8 | 0000 0000 1111 1111 | 255 | | 9 | 0000 0001 1111 1111 | 511 | | 10 | 0000 0011 1111 1111 | 1023 | | 11 | 0000 0111 1111 1111 | 2047 | | 12 | 0000 1111 1111 1111 | 4095 | | 13 | 0001 1111 1111 1111 | 8191 | | 14 | 0011 1111 1111 1111 | 16383 | | 15 | 0111 1111 1111 1111 | 32768 | | 16 | 1111 1111 1111 1111 | 65535 | Per maggiori informazioni sulla conversione da sistema binario a decimale cliccare qui.
|