Mostrando entradas con la etiqueta Música. Mostrar todas las entradas
Mostrando entradas con la etiqueta Música. Mostrar todas las entradas

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








 


Escuchar la radio por streaming






Con este programa podrán escuchar emisoras de radio que difundan su programación en streaming por internet. Viene con varias emisoras pre-programadas, aunque como se tiene acceso al código fuente se puede cambiar por la que queramos.

Aquí tienen algunas: 






http://www.sky.fm/mp3/the80s.pls


http://www.sky.fm/mp3/bebop.pls


http://www.sky.fm/mp3/christmas.pls


http://www.sky.fm/mp3/christian.pls


http://www.sky.fm/mp3/jazzclassics.pls


http://www.sky.fm/mp3/lovemusic.pls


http://www.sky.fm/mp3/pianojazz.pls


http://www.sky.fm/mp3/smoothjazz.pls



Utiliza la librería bass.dll que se descarga desde aquí http://www.un4seen.com/ , de todas formas ya la incluyo en el código fuente en el link de abajo.




Codigo fuente


















Reproducir notas musicales

.

El siguiente procedimiento permite teclear una nota musical en función de su frecuencia y duración, no sobre el altavoz interno del PC, que habitalmente se haría con la función Windows.Beep() , sino sobre la tarjeta de sonido.
Para ello se configura las propiedades del archivo "wav" (en la estructura WaveFormatEx), esta estructura se escribe en un MemoryStream que se pasa como parámetro a la función sndPlaySound indicando la lectura de un flujo de memoria.

Por ejemplo un "LA" que dura 1 segundo se reproduciría así:

procedure TForm1.Button1Click(Sender: TObject);
begin
  MakeSound(440, 1000, 60);
end;

Link de descarga del programa

Una nota musical se caracteriza por 3 parámetros: altura, amplitud y timbre.
Altura: también llamada "frecuencia". Musicalmente para aumentar una octava haría falta mutiplicar su frecuencia por 2.
Amplitud: Es la potencia sonora - volumen. El fichero WAV no utiliza la noción de decibelios, sino un valor comprendido entre 0 -silencio- y 127 -el más fuerte posible-.
Timbre
: Es el parámetro que caracteriza el sonido. Es el que permite diferenciar 2 instrumentos musicales que tocan la misma nota.

Frecuencias informativas de las notas musicales: (Octava nº 3)

  • Do : 264 Hz
  • Ré : 297 Hz
  • Mi : 330 Hz
  • Fa : 352 Hz
  • Sol : 396 Hz
  • La : 440 Hz
  • Si : 495 Hz
  • Do4 : 528 Hz

Más información

Estructura del fichero WAV:Wotsit's format
Tutoriales sobre WAV : http://sub0.developpez.com
Manipulación de ficheros WAV :Concaténation de fichiers WAV


Leer cabeceras de archivos de mp3 con Delphi




Aquí os dejo un componente (TAudioInfo) que extrae información de las cabeceras de archivos mp3 (MPEG 1, 2 Layers I, II, III) y de archivos con tags ID3V1.1.




También puede leer el formato Xing VBR (bitrate variable)






Freeware con código fuente Delphi incluido








Link:







Formato de cabeceras MP3:









Autor:

Andrey V. Sorokin, Saint Petersburg, Russia anso@mail.ru







 





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 de audio Bass.

Lo que nos dice el gráfico es que si en un audio predominan los agudos entonces la parte izquierda del gráfico aumentará de valor y al contrario si predominan las frecuencias bajas entonces las barras de la derecha subirán de valor.

Para que les 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)


Codigo fuente













Vumetro






Un vúmetro es un dispositivo que muestra la intensidad de una señal en unidades de volumen, y es muy habitual encontrarlo en equipos de sonido (mezcladores, amplificadores, etc..)

Este programa visualiza la forma de onda del sonido que pasa por el micrófono del PC y añade además un vúmetro de 2 canales.

Sólo tienen que conectar el micrófono al PC y empezar a hablar para probarlo.


Descargar programa

Descargar codigo fuente



Web:

http:\\www.cppblog.com\kenlistian 






UNIT3.PAS



unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls,ShellAPI, StdCtrls,MMSystem, ComCtrls ,math;

