De letra a sonido y de sonido a letra.

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
Avatar de Usuario
chekok
Hacker del Foro
Mensajes: 111
Registrado: 16 Sep 2011, 11:50
Ubicación: Valencia / España
Contactar:

De letra a sonido y de sonido a letra.

Mensaje por chekok »

Hola amigos, cuanto tiempo.
Estoy haciendo unos enredos con creación de sonidos con autoit y después hacer lo contrario, de un archivo de sonido reconocer las notas musicales correspondientes (se supone que dicho archivo de sonido ha sido creado con los tonos empleados en el código).

Por ejemplo, he preparado esto:

Código: Seleccionar todo

#cs
==================================================================================
Música básica con AUTOIT (A través del Buzzer de la placa base).
by Chekok 2014
========================
FRECUENCIAS
========================
1000 = Do
1100 = Re
1200 = Mi
1300 = Fa
1400 = Sol
1500 = La
1600 = Si
1700 = Do#
========================
TIEMPOS
========================
negra = 500
blanca = 1000
silencio de negra = sleep(500)
silencio de blanca = sleep(1000)
corchea = 250 x TONO
===================================================================================
#ce

;Ejemplo: "Cumpleaños Feliz"
Beep(1000, 500);DO
Beep(1000, 500);DO
Beep(1100, 500);RE
Beep(1000, 500);DO
Beep(1300, 1000);FA
Beep(1200, 1000);MI
sleep(500)
Beep(1000, 500);DO
Beep(1000, 500);DO
Beep(1100, 500);RE
Beep(1000, 500);DO
Beep(1400, 1000);SOL
Beep(1300, 1000);FA
sleep(500)
Beep(1000, 500);DO
Beep(1000, 500);DO
Beep(1700, 1000);DO#
Beep(1500, 1000);LA
sleep(500)
Beep(1300, 500);FA
Beep(1300, 500);FA
Beep(1200, 1000);MI
Beep(1100, 1000);RE
sleep(500)
Beep(1600, 500);SI
Beep(1600, 500);SI
Beep(1500, 1000);LA
Beep(1300, 1000);FA
Beep(1400, 1000);SOL
Beep(1300, 1000);FA
;Fin ejemplo.
Después de ver este ejemplo de como se realizaría la creación de sonidos, se os ocurre alguna manera de hacer lo contrario?
O eso es imposible de hacer con Autoit?
La vida es larga y dura.
Avatar de Usuario
chekok
Hacker del Foro
Mensajes: 111
Registrado: 16 Sep 2011, 11:50
Ubicación: Valencia / España
Contactar:

Re: De letra a sonido y de sonido a letra.

Mensaje por chekok »

La idea real del proyecto no es hacer música, es crear una nota o tono para cada dígito del sistema hexadecimal, de tal manera que se pueda trasmitir información (imágenes, programas, documentos, etc.) por medio de un archivo de sonido.
Con autoit se haría el programa que convierta de hexadecimal a sonidos y lo contrario, de un archivo de sonido identificar los tonos y rehacer el código original.

El proyecto final es trasmitir información por medio de sonido, ya sea un radiotrasmisor, mp3, vozip, etc.
La vida es larga y dura.
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: De letra a sonido y de sonido a letra.

Mensaje por Dany »

Lo que puedes hacer es crear una structura algo asi:

structura
tono
tiempo
tiemposleep
finstructura

entonces crear tu structura * numero de notas
luegos lo escribes en disco
despues al lees de ahi apuntas al primer dato de la structura. luego vas moviendo tu puntero 2*4.

si quieres un ejemplo avisame.

Saludos
  • ............................................Imagen
    ......................................Imagen
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: De letra a sonido y de sonido a letra.

Mensaje por Dany »

Ahí te dejo el ejemplo a lo que me refiero.

Código: Seleccionar todo

 #include <Array.au3>
 #include <String.au3>
#include <WinAPI.au3>
;La cancion en array
Local $aArray[26][3]=[[1000,500,0], _
[1000,500,0], _
[1100,500,0], _
[1000,500,0], _
[1300,1000,0], _
[1200,1000,500], _
[1000,500,0], _
[1000,500,0], _
[1100,500,0], _
[1000,500,0], _
[1400,1000,0], _
[1300,1000,500], _
[1000,500,0], _
[1000,500,0], _
[1700,1000,0], _
[1500,1000,500], _
[1300,500,0], _
[1300,500,0], _
[1200,1000,0], _
[1100,1000,500], _
[1600,500,0], _
[1600,500,0], _
[1500,1000,0], _
[1300,1000,0], _
[1400,1000,0], _
[1300,1000,0]]


Local $t=DllStructCreate(_StringRepeat("int;int;int;",UBound($aArray)))

ConsoleWrite("!Freq " & @TAB & "Time" & @TAB & "Sleep" & @CRLF)
Local $n=1
;llenamos la estructura para crear el archivo
For $i=0 to UBound($aArray)-1
	DllStructSetData($t,$n,$aArray[$i][0])
	DllStructSetData($t,$n+1,$aArray[$i][1])
	DllStructSetData($t,$n+2,$aArray[$i][2])
	ConsoleWrite(DllStructGetData($t,$n)  & @TAB & DllStructGetData($t,$n+1) &  @TAB   & DllStructGetData($t,$n+2) & @CRLF)
;~ 	Beep(DllStructGetData($t,$n),DllStructGetData($t,$n+1))
;~ 	Sleep(DllStructGetData($t,$n+2))
	$n+=3
Next

;escribimos el archivo con los datos
_writeDataFile($t)
;leemos el archivo y reproducimos
_readfileandPlay()

Func _readfileandPlay()
Local $hFile, $nBytes
Local $sFile="file.txt"
Local $iSize=FileGetSize($sFile)/4
Local $Structure=DllStructCreate(_StringRepeat("int;int;int;",$iSize/3))
;llenamos la structura
$hFile = _WinAPI_CreateFile($sFile, 2, 2)
_WinAPI_ReadFile($hFile, DllStructGetPtr($Structure), $iSize*4, $nBytes)
_WinAPI_CloseHandle($hFile)

ConsoleWrite("!Freq " & @TAB & "Time" & @TAB & "Sleep" & @CRLF)

;Imprimimos/Sonamos la estructura
Local $n=1
For $i=0 to ($iSize/3)-1
	ConsoleWrite(DllStructGetData($Structure,$n)  & @TAB & DllStructGetData($Structure,$n+1) &  @TAB   & DllStructGetData($Structure,$n+2) & @CRLF)
	Beep(DllStructGetData($Structure,$n),DllStructGetData($Structure,$n+1))
	Sleep(DllStructGetData($Structure,$n+2))
	$n+=3
Next

EndFunc

Func _writeDataFile($struct)
Local $sFile, $hFile, $nBytes
$sFile = @ScriptDir & '\file.txt'
$hFile = _WinAPI_CreateFile($sFile, 1)
_WinAPI_WriteFile($hFile, DllStructGetPtr($struct), DllStructGetSize($struct), $nBytes)
_WinAPI_CloseHandle($hFile)
EndFunc
Saludos
  • ............................................Imagen
    ......................................Imagen
Responder