Einzelnen Beitrag anzeigen

Andy-h

Registriert seit: 3. Okt 2007
23 Beiträge
 
#1

Sound auslesen und in % umrechnen

  Alt 5. Okt 2007, 19:57
Hallo

Ich habe mich an einem Mediaplayer versucht.
Musikabspielen geht auch. Jetzt möchte ich zwei label in denen man die Lautstärke in % ablesen kann.
ich habe diesen Code gefunden:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  VolLi, VolRe: Word;
begin
  GetVolume(VolLi,VolRe);

  Label1.Caption:=IntToStr(VolLi);
  Label2.Caption:=IntToStr(VolRe);
end;
es wierd aber ja nur der Wave wert (oder wie man das auch ausdrück angezeigt)z.b. 65535

Jetzt wollte ich einfach den wert mit zwei zusäzlichen Variablen umrechen:

Delphi-Quellcode:
procedure TForm4.Button2Click(Sender: TObject);
var
 TonLi, TonRe, VolLi, VolRe: Word;
begin
  GetVolume(VolLi,VolRe);
  TonLi:= Volli / 65535 * 100;
  TonRe:= VolRe /65535 * 100;
  Label1.Caption:=IntToStr(TonLi);
  Label2.Caption:=IntToStr(TonRe);
end;
Es werden keine Fehler angezeigt bis ich compiliere dan kommen die fehler:

[Pascal Fehler] Unit4.pas(117): E2010 Inkompatible Typen: 'Word' und 'Extended'
[Pascal Fehler] Unit4.pas(118): E2010 Inkompatible Typen: 'Word' und 'Extended'
[Pascal Fataler Fehler] MP.dpr(5): F2063 Verwendete Unit 'Unit4.pas' kann nicht compiliert werden

Wie Programmiere ich so eine Rechnung?

Davor habe ich noch das stehen:

Delphi-Quellcode:
procedure GetVolume(var volL, volR: Word);
var
  hWO: HWAVEOUT;
  waveF: TWAVEFORMATEX;
  vol: DWORD;
begin
  volL:= 0;
  volR:= 0;
  // init TWAVEFORMATEX
  FillChar(waveF, SizeOf(waveF), 0);
  // open WaveMapper = std output of playsound
  waveOutOpen(@hWO, WAVE_MAPPER, @waveF, 0, 0, 0);
  // get volume
  waveOutGetVolume(hWO, @vol);
  volL:= vol and $FFFF;
  volR:= vol shr 16;
  waveOutClose(hWO);
end;


procedure SetVolume(const volL, volR: Word);
var
  hWO: HWAVEOUT;
  waveF: TWAVEFORMATEX;
  vol: DWORD;
begin
  // init TWAVEFORMATEX
  FillChar(waveF, SizeOf(waveF), 0);
  // open WaveMapper = std output of playsound
  waveOutOpen(@hWO, WAVE_MAPPER, @waveF, 0, 0, 0);
  vol:= volL + volR shl 16;
  // set volume
  waveOutSetVolume(hWO, vol);
  waveOutClose(hWO);
end;

Gruß
Andy
  Mit Zitat antworten Zitat