type
  TArrayBuf = array[0..10239] of byte;    //1   KByte
  PArrayBuf = ^TArrayBuf;


  TForm3 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    ProgressBar1: TProgressBar;
    ProgressBar2: TProgressBar;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Label3Click(Sender: TObject);
  private
    hWaveIn: HWaveIn;
    WaveFormat: TWaveFormatEx;           //Wave_audioÊý¾Ý¸ñʽ
  public
    procedure Meter_vu();
    procedure WNDPROC(var msg: TMessage); override;
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
  Meter_vu();
  Button1.Enabled := False;
end;

procedure TForm3.Meter_vu;
var
  i: integer;
  WaveHdr: PWaveHdr;
  DaBuffer: PArrayBuf;
  iError : integer;
begin
  WaveFormat.wFormatTag      := WAVE_FORMAT_PCM;
  WaveFormat.nChannels       := 1;    //MONO
  WaveFormat.nSamplesPerSec  := 8000; //²ÉÑùΪ8k,44100
  WaveFormat.nAvgBytesPerSec := 8000;
  WaveFormat.nBlockAlign     := 1;
  WaveFormat.wBitsPerSample  := 8;

  iError := WaveInOpen(@hWaveIn, 0, @WaveFormat, handle, 0, CALLBACK_WINDOW);
  if iError <> 0 then
  begin
    ShowMessage('err WaveInOpen');
    Exit;
  end;

  //´´½¨8¸öbuffer
  for i := 1 to 8 do
  begin
    DaBuffer := new(PArrayBuf);
    WaveHdr := new(PWaveHdr);
    with WaveHdr^ do
    begin
      lpData := pointer(DaBuffer);
      dwBufferLength := sizeof(DaBuffer); //1024 = 1 KByte
      dwBytesRecorded := 0;
      dwUser := 0;
      dwFlags := 0;
      dwLoops := 0;
    end;

    iError := WaveInPrepareHeader(hWaveIn, WaveHdr, sizeOf(TWaveHdr));
    if iError <> 0 then
    begin
      ShowMessage('Error WaveInPrepareHeader! ');
      Exit;
    end;
    iError := WaveInAddBuffer(hWaveIn, WaveHdr, Sizeof(TWaveHdr));
    if iError <> 0 then
    begin
      ShowMessage('Error WaveInAddBuffer! ');
      Exit;
    end;
  end;

  iError := WaveInStart(hWaveIn);
  if (iError <> 0) then
  begin
    ShowMessage('Error , WaveInStart');
  end;
end;


procedure TForm3.FormDestroy(Sender: TObject);
begin
  if not Button1.Enabled then
  begin
    WaveInStop(hWaveIn); //Stop
    WaveInReset(hWaveIn);
    WaveInClose(hWaveIn);
  end;
end;



procedure TForm3.WNDPROC(var msg: TMessage);
var
  Hdr: PWaveHdr;
  i: integer;
  r: real;
  tt: Integer;
  vVal , vVal_temp: Integer;
