Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con sonidos (https://www.clubdelphi.com/foros/showthread.php?t=70156)

drakon007 03-10-2010 01:17:48

Ayuda con sonidos
 
Hola gente, tengo un problema y necesitaría la ayuda de ustedes. Resulta que estoy haciendo un Piano y pude hacerlo sonar con la función:
Código Delphi [-]
Windows.Beep(Frecuencia, Tiempo)
Pero ahí es donde surge el problema, la cuestión es que con eso solo hago sonar los parlantes internos de la PC, y lo que me gustaría hacer es un procedimiento similar a ese pero para los altavoces principales. La verdad que les agradecería mucho su respuesta, desde ya, Gracias.

drakon007 03-10-2010 01:19:45

Perdón pero ahi puse "hacer un procedimiento", y lo que en realidad me gustaría saber si puedo utilizar uno incluido en Delphi.

ecfisa 04-10-2010 01:24:28

Hola drakon007.

Podés usar la funcion sndPlaySound, sobre el uso de la misma te pongo dos links, el tercero explica como ejecutar sonidos mediante la placa de audio.

LINK1
LINK2
LINK3

Espero te ayuden.

Saludos.:)

drakon007 04-10-2010 01:38:20

Muchas gracias por tu ayuda, pero ya encontré la solución a mi problema usando este código:

Código Delphi [-]
uses
   ExtCtrls,MMSytem;

procedure MakeSound(Frequency{Hz}, Duration{mSec}, Volume: Integer);
var
  WaveFormatEx: TWaveFormatEx;
  MS: TMemoryStream; 
  i, TempInt, DataCount, RiffCount: integer;
  SoundValue: byte; 
  w: double;
const 
  Mono: Word = $0001;
  SampleRate: Integer = 44100;
  RiffId: string = 'RIFF';
  WaveId: string = 'WAVE';
  FmtId: string = 'fmt ';
  DataId: string = 'data';
begin
  if Frequency > (0.6 * SampleRate) then
  begin
    ShowMessage(Format('Sample rate of %d is too Low to play a tone of %dHz', 
      [SampleRate, Frequency]));
    Exit;
  end;
  with WaveFormatEx do 
  begin
    wFormatTag := WAVE_FORMAT_PCM; 
    nChannels := Mono;
    nSamplesPerSec := SampleRate;
    wBitsPerSample := $0008;
    nBlockAlign := (nChannels * wBitsPerSample) div 8;
    nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
    cbSize := 0;
  end;
  MS := TMemoryStream.Create;
  with MS do
  begin
     DataCount := (Duration * SampleRate) div 1000;
    RiffCount := Length(WaveId) + Length(FmtId) + SizeOf(DWORD) +
      SizeOf(TWaveFormatEx) + Length(DataId) + SizeOf(DWORD) + DataCount; 

    Write(RiffId[1], 4);
    Write(RiffCount, SizeOf(DWORD));
    Write(WaveId[1], Length(WaveId));
    Write(FmtId[1], Length(FmtId));
    TempInt := SizeOf(TWaveFormatEx);
    Write(TempInt, SizeOf(DWORD));
    Write(WaveFormatEx, SizeOf(TWaveFormatEx));
    Write(DataId[1], Length(DataId));
    Write(DataCount, SizeOf(DWORD));

    w := 2 * Pi * Frequency;
    for i := 0 to DataCount - 1 do
    begin
      SoundValue := 127 + trunc(Volume * sin(i * w / SampleRate));
      Write(SoundValue, SizeOf(Byte));
    end;

    sndPlaySound(MS.Memory, SND_MEMORY or SND_SYNC);
    MS.Free;
  end;
end;


La franja horaria es GMT +2. Ahora son las 10:00:30.

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