Reproducir archivo MIDI en piano virtual


Con esta aplicación puedes abrir un archivo MIDI y reproducirlo en un piano virtual. Para que funcione hay que instalar previamente el package zzPianoEx.dpk con lo que tendremos los componentes: TPianoKeyBoard, TMidiOutput, TMidiFile, TMidiInput, TMidiPlayer, TPianoChannels, TPianoTracks.


XI'AN Science and Technology University, Shanghai, China
http://www.PianoEx.com
Author: ZHONG WAN
Email: webmaster@PianoEx.com
MSN: ziziiwan@hotmail.com

Descargar programa

Codigo fuente

Ejemplos archivos MIDI

Archivo1.mid
Archivo2.mid
Archivo3.mid



Relacionados
Escuchar la radio por streaming
Tutorial - utilizar el componente Media Player
Simular teclado de un piano
 

Visualizar el espectro de frecuencias del sonido



Visualiza el espectro de frecuencias de audio en diferentes formatos al reproducir archivos del tipo mp3 o wav utilizando la biblioteca de funciones Bass.
 
Lo que nos dice el gráfico es que si en un sonido predominan los agudos entonces la parte izquerda del gráfico aumentará de valor.

Para que sirva de referencia:
El registro grave de una voz masculina – 200Hz
El registro grave de una voz femenina – 350Hz
Rango medio–grave – 400Hz - 1 kHz (frecuencias cálidas)
Rango medio-agudo (“aspereza”, sonido “caliente”) – 2.5 kHz – 4 kHz.
Sibilancia (sonido “sss”, “siseo” de los platillos) – 8kHz – 15kHz. 

Autor: Ian Luck.
adaptado a Delphi por Evgeny Melnikov 

Descargar el programa  (el archivo bass.dll está en el Codigo fuente)
Al ejecutar el archivo solicitará que indiques que archivo wav quieres abrir


Codigo fuente


Relacionados:
Osciloscopio con la tarjeta de sonido
Vumetro con Delphi  
Leer las cabeceras de un archivo mp3 
Conversor MPEG4 a AVI 
Reproducir notas musicales 



Reproductor de estructuras moviles


Permite simular, dibujar y animar estructuras móviles y además puede servir de base para la construcción de vuestro propio motor de interacciones físicas.
Para empezar tenéis que ir al primer desplegable y seleccionar "construct", se limpiará la pantalla y haciendo clic sucesivamente iremos dibujando las partículas y sus uniones entre ellas.
Cuando terminemos de dibujar la figura en el primer desplegable hacemos clic sobre "simulate" para iniciar la animación y ver la interacción entre todos los elementos del gráfico.
Posteriormente se puede hacer clic mantenido sobre una partícula cualquiera para moverla.

Autor:
Paul TOTH
http://tothpaul.free.fr

Codigo fuente

Redondear numeros reales

Aquí tienen varias formas de redondear correctamente números reales:


Opcion1:
======

function RoundStr(Zn: Real; kol_zn: Integer): Real;
var
snl, s, s0, s1, s2: string;
n, n1: Real;
nn, i: Integer;
begin
s := FloatToStr(Zn);
if (Pos(',', s) > 0) and (Zn > 0) and
(Length(Copy(s, Pos(',', s) + 1, length(s))) > kol_zn) then
begin
s0 := Copy(s, 1, Pos(',', s) + kol_zn - 1);
s1 := Copy(s, 1, Pos(',', s) + kol_zn + 2);
s2 := Copy(s1, Pos(',', s1) + kol_zn, Length(s1));
n := StrToInt(s2) / 100;
nn := Round(n);
if nn >= 10 then
begin
snl := '0,';
for i := 1 to kol_zn - 1 do
snl := snl + '0';
snl := snl + '1';
n1 := StrToFloat(Copy(s, 1, Pos(',', s) + kol_zn)) + StrToFloat(snl);
s := FloatToStr(n1);
if Pos(',', s) > 0 then
s1 := Copy(s, 1, Pos(',', s) + kol_zn);
end
else
s1 := s0 + IntToStr(nn);
if s1[Length(s1)] = ',' then
s1 := s1 + '0';
Result := StrToFloat(s1);
end
else
Result := Zn;
end;

Opcion 2:

function RoundEx(X: Double; Precision: Integer ): Double;

// Precision : 1, 10,100 ...