begin
  inherited;
    case msg.Msg of
    MM_WIM_DATA:
      begin
        vVal := 0;
        Hdr := PWaveHdr(msg.LParam);
        if hdr^.dwBytesRecorded > 0 then
        begin
          r := Image1.ClientWidth / hdr^.dwBytesRecorded;
        end
        else
          r := 0;

        PatBlt(Image1.Canvas.Handle, 0, 0, Image1.ClientWidth, Image1.ClientHeight, BLACKNESS);
        with Image1 do
        begin
          Canvas.Pen.Color := clRed;
          Canvas.MoveTo(0, 127);
          Canvas.LineTo(ClientWidth, 127);
          Canvas.Pen.Color := clMaroon;
          Canvas.MoveTo(round(r * 100), 0);
          Canvas.LineTo(round(r * 100), 255);
          Canvas.MoveTo(round(r * 200), 0);
          Canvas.LineTo(round(r * 200), 255);
          Canvas.MoveTo(round(r * 300), 0);
          Canvas.LineTo(round(r * 300), 255);
          Canvas.MoveTo(round(r * 400), 0);
          Canvas.LineTo(round(r * 400), 255);
          Canvas.MoveTo(round(r * 500), 0);
          Canvas.LineTo(round(r * 500), 255);
          Canvas.MoveTo(round(r * 600), 0);
          Canvas.LineTo(round(r * 600), 255);
          Canvas.MoveTo(round(r * 700), 0);
          Canvas.LineTo(round(r * 700), 255);
          Canvas.MoveTo(round(r * 800), 0);
          Canvas.LineTo(round(r * 800), 255);
          Canvas.MoveTo(round(r * 900), 0);
          Canvas.LineTo(round(r * 900), 255);
          Canvas.MoveTo(round(r * 1000), 0);
          Canvas.LineTo(round(r * 1000), 255);
          Canvas.MoveTo(round(r * 1100), 0);
          Canvas.LineTo(round(r * 1100), 255);
          Canvas.MoveTo(round(r * 1200), 0);
          Canvas.LineTo(round(r * 1200), 255);

          Canvas.Pen.Color := clLime;
          Canvas.MoveTo(0, PArrayBuf(hdr.lpData)^[0]);

          for i := 0 to hdr^.dwBytesRecorded - 1 do
          begin
            Canvas.lineTo(round(r * i), PArrayBuf(hdr.lpData)^[i]);

            //È¡Ñù±¾ÖеķåÖµ·åÖµ,ʵ¼ÊÉÏÈ¡Ñù±¾Ò»¸öµãÒ²¿É
            vVal_temp :=  PArrayBuf(hdr.lpData)^[i];
            if vVal_temp > vVal then
              vVal := vVal_temp;
          end;
        end;

        //²ÉÓðËλ²É¼¯Ñù±¾×î´ó·Ö±´ÊÇ48dB
        try

           //È¡Ñù±¾Êý¾ÝÒ»¸öµãÒ²¿É,ÔÚ8λÉùµÀ[0]Öбíʾ×óÉùµÀ          
           vVal := PArrayBuf(hdr.lpData)^[0];
           vVal := vVal - 127;           //È¡Õñ·ùÕýÖµ
           if vVal < 0 then
             vVal := abs(vVal);
           if vVal = 0 then
             vVal := 1;

            //ÕâÊǰ´dbÀ´´¦ÀíµÄ
            tt := round(100/48 *  (20 * log10(vVal / 256) + 48 ));
            ProgressBar1.Position := tt;

            //ÓÒÉùµÀ
            vVal := PArrayBuf(hdr.lpData)^[1];
            Dec(vVal, 127);
            vVal := abs(vVal);
            if vVal = 0 then vVal := 1;
            tt := round(100 /48 *  (20 * log10(vVal / 256) + 48 ));
            ProgressBar2.Position := tt;
          except
          end;

        WaveInUnprepareHeader(hWaveIn, hdr, Sizeof(TWaveHdr));

        Dispose(Hdr.lpData);
        DisPose(Hdr);

        Hdr := new(PWaveHdr);
        Hdr^.lpData := pointer(new(PArrayBuf));
        Hdr^.dwBufferLength := 1024;
        Hdr^.dwBytesRecorded := 0;
        Hdr^.dwUser := 0;
        Hdr^.dwFlags := 0;
        Hdr^.dwLoops := 0;

        WaveInPrepareHeader(hWaveIn, Hdr, Sizeof(TWaveHdr));
        WaveInAddBuffer(hWaveIn, Hdr, Sizeof(TWaveHdr));
      end;
  end;


end;


procedure TForm3.Label3Click(Sender: TObject);
begin
  ShellExecute(Handle, 'Open', 'IEXPLORE.EXE',PChar(label3.Caption), '', SW_SHOWNORMAL);
end;

end.

 













Simular teclado de un piano con Delphi




Este soft simula el teclado de un piano, generando con el altavoz las diferentes frecuencias de la escala musical, además puede producir señales sinusoidales, triangulares, cuadradas o en diente de sierra.



Autor: jcniloc

Descargar código






Reproducir archivos midi

Programa muy interesante que utiliza el componente tmidigen(no es necesario instalarlo previamente) para reproducir dinámicamente archivos midi.



Código fuente









Leer las pistas de un CD de audio

.





Los ficheros ".cda" describen las pistas contenidas en un CD audio. Estos ficheros están visibles en el explorador de Windows cuando abres una ventana correspondiente a un CD.

