Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   convertir ascii a 0 y 1 y a beeps (https://www.clubdelphi.com/foros/showthread.php?t=89680)

danielmj 15-01-2016 10:32:09

convertir ascii a 0 y 1 y a beeps
 
Hola, despues de mucho tiempo, vuelvo a las andadas, y es que hace tiempo que le vengo dando vueltas a una idea y me gustaría saber si puede realizarse, la cuestión es que me gustaría pasarle un archivo cualquiera a la aplicacion (ya sea un archivo de 3Mb o uno de 34Gb), que esta lo abra como ascii y que seguidamente y en función de su valor en la tabla ascii (para cada simbolo), le asigne un valor en binario. Este valor en binario luego se convertiría en beeps, siendo el 1 un tono mas alto que el 0.

Por ejemplo si la cadena en ascii fuera algo así: As&8)x234$, cada caracter tiene un valor, la "A" = 65 pues ese valor pasarlo a 1 y 0 que sería algo tal que 1000001 y a este binario asignarle tonos mas graves o agudos según sean 0 y 1 para al final crear un archivo mp3 con esta suceción de beeps.

¿Alguna sugerencia de como ir esbozando esto?
Un saludo a todos y aunque algo tarde, feliz año! XD

Ñuño Martínez 15-01-2016 13:16:12

Obtener los ceros y los unos no es difícil. Usando el operador MOD para saber el resto y SHL ó SHR para desplazar los bits (o "DIV 2") dentro de un bucle.

Crear el MP3 tampoco debería ser difícil. Claro que necesitarás una biblioteca que te lo permita. O, en el peor de los casos, usar un programa de apoyo como ffmpeg, que permite editar archivos multimedia (imagen, sonido y vídeo) a través de la consola de comandos.

TiammatMX 15-01-2016 20:25:16

Cita:

Empezado por danielmj (Mensaje 501242)
...le asigne un valor en binario. Este valor en binario luego se convertiría en beeps, siendo el 1 un tono mas alto que el 0...

¿Y no te sirve el alfabeto Morse? Digo, cayó en desuso desde que el telégrafo dejó de usarse, pero sigue siendo un standard universal.

danielmj 19-01-2016 08:39:10

Buenos días, lo primero perdón por tardar en contestar, lo segundo, gracias por vuestras respuestas, el trabajo no me da tiempo para vivir je, de echo escribo desde el curro con el móvil ya estoy por salir después e un turno de 17h... En fin, voy a probar lo del mod, a ver que tal. La idea es más amplia pero poco a poco.

Un saludo.

danielmj 02-02-2016 15:21:42

hola de nuevo, he empezado a trastear un poco la app, a esbozar si lo preferis, en fin el caso es que si pulso sobre un edit las teclas Alt+155, aparece el simbolo ascii "ø" que es lo correcto, el problema es que en el label no me guarda su valor numerico es decir "155", sino 248 y su semejante binario, adjunto captura. http://subefotos.com/ver/?cca3e3c60fa720f17f770603948a6a37o.png

El codigo que tengo es este:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var

  s: string;
  i,x: integer;

begin
  for i:= length(edit1.Text) downto 1 do
    begin
      label1.Caption:=  IntToStr(Ord(edit1.Text[i]));
      x:= StrToInt(label1.Caption);
      label2.Caption:= IntToBin(x,8);
    end;
end;

¿por qué no aparece el valor real? otro ejemplo, el valor numerico de ' ' es 255, pero en vez de eso me devuelve 160.

Gracias por vuestra ayuda.

danielmj 02-02-2016 20:34:11

hola, otro simbolo que no funciona bien es si tecleo Alt+254 que debería salir esto "■" pero la aplicacion si le pongo ese cuadrado negro no devuelve 254, sino que devuelve 9632 y no sé por que...

un saludo.

danielmj 03-02-2016 11:16:34

ascii extendido error
 
hola, sigo intentando sacar el calor decimal de un caracter ascii extendido >127, pero no lo consigo. por ejemplo:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  c: char;