var
ScaledFractPart, Temp: Double;
begin
ScaledFractPart := Frac(X) * Precision;
Temp := Frac(ScaledFractPart);
ScaledFractPart := Int(ScaledFractPart);
if Temp >= 0.5 then
ScaledFractPart := ScaledFractPart + 1;
if Temp <= -0.5 then
ScaledFractPart := ScaledFractPart - 1;
Result := Int(X) + ScaledFractPart / Precision;
end;

Opcion 3:

function FormatData(s: String; i: Integer): String;
begin
Result:=FloatToStr(Round(StrToFloat(s)*exp(i*ln(10)))/(exp(i*ln(10))));
end;

Opcion 4:

function RoundFloat(R: Extended; Decimals: Integer): Extended;
var
Factor: Extended;
begin
Factor := Int(Exp(Decimals * Ln(10)));
Result := Round(Factor * R) / Factor;
end;


La llamada sería de la siguiente forma:

showmessage(FloatToStr(RoundStr(2.3456789,3)));
showmessage(FloatToStr(RoundEx(2.3456789,1000)));
showmessage(formatdata('2,3456789',3));
showmessage(FloatToStr(RoundFloat(2.3456789,3)));


Al trabajar con imágenes en 3D he tenido que utilizar alguna de estas funciones y lo que he hecho para acelerar su cálculo es aumentar la prioridad de mi aplicación con la siguiente función:

procedure TForm1.AumentaPrioridad;
var
ProcessID : DWORD;
ProcessHandle : THandle;
ThreadHandle : THandle;
begin
ProcessID := GetCurrentProcessID;
ProcessHandle := OpenProcess(PROCESS_SET_INFORMATION,
false, ProcessID);
SetPriorityClass(ProcessHandle, REALTIME_PRIORITY_CLASS);
ThreadHandle := GetCurrentThread;
SetThreadPriority(ThreadHandle, THREAD_PRIORITY_TIME_CRITICAL);
end;



OCR simplificado

Realiza una limpieza del fondo de una imagen y a continuación pasa a texto su contenido haciendo la función de un OCR.

Author: Dennis Malkoff
E-mail: info@sminstall.com

Codigo fuente


Relacionados:








Reconocimiento de caras con Delphi


Software de reconocimiento de caras ( face recognition ) en imágenes con formato bmp.
Lo que hace es enmarcar cada rostro detectado dentro de un rectángulo utilizando funciones de una dll llamada VCOpenCV.
VCOpenCV se basa en OpenCV (Open Computer Vision) que es una biblioteca de funciones relacionadas con visión artificial  y que como curiosidad se ha utilizado en el sistema de visión del vehículo no tripulado del "Gran desafío DARPA"

Actualmente es un área de investigación muy compleja que necesita la participación de investigadores de diferentes ámbitos, ya que involucra no sólo o programadores e ingenieros de software, sino que también necesita la colaboración de neurocientíficos y psicólogos.


Debido a que estos sistemas son poco intrusivos, aún permanecen en primera línea de investigación por encima de otros como pueden ser los sistemas biométricos, de detección de huellas o reconocimiento del iris.


Descargar codigo fuente

En caso de que nos interese detectar zonas más específicas como ojos y boca, 
tendremos que hacerlo como indica el programa del que abajo os adjunto el link

Descargar codigo fuente

Descargar VCOpenCV.dll

Descargar OpenCV.pas (Es la traducción de las cabeceras de Opencv en Delphi realizada por Vladimir Vasilyev)

Relacionados:

Seguimiento de personas, animales y objetos con OpenCV

(Tesis doctoral) técnicas de reconocimiento facial mediante redes neuronales

OCR con Tesseract

OCR simplificado

OCR con Delphi

Chipmunk 2D Physics engine


Relacionados sobre imágenes:


Componente para generar efectos graficos

Librería Exif

Componente para manipulacion de imagenes

Morphing con delphi


Libros

Face-Detection and Gesture Recognition for Human-computer interaction

Intelligent Biometric Techniques in Fingerprint and Face Recognition (International Series on Computational Intelligence)

Handbook of Face Recognition










Programas Delphi que utilizan OPENGL



1) Generador de curvas de Bezier
Esta aplicación genera un array de vértices utilizados para construir curvas de Bezier. Requiere que la tarjeta gráfica sea compatible con OpenGL.

Codigo fuente y programa


2) Utilización de una Webcam

Utilizando las primitivas OpenGL, permite ver la imagen de una webcam en una rejilla tridimensional, con la posibilidad de cambiar el ángulo de la cámara, la distancia del observador y la rotación de la imagen.