No existe una función del API que permita consultar el contenido de estos ficheros pero podéis utilizar las procedimientos contenidos en el siguiente fichero:



Autor: Pierre Castelain

Link de descarga








Espectacular actuación de Mariachis

No todo va a ser informática, programación, etc... voy a hacer un alto en el camino con un poco de música, y es que hace unos meses asistí a un Concierto en el Auditorio Nacional de Música de Madrid en el que actuaban varios grupos de Mariachis con un éxito arrollador todos ellos (Era la primera vez que los pude ver en directo y quedé sumamente impresionado por la fuerza de sus voces, la habilidad con el violín y la calidad artística del grupo) y para muestra aquí tienen la actuación del MARIACHI VARGAS DE TECALITLAN ...simplemente ESPECTACULAR...
...Dedicado a mis amigos mexicanos...

Link en youtube: http://www.youtube.com/watch?v=dZPYKcIZqH8



Conversor MPEG4 a AVI con Delphi

MP4Cam2AVI es un conversor de archivos con formato MPEG4 a AVI, muy útil para los que tengan cámaras mpeg4.También soporta los formatos MJPEG y H263.



Viene con código fuente y licencia GNU.



Se puede descargar desde aquí:



http://sourceforge.net/projects/mp4cam2avi/



Cosas que se pueden hacer:



- Convertir y unir videos MPEG-4 ASP desde tu cámara a un único video DivX-compatible MPEG-4 para ser visto en un PC o DVD-MPEG4 player, preservando la calidad original;

- Modo Batch para convertir varios ficheros secuencialmente;

- Convierte películas*.MP4 (MPEG4 ASP) desde Nero Recode a un formato AVI compatible para un reproductor DVD-MPEG4;

- Convierte películas MJPEG desde cámaras de fotos a un DivX-AVI compatible MPEG-4 con un clic;

- Convierte videos H.264 (MPEG-4 AVC) *.MP4 al formato H.264 AVI, que podrán ser editables con VirtualDub y reproducibles con Windows Media Player (H.264 VfW se necesitará el codec(p.ej. el último FFDShow);

- Comprueba los clips MPEG-4 ASP/MJPEG antes de la conversión usando vista previa;

- Edita clips antes de la conversión usando timeline;

- Corrige el audio/video lag de algunas cámaras como el modelo Minolta A200

- Incorpora un filtro pasa-bajo (viene perfecto para la Sanyo Xacti C1)









Formatos de cámaras soportados:

MPEG4-AVC camcorders:
Sanyo: CG65
Casio: EX-V7, EX-S880, Z1200
Others: Aiptek GO-HD
MPEG4-ASP camcorders:
Sanyo: VPC-Ñ1, C4, C40, C5, C6, HD-1, HD-2
Olympus: C770 Movie
Sony: Sony DSC-M1, M2
Pentax: OptioMX, MX4, S5n, S5z, S6, A10
Samsung: Digimax V40, V50, V70, V700, V800, U-CA5, L85, VP-MX10A
Casio: EX-P505, EX-Z750, EX-Z850, EX-S500, EX-S600
Kodak V603, Z612, Z760, Z1275
Photo cameras with H.263 video:
Kodak DX4530
Photo cameras with MOV MJPEG video
Canon Tx1, Kodak LS753, Minolta A2, Minolta Dimage Z3, Nikon Coolpix 5200, Nikon 8400, Nikon E8800, Panasonic FX7, Panasonic FZ-1, Panasonic TZ5, Pentax 750Z, Olympus C-5000/C-5050/C-8080, Olympus mini digital, Pentax Optio X, Sanyo Xacti J1, Fuji S7000.


Formatos de entrada:
File type: *.MP4, *.MOV, *.AVI, *.3GP
(3gp support is experimental, no AMR audio)
Video: MPEG4 ASP, MPEG-4 AVC, MJPEG, H.263, Sorenson Video 3
Audio: AAC, PCM, u-Law, ADPCM, MP3

Formatos de salida:

File types: *.AVI
Video: Source video or XviD MPEG-4 ASP
Audio: Source audio, PCM or MP3






Simulación del movimiento de los electrones en un campo electrico

Espectacular simulación realizada con OpenGL del movimiento de los electrones cuando atraviesan un campo eléctrico. Como muestra la image...