Modificare gli avvisi vocali modificando il file data.chk

Come personalizzare i file di allarme per i POI di TomTom 5, se non volete usare il più semplice e utile sistema dei files .ogg.

1. Create una cartella in C, chiamandola Tomtom (C:\Tomtom)

2. Create in questa cartella altre 2 cartelle: Conversione Wav e UKVoices quindi avrete C:\Tomtom\Conversione Wav e C:\Tomtom\UKVoices

3. Occorre procurarsi i 15 files (o meno a seconda di quanti ne volete personalizzare).

Generalmente questi files sono reperibili in formato Wav o creati dall’utente in formato Wav. Nel caso siano creati dall’utente, una soluzione possibile è quella di registrarli 16000 Hz Mono PCM. Ad ogni modo, ho trovato anche queste indicazioni, a seconda del dispositivo usato:
Pocket PC’s and Palms don’t care and use bank 1 the GO needs bank 1 at 22050 Hz mobile phones need the second bank, and need 16000Hz Quindi per Pocket e Palm 22050 Hz mentre per la versione mobile servono a 16000Hz.
Per Bank 1, penso si riferisca alla tabella Excel che si andrà a creare in seguito.
Al momento io ho utilizzato i file sonori che si trovano all’indirizzo: http://www.poigps.com/poi/addon/wav_checkpoint.zip
Salvateli (scompattate il files scaricato) nella cartella Conversione Wav

4. Trovati i file .wav (o altro formato sonoro, come mp3), bisogna però convertirli in formato .ogg.
Procuratevi un programma che possa convertire i file audio (WAV, MP3 etc.) in file con estensione .OGG Vorbis.
Qualsiasi programma di editing audio va bene, ecco solo qualche esempio (in rete ne troverete a centinaia):
Audacity (freeware)
Switch
GoldWave
Alive MP3-WaV converter

Non create files di qualità inutilmente eccelsa o in stereofonia. Dato che questa guida riguarda la modifica del data.chk che è utile solo nei cellulari con sistema Symbian con Tomtom Mobile 5, ricordatevi di controllare che la frequenza di campionamento del file. ogg sia a 16000 Hz, monofonico.

5. Aprite un nuovo documento Excel e salvatelo per es. nella cartella Tomtom col nome TomTom Poi converter

Oppure scaricatelo già pronto PoiConverter.xls

6. Andate in Strumenti → Macro → Visual Basic Editor. Sarà aperta una nuova finestra.

7. A sinistra, dovreste visualizzare VBAProject e sotto la cartella Microsoft Excel Oggetti aperta.
Qui visualizzerete Foglio 1, Foglio 2, Foglio 3, ThisWorkbook. Fate doppio clic su Foglio 1.
Sarà aperto un foglio bianco.

8. Incollate quanto riportato di seguito:

Sub data_chk_reload() 
Dim g As Long 
Dim b As Byte 
Dim bt As Byte 
Dim Maxfiles 
Maxfiles = 30 
'this folder holds the original data.chk file N.B. Following line modified by TomTomTim folder = "C:\TomTom\" 
'identifier of the data.chk version. complete file name is identifier.data.chk fname = "4890" 
'the OGG files need to be in the subfolder specified by cell C1 fnum = FreeFile 
Open folder & fname & ".data.chk" For Binary Access Read As #fnum 
flen = FileLen(folder & fname & ".data.chk") 
g = get_long 
Debug.Print fname; " Number of modules: "; g; " File size: "; flen 
’If (g <> 102) And (g <> 120) And (g <> 123) And (g <> 136) Then 
’a = MsgBox("Not a good DATA.CHK file. Please report your build version of the TomTom program to lutz@pocketgpsworld.com", vbOKCancel, "Error - wrong file version") 
’Close 
’Exit Sub 
’End If 
'get offsets 
If g = 102 Then Maxfiles = 12 
ReDim entry(g + 1) 
For i = 1 To g + 1 
entry(i).offset = get_long 
entry(i).sourceoffset = entry(i).offset 
If i > 1 Then entry(i - 1).length = entry(i).offset - entry(i - 1).offset 
Next 
'confirm file size 
If entry(g + 1).offset = flen Then 
Debug.Print "File size confirmed" 
Else 
Debug.Print "File size mismatch! Reported:" & Hex(entry(g + 1).offset) & " Actual:" & flen 
End If 
'calculating new offsets etc 
Debug.Print "Calculating new parameters" 
i = 2 
For f = g - Maxfiles To g 
If (Cells(i, 3) > vbNullString) And (f < g) Then 'new file 
Debug.Print "Verifying "; Cells(i, 3) 
flen = FileLen(folder & Cells(1, 3) & "\" & Cells(i, 3)) 
entry(f).ogglength = flen 
pad = 0 
While flen Mod 4 <> 0 
flen = flen + 1 
pad = pad + 1 
Wend 
entry(f).blocks = (flen + 12) / 4 
entry(f).length = flen + 16 
End If  
i = i + 1 
Next 
'recalculate header 
Debug.Print "Recalculating header "; 
For i = g - Maxfiles To g + 1 
entry(i).offset = entry(i - 1).offset + entry(i - 1).length 
Next 
Debug.Print "- new File Size is "; entry(g + 1).offset 
'write output file 
Debug.Print "Writing CHK file " 
On Error Resume Next 
Kill folder & Cells(1, 3) & "\" & fname & "_new.data.chk" 
On Error GoTo 0 
fnum2 = FreeFile 
Open folder & Cells(1, 3) & "\" & fname & "_new.data.chk" For Binary Access Write As #fnum2 
'write header 
'number of segments 
put_long (g) 
'offsets 
For i = 1 To g + 1 
put_long (entry(i).offset) 
Next 
'non-voice files 
'position pointer 
Get #fnum, entry(1).offset, b 
h = entry(g - Maxfiles).offset - entry(1).offset 
For i = 1 To h 
Get #fnum, , b 
Put #fnum2, , b 
DoEvents 
Next 
'write sound files, either from source or from new OGG 
Debug.Print "Writing CHK file - Sounds" 
i = 2 
For f = g - Maxfiles To g 
If (Cells(i, 3) > vbNullString) And (f < g) Then 'read new file 
Debug.Print "Including "; Cells(i, 3); " for "; Cells(i, 1) 
'recreate header 
b = 1 
Put #fnum2, , b 
b = 0 
Put #fnum2, , b 
b = entry(f).blocks \ 256 
Put #fnum2, , b 
b = entry(f).blocks And 255 
Put #fnum2, , b 
put_long (1) 
put_long (8) 
put_long (entry(f).ogglength) 
fout = FreeFile 
Open folder & Cells(1, 3) & "\" & Cells(i, 3) For Binary Access Read As #fout 
For h = 1 To entry(f).ogglength 
Get #fout, , b 
Put #fnum2, , b 
DoEvents 
Next 
'padding 
b = 0 
flen = entry(f).ogglength 
While flen Mod 4 <> 0 
Put #fnum2, , b 
flen = flen + 1 
Wend 
Close (fout) 
Else 'read from source 
'position pointer 
Get #fnum, entry(f).sourceoffset, b 
For h = 1 To entry(f).length 
Get #fnum, , b 
Put #fnum2, , b 
DoEvents 
Next 
End If 
i = i + 1 
Next 
Close 
Beep 
MsgBox ("OK – La dimensione del nuovo file creato è: " & FileLen(folder & Cells(1, 3) & "\" & fname &   _new.data.chk")) 
End Sub 
'required because of the little endian storage of long values 
Function get_long() As Long 
Dim b As Byte 
l = 0 
For h = 1 To 4 
Get #fnum, , b 
l = l * 256 + b 
Next 
get_long = l 
End Function 
Sub put_long(ByVal l As Long) 
Dim b(4) As Byte 
For h = 1 To 4 
b(h) = l And 255 
l = l \ 256 
Next 
For h = 4 To 1 Step -1 
Put #fnum2, , b(h) 
Next 
End Sub</code> 

9. A sinistra, dove avevate trovato il Foglio 1, cliccate con il pulsante destro su Microsoft Excel Oggetti, scegliete Inserisci →Modulo.
Sarà aperto un foglio bianco. Incollate quanto riportato di seguito (per sser certi che state incollando nel posto giusto, questo foglio deve avere due menu a tendina nella parte altra: (generale) e (dichiarazioni):

Public fnum 
Public fnum2 
Type CHKentry 
offset As Long 
sourceoffset As Long 
length As Long 
tag As Byte 
packtype As Byte 
blocks As Integer 
ogglength As Long 
End Type 
Public entry() As CHKentry</code> 

10. Salvate il codice e tornate sul foglio excel.

11. A questo punto occorre costruire la tabella di riferimento per i files vocali. La tabella ha 3 colonne.

A partire dalla cella A1, l’intestazione delle 3 colonne deve essere la seguente: Nome, Sampling, UKVoices.

La tabella che creerete sarà simile alla seguente:

ABC
1NomeSamplingUKVoices
2Beep 111025Autovelox.ogg
3Beep 211025probabileautovelox.ogg
4Beep 311025rilevatoredisorpasso.ogg
5Beep 411025telecameraconrilevatore.ogg
6Beep 511025telecamerasuincrocio.ogg
7Bell 111025max50.ogg
8Bell 211025max90.ogg
9Bell 311025max130.ogg
10Boing11025rallentare.ogg
11Bugle11025rallentarevelocitaelevata.ogg
12Cow11025velocitelevata.ogg
13Chuckoo11025transitovietato.ogg
14Polite 111025
15Polite 211025
16Polite 311025
17Beep 116000Autovelox.ogg
18Beep 216000probabileautovelox.ogg
19Beep 316000rilevatoredisorpasso.ogg
20Beep 416000telecameraconrilevatore.ogg
21Beep 516000telecamerasuincrocio.ogg
22Bell 116000max50.ogg
23Bell 216000max90.ogg
24Bell 316000max130.ogg
25Boing16000rallentare.ogg
26Bugle16000rallentarevelocitaelevata.ogg
27Cow16000velocitelevata.ogg
28Chuckoo16000transitovietato.ogg
29Polite 116000
30Polite 216000
31Polite 316000
32Shutter11025

Come potete notare, nella prima colonna viene inserito il nome originale del file di TT5, mentre nella terza colonna
dovete inserire il nome dei vostri files .ogg. I valori della seconda colonna impostateli così come sono.
Se non indicate nulla nella terza colonna, il file creato, manterrà il file audio originale (nel mio caso ho mantenuto i polite).

Il nome dei vostri files NON deve contenere spazi ed il programma si aspetta che siano tutti nella cartella C:\Tomtom\UKVoices (RISPETTATE LE MAIUSCOLE NEL NOMINARE LE CARTELLE)

12. Stando sempre sul Foglio Excel, dal menu Visualizza →Barre degli Strumenti→Strumenti di controllo (se non è già abilitata, abilitatela). Sarà visualizzata una nuova barra di pulsanti di excel.

13. Cliccate sul pulsante che raffigura una squadra blu.

14. Cliccate sul pulsante che rappresenta un pulsante di comando (il quarto nella prima colonna di pulsanti presenti).

15. Spostatevi in una zona del foglio excel e disegnate il vostro pulsante.

16. Se volete cambiare l’etichetta del pulsante che avete creato, cliccate sul pulsante con il pulsante destro del mouse, scegliendo Proprietà. Sarà aperta una nuova finestra. Cambiate la descrizione in corrispondenza della voce Caption e avrete un nuovo nome sul vostro pulsante.

17. Cliccate ora con il pulsante destro, sempre sul vostro pulsante e scegliete Visualizza codice.

18. Individuate le linee di comando (dovreste avere già il cursore pronto là):

Private Sub CommandButton1_Click() 

e

End Sub,</code> 

Ed aggiungete in mezzo la seguente riga di codice:

data_chk_reload</code> 

19. Salvate e chiudete il Visual Basic Editor e tornate sul foglio Excel.

20. Copiate il file data.chk dal vostro palmare. Dovreste trovarlo in \programmi\navigator. Gia che ci siete fatevi una copia sul palmare, o rinominatelo in data.chk.original (in questo modo, potrete sempre ripristinarlo quando volete).

21. Incollate il file data.hk che avete appena copiato dal vostro palmare, nella cartella C:\Tomtom

22. Rinominate il file in 4890.data.chk.

A questo proposito, verificate la versione del vostro tom tom prima di rinominare il file sul palmare.
Se la verione è 5.000 (4890) allora procedete come ho fatto io, altrimenti, il file che rinominate, dovrebbe riportare il numero della vostra versione, cioè quello tra parentesi, inoltre, dovrete tornare nel codice Visual Basic (tramite l’editor) e cambiare il numero di versione da 4890 al vostro, ogni volta che viene riportato. Se non fate così, probabilmente non funzionerà la reazione del vostro file audio.

23. Ora siete pronti per creare il vostro file audio per TT5. Tornate sul foglio Excel e cliccate sul pulsante che avete creato. Attendete qualche minuto, finchè non comparirà il messaggio: Ok – La dimensione del nuovo file creato è:

24. Controllate nella cartella C:\Tomtom\UKVoices e troverete il file 4890_new.data.chk

25. Rinominate questo file in data.chk e incollatelo nella cartella del vostro palmare programmi/navigator.

Vi consiglio di rinominare il data.chk originale per non perderlo definitivamente.

26. Avviate TT5 sul palmare e divertitevi con i nuovi suoni.

//Eventuale problema://
Ho provato a seguire le tue indicazioni ma al momento della compilazione del file mi da un errore.
Il debug mi segnala ERRORE DI RUNTIME 9</quote>

Risolto copiando il file “data.chk” originale nella directory c:\TomTom e rinominandolo a “4890.data.chk”
dopodichè lanciando il file di Excel non ho avuto più problemi ed ho fatto quello che volevo.

Si ringrazia Jackie Estacado
red. by Ross