- Delphiartiklar, tips, forum, länksamling - 

      

START | DELPHI | LÄNKARGÄSTBOK 




 Forum

Grundkurs
  »Introduktion
  »Snabbguide
  »Komponenter
  »Händelser
  »Strängar
  »Räkna med Delphi   »Egna typer
  »Selektion
  »Iteration
  »Menyer
  »Funktioner
  »Arraystrukturer

Tips & Tricks
  »Nya tips
  »Blandat
  »Databaser
  »Filer
  »Forms
  »Grafik
  »Internet
  »Komponenter
  »Matematik
  »Multimedia
  »Objekt/ActiveX
  »Skrivare
  »Strängar
  »System
  »Mest lästa tips

Artiklar
  »Delphi och ADO
  »Bygga en DLL
  »Skapa en enkel rapport
  »Hantera registret
  »Enheter, units
  »Klassen TCanvas
  »Använd LookUp Controls

 Nya tips
 Lägg till tips
 Delphilänkar
 Gästbok

 

Spela upp ett ljud Kategori: Multimedia
Inlagt: 2002-08-12
Läst: 1929
Inlagt av: Staffan Berg
Beskrivning
Exemplet spelar upp ett ljud genom ljudkortet. 
Kod
uses
 MMSystem;

type
 TVolumeLevel = 0..127;

procedure MakeSound(Frequency{Hz}, Duration{mSec}: Integer; Volume: TVolumeLevel);
 
var
 WaveFormatEx: TWaveFormatEx;
 MS: TMemoryStream;
 i, TempInt, DataCount, RiffCount: integer;
 SoundValue: byte;
 w: double; // omega ( 2 * pi * frequency)
const
 Mono: Word = $0001;
 SampleRate: Integer = 11025; // 8000, 11025, 22050, or 44100
 RiffId:string = 'RIFF';
 WaveId:string = 'WAVE';
 FmtId:string = 'fmt ';
 DataId:string = 'data';
begin
ifFrequency > (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
  //Beräkna längden på ljuddata och fildata.
  DataCount := (Duration * SampleRate) div 1000; // ljuddata
  RiffCount := Length(WaveId) + Length(FmtId) + SizeOf(DWORD) +
   SizeOf(TWaveFormatEx) + Length(DataId) + SizeOf(DWORD) + DataCount; // fildata
  {write out the wave header}
  Write(RiffId[1], 4); // 'RIFF'
  Write(RiffCount, SizeOf(DWORD)); // storlek på filen
  Write(WaveId[1], Length(WaveId)); // 'WAVE'
  Write(FmtId[1], Length(FmtId)); // 'fmt '
  TempInt := SizeOf(TWaveFormatEx);
  Write(TempInt, SizeOf(DWORD));
  Write(WaveFormatEx, SizeOf(TWaveFormatEx));
  Write(DataId[1], Length(DataId));
  Write(DataCount, SizeOf(DWORD));
    w := 2 * Pi * Frequency; // omega
  fori := 0 to DataCount - 1 do
  begin
   SoundValue := 127 + trunc(Volume * sin(i * w / SampleRate)); // wt = w * i / SampleRate
   Write(SoundValue, SizeOf(Byte));
  end;
  //Spela upp ljudet...
  sndPlaySound(MS.Memory, SND_MEMORY or SND_SYNC);
  MS.Free;
 end;
end;

// Här anropas funktionen

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

 
 
© Copyright 2005 - Staffan Berg
- Alla rättigheter förbehålles -