Página 1 de 1

De letra a sonido y de sonido a letra.

Publicado: 11 Ago 2014, 17:33
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?

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

Publicado: 11 Ago 2014, 18:26
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.

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

Publicado: 11 Ago 2014, 20:00
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

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

Publicado: 11 Ago 2014, 21:12
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