![]() |
Sound auslesen und in % umrechnen
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:
es wierd aber ja nur der Wave wert (oder wie man das auch ausdrück angezeigt)z.b. 65535
procedure TForm1.Button1Click(Sender: TObject);
var VolLi, VolRe: Word; begin GetVolume(VolLi,VolRe); Label1.Caption:=IntToStr(VolLi); Label2.Caption:=IntToStr(VolRe); end; Jetzt wollte ich einfach den wert mit zwei zusäzlichen Variablen umrechen:
Delphi-Quellcode:
Es werden keine Fehler angezeigt bis ich compiliere dan kommen die fehler:
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; [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 |
Re: Sound auslesen und in % umrechnen
du weißt schon das dir GetVolume nicht die lautstärke zurück gibt die aktuell gespielt wird sondern die eingestellte für das Gerät?!
|
Re: Sound auslesen und in % umrechnen
Und dass der Operator "/" nicht auf ganze Zahlen angewendet werden kann?
|
Re: Sound auslesen und in % umrechnen
Hallo
Das GetVolume nur die eingestellte Lautstärke des Gerät anzeigt weis ich. Das man / nich auf ganze zahlen anwenden kann wusste ich nicht. Wie mache ich das dann? Ich habe viel mit Swishmax gearbeitet und von da bin ich es so gewohnt. |
Re: Sound auslesen und in % umrechnen
Zitat:
|
Re: Sound auslesen und in % umrechnen
Hallo Khabarakh
Wenn du mit ganzzahlige ohne komma meinst dann ja . mit div kommt aber nur 100 und 0 als wert raus. Der code sieht jetzt so aus:
Delphi-Quellcode:
procedure TForm4.Button2Click(Sender: TObject);
var TonLi, TonRe, VolLi, VolRe: Word; begin GetVolume(VolLi,VolRe); TonLi:= Volli div 65535 * 100; TonRe:= VolRe div 65535 * 100; Label1.Caption:=IntToStr(TonLi); Label2.Caption:=IntToStr(TonRe); end; |
Re: Sound auslesen und in % umrechnen
Ja ;)
Und zwar ist div eine Intdivision: Also wird Int / Int genommen und dann alle Nachkommastellen abgeschnitten ;) Also musst du entweder nicht durch 65535 sondern 655 (=> Also sozusagen gekürzt) oder du berechnest eine Zahl und machst dann eine Ganzzahl draus. Dafür gibt es mehrere Methoden: Floor() Trunc() schneiden die Nachkommastellen ab Ceil() rundet auf Round() ^^ Rundet. Zu den 1.: Bevor du denkst wo ist der Unterschied bedenke folgendes:
Delphi-Quellcode:
Da du bei Floorzuerst die Prozent ausrechnset (Also von 0..100) und dann die Nachkommastellen entfernst.
Floor(X / 65535 * 100) <> X div 65535 * 100
Beim zweiteren Berechnest du zuerst eonrn "rationalen" Wert: 0..1 und schneidest dann die Nachkommastellen ab ;) Um dich vollends zu verwirren ;)
Delphi-Quellcode:
Naja ^^ siehe oben ;)
Floor(X / 65535) = X div 65535
MfG xZise |
Re: Sound auslesen und in % umrechnen
Du kannst auch einfach erst mit 100 multiplizieren:
Delphi-Quellcode:
(X*100) div 65535
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz