{"id":302,"date":"2006-05-13T16:44:30","date_gmt":"2006-05-13T14:44:30","guid":{"rendered":""},"modified":"2006-05-13T16:44:30","modified_gmt":"2006-05-13T14:44:30","slug":"las-voces-del-gps","status":"publish","type":"post","link":"https:\/\/nauj27.com\/blog\/?p=302","title":{"rendered":"Las voces del GPS"},"content":{"rendered":"<p>Me pasaron una voz de Torrent para el TomTom 5 y cuando fui a probarla no me funcion\u00f3. Entonces me puse a buscar a ver por qu\u00e9 no funcionaba y pens\u00e9, \u00bfy si miro el archivo por dentro?. Aqu\u00ed est\u00e1 el resultado de la investigaci\u00f3n:<\/p>\n<h4>An\u00e1lisis<\/h4>\n<p>Comparando varios archivos de voces se ve que hay una cabecera que es siempre la misma. Esta cabecera es:<\/p>\n<p class=\"cita\">00 00 00 3b 00 00 00 f4<\/p>\n<p>A continuaci\u00f3n cada grupo de cuatro bytes parece indicar la posici\u00f3n del<br \/>\ncomienzo de un nuevo archivo Ogg Vorbis.<\/p>\n<p class=\"cita\">00000000  00 00 00 3b 00 00 00 f4  00 00 25 3c 00 00 4e 78  |&#8230;;&#8230;&#8230;%<..Nx|\n00000010  00 00 70 ec 00 00 91 08  00 00 be f0 00 00 e7 a0  |..p.............|<\/p>\n<p>En esas direcciones tenemos:<\/p>\n<p class=\"cita\">00002530  24 af a6 f1 db 37 ab d2  aa 06 03 0e 01 00 0a 4e  |$&#8230;.7&#8230;&#8230;&#8230;N|<br \/>\n00002540  00 00 00 01 00 00 00 08  00 00 29 2b 4f 67 67 53  |&#8230;&#8230;&#8230;.)+OggS|<br \/>\n00002550  00 02 00 00 00 00 00 00  00 00 01 00 00 00 00 00  |&#8230;&#8230;&#8230;&#8230;&#8230;.|<br \/>\n00002560  00 00 96 fc 0f 56 01 1e  01 76 6f 72 62 69 73 00  |&#8230;..V&#8230;vorbis.|<br \/>\n00002570  00 00 00 01 22 56 00 00  00 00 00 00 1e 9d 00 00  |&#8230;.\u00bbV&#8230;&#8230;&#8230;.|<br \/>\n00002580  00 00 00 00 a9 01 4f 67  67 53 00 00 00 00 00 00  |&#8230;&#8230;OggS&#8230;&#8230;|<\/p>\n<p>Indica realmente la posici\u00f3n en la l\u00ednea en hex anterior a partir de la cual empieza el nuevo archivo. Es decir, si en las l\u00edneas anteriores podemos ver que nos ha indicado 00 00 25 3c y ah\u00ed tenemos 0e, en la l\u00ednea siguiente debajo del 0e, queda el \u00faltimo byte del archivo anterior y a continuaci\u00f3n comienza el siguiente Ogg Vorbis. El nuevo archivo empieza en la posici\u00f3n 00 00 25 3c + 0x10.<\/p>\n<p>Veamos si se cumple con el siguiente tambi\u00e9n. Tenemos 00 00 4e 78. En esa<br \/>\nposici\u00f3n hay el siguiente fragmento:<\/p>\n<p class=\"cita\">00004e70  4a dd 45 7e 21 00 0e 00  01 00 08 9c 00 00 00 01  |J.E~!&#8230;&#8230;&#8230;..|<br \/>\n00004e80  00 00 00 08 00 00 22 62  4f 67 67 53 00 02 00 00  |&#8230;&#8230;\u00bbbOggS&#8230;.|<\/p>\n<p>En la posici\u00f3n 00 00 4e 78 tenemos el byte 01. Debajo de \u00e9ste se encuentra el 4f 67 67 que es el `Ogg&#8217;. De nuevo es 00 00 4e 78 + 0x10. \u00a1Se cumple!<\/p>\n<p>Como comprobaci\u00f3n adicional veamos el \u00faltimo indicado en el fragmento de cabecera que hemos tomado para la demostraci\u00f3n. Tenemos 00 00 e7 a0. Si nos vamos a esa posici\u00f3n encontramos:<\/p>\n<p class=\"cita\">0000e7a0  01 00 0b 34 00 00 00 01  00 00 00 08 00 00 2c c4  |&#8230;4&#8230;&#8230;&#8230;.,.|<br \/>\n0000e7b0  4f 67 67 53 00 02 00 00  00 00 00 00 00 00 01 00  |OggS&#8230;&#8230;&#8230;&#8230;|<\/p>\n<p>Con lo que tenemos de nuevo 00 00 e7 a0 + 0x10 = e7 b0.<\/p>\n<p>Los archivos Ogg Vorbis extra\u00eddos tienen el siguiente formato:<\/p>\n<p class=\"cita\">$ ogginfo voces10.ogg<br \/>\nProcessing file \u00abvoces10.ogg\u00bb&#8230;<\/p>\n<p>New logical stream (#1, serial: 00000001): type vorbis<br \/>\nVorbis headers parsed for stream 1, information follows&#8230;<br \/>\nVersion: 0<br \/>\nVendor: Xiph.Org libVorbis I 20020717 (1.0)<br \/>\nChannels: 1<br \/>\nRate: 22050<\/p>\n<p>Nominal bitrate: 40,222000 kb\/s<br \/>\nUpper bitrate not set<br \/>\nLower bitrate not set<br \/>\nVorbis stream 1:<br \/>\n        Total data length: 5871 bytes<br \/>\n        Playback length: 0m:00.811s<br \/>\n        Average bitrate: 57,876629 kb\/s<br \/>\nLogical stream 1 ended<\/p>\n<p>La \u00faltima palabra de 32 bits que indica d\u00f3nde termina el \u00faltimo Ogg, lo<br \/>\ncual coincide con la posici\u00f3n del \u00faltimo byte del archivo, se encuentra<br \/>\na partir de la posici\u00f3n 0000 00f0.<\/p>\n<p>Despu\u00e9s de la posici\u00f3n 0000 00f3 del archivo hay cuatro palabras de 32 bits<br \/>\nm\u00e1s antes del primer Ogg. Estas cuatro palabras en marta son:<\/p>\n<p class=\"cita\">0000 00f4 -> 0100 0911<br \/>\n0000 00f8 -> 0000 0001<br \/>\n0000 00fc -> 0000 0008<br \/>\n0000 0100 -> 0000 2438<\/p>\n<p>Y en el caso de raul:<\/p>\n<p class=\"cita\">0000 00f4 -> 0100 0a82<br \/>\n0000 00f8 -> 0000 0001<br \/>\n0000 00fc -> 0000 0008<br \/>\n0000 0100 -> 0000 29f9<\/p>\n<p>Ni idea de para qu\u00e9 se usan. \u00bfSer\u00e1 una especie de suma de comprobaci\u00f3n?<\/p>\n<h4>Aplicaci\u00f3n<\/h4>\n<p>En base a estas averiguaciones he programado dos peque\u00f1as aplicaciones en python. Una de ella extrae los sonidos de un archivo existente, la otra crea un archivo de sonidos a partir de una serie de Ogg que contengan las nuevas voces grabadas. Adicionalmente un peque\u00f1o gui\u00f3n en bash codifica en Ogg archivos wav en el formato usado por TomTom5. A continuaci\u00f3n los enlaces a cada una de las aplicaciones:<\/p>\n<ul>\n<ol><a href=\"upload-misc\/vocesgps\/procesarSonidos.sh\" title=\"procesarSonidos.sh\">procesarSonidos.sh<\/a><\/ol>\n<ol><a href=\"upload-misc\/vocesgps\/extraerSonidos.py\" title=\"extraerSonidos.py\">extraerSonidos.py<\/a><\/ol>\n<ol><a href=\"upload-misc\/vocesgps\/empaquetarSonidos.py\" title=\"empaquetarSonidos.py\">empaquetarSonidos.py<\/a><\/ol>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Me pasaron una voz de Torrent para el TomTom 5 y cuando fui a probarla no me funcion\u00f3. Entonces me puse a buscar a ver por qu\u00e9 no funcionaba y pens\u00e9, \u00bfy si miro el archivo por dentro?. Aqu\u00ed est\u00e1 el resultado de la investigaci\u00f3n: An\u00e1lisis Comparando varios archivos de voces se ve que hay [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/302"}],"collection":[{"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=302"}],"version-history":[{"count":0,"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/302\/revisions"}],"wp:attachment":[{"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=302"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=302"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nauj27.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=302"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}