begin
  c:= '■';
  label1.Caption:= intToStr(ord(c));
end;

Me devuelve 9632 cuando en realidad es 254 ¿alguna sugerencia?

Ñuño Martínez 03-02-2016 12:20:03

Tiene pinta de que está usando una tabla de códigos diferente a la que esperas. La verdad es que es un lío, con tanto UNICODE, ANSI, ISO y ASCII, y no veo solución sencilla.

Comprueba si la aplicación está usando la misma tabla que tu sistema operativo. El como ya no estoy seguro, aunque creo que en las propiedades del Equipo y en la configuración del compilador vendrá algo.

Casimiro Notevi 03-02-2016 12:34:46

Cita:

Empezado por danielmj (Mensaje 501813)
hola, sigo intentando sacar el calor decimal de un caracter ascii extendido >127, pero no lo consigo. por ejemplo:Me devuelve 9632 cuando en realidad es 254 ¿alguna sugerencia?

No crees hilos nuevos para lo mismo, gracias :)

¿Has probado con ansistring(loquesea) ?

danielmj 03-02-2016 12:58:03

hola casimiro, no, voy a ver y sobre el hilo oido cocina, la verdad se me fue... por que no es que sea nuevo en el foro, vamos que conozco las normas. Un saludo.
Ñuño, voy a mirar tambien lo que dices, el problema es... cuando se ejecute en otra maquina ¿lo hará correctamente o volverá a fallar?

un saludo y gracias.

Neftali [Germán.Estévez] 03-02-2016 17:25:28

Cita:

Empezado por danielmj (Mensaje 501813)
hola, sigo intentando sacar el calor decimal de un caracter ascii extendido >127, pero no lo consigo. por ejemplo:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  c: char;

begin
  c:= '■';
  label1.Caption:= intToStr(ord(c));
end;

Me devuelve 9632 cuando en realidad es 254 ¿alguna sugerencia?

A mi este código me está funcionando.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  c: char;
begin
  c:= '®';
  Label1.Caption:= intToStr(ord(c));
end;

Me devuelve un 174.

danielmj 03-02-2016 17:52:55

Hola Neftalí, ummm 174 no se corresponde con ese simbolo ascii, mira la tabla de la captura, el 174 pertenece a "«" el simbolo "®" se corresponde con el 169. Y ese el problema, que no sé como sacar su valor correcto. La idea de este proyecto es muy amplia, y estos son solo los primeros problemas que me estoy encontrando, más adelante, solucionado esto, tendre que trabajar con alguna libreria para usar el formato mp3 y seguramente volvere a tener problemas.

En fin, de momento quisiera obtener el decimal del ascii para luego pasarlo a binario.

Un saludo y gracias.

Neftali [Germán.Estévez] 03-02-2016 18:49:31

Creo que delphi está trabajando con una tabla que no es la que tú has puesto.
En la mía (desde el IDE de Delphi) aparece esto:


danielmj 03-02-2016 19:55:58

hola, neftalí, pues ahora si me dejas a cuadros por que en mi teclado pulsando "alt+174" sale "«", ya me perdí aun mas.
un saludo.

danielmj 03-02-2016 20:37:54

voy a plantearlo de otro modo, la cuestion es, si yo abro un archivo x.mkv con el bloc de notas, me salen mil simbolos que se corresponden con la tabla ascii, entonces, puedo crear un case dentro de un bucle donde se recorra caracter a caracter y en caso de ser por ejemplo ® le asigne el valor decimal? seria un case de 255 lineas pero seria una opcion?

Por cierto neftalí, tienes razón, lo que pasa es que yo pulsaba alt+169 y he caido en la cuenta de que pulsando alt+0174 se da el mismo resultado, lo que me lleva a otra duda, cuando en el bloc de notas aparezca "®" que valor le doy 169 o 0174? por que no es lo mismo y la aplicacion tendrá la operación inversa, es decir que del binario, pasará al decimal y por ultimo al simbolo ascii.


La franja horaria es GMT +2. Ahora son las 21:12:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi