Entwickler-Ecke
Multimedia / Grafik - Bass.dll - Lautstärke ermitteln
beastofchaos - Sa 21.05.11 22:45
Titel: Bass.dll - Lautstärke ermitteln
Hallo Leute,
seit Lägerem befasse ich mich nun mit der Bass.dll. Nun will ich bei meinem Progamm auch die Lautstärke regulieren. 2 Probleme:
Wie
ermittel ich die Lautsträke - habe die bass-unit durchgeschaut und die Funktion BASS_GetVolume gefunden. Die gibt aber iwie nur "-1" aus... Wisst ihr da was?
2.Problem: Ich habe im Hintergrund per Media player ein Lied laufen, will aber die Lautstärke des Programms verringern - nicht "global" auf dem ganzen Computer und damit auch meine Musik im Hintergrund. Wenn ich aber BASS_SetVolume() benutze, passiert genau das... Nämlich alles wird leiser :/
Hoffe auf Hilfe, Gruß Thomas ;)
Moderiert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Sa 21.05.2011 um 23:31
glotzer - Sa 21.05.11 22:57
naja, wenn dann musst du ALLES mit der bass.dll machen, oder eben garnix
beastofchaos - Sa 21.05.11 23:20
Na klar mach ich alles mit der Bass.dll, aber was ich doof finde, dass sich das auch auf andere Programm (wie den Windows Meda Player) auswirkt...
Außerdem geht das mit GetVolume inzwischen - war, glaub ich, vor dem LoadBass ^^
glotzer - Sa 21.05.11 23:47
oh, sorry hat sich so angehört als würdest du mit dem mediaplayer im programm was abspielen
beastofchaos - Sa 21.05.11 23:57
:))
So, ich hab noch ein Problem - die Bass.dll mag mich nicht^^
Ich hab einen Button zum Musik pausieren eingebaut. Quelltext sieht so aus:
Delphi-Quelltext
1: 2:
| if (Bass_ChannelIsActive(FBackgroundStream) = BASS_ACTIVE_PLAYING) then BASS_Pause; |
Das ist alles - Musik stoppt sogar, aber das Programm hängt sich automatisch auf - auch ohne die Abfrage... :/
ALF - Sa 21.05.11 23:58
Hast Du ja schon gefunden getvolume und das andere ist setvolume
die werte sind 0 bis 1. also 0,001 ist leise 0,5 ist die halbe lautstärke
Genauer gesagt:
Delphi-Quelltext
1: 2: 3: 4: 5:
| var volume: real; BASS_ChannelGetAttribute(FBackgroundStream, BASS_ATTRIB_VOL, Volume) BASS_ChannelSetAttribute(FBackgroundStream, BASS_ATTRIB_VOL, volume) |
Pause ist
Delphi-Quelltext
1:
| Bass_ChannelPause(FBackgroundStream), wenn ich mich recht erinnere. |
Gruss ALf
beastofchaos - So 22.05.11 00:43
Werde ich mir morgen auf jeden Fall mal durchlesen ( das Tut zu bass.dll ).
@Glotzer: Hab grad deinen Thread zur eigenen Bass-Klasse angeschaut - in deiner procedure Pause - siehts auch so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TBassSound.Pause; begin if Handle = 0 then NotLoadedError; BASS_ChannelPause(Handle); BassError(BASS_ErrorGetCode); end; |
Bloß funktioniert bei mir Pause und auch ChannelPause nicht - also würd mir deine Prozedur auch iwie nichts bringen - vermut ich... :/ was mach ich falsch...-_-
Gruß
ALF - So 22.05.11 00:47
Delphi-Quelltext
1:
| Bass_ChannelPause(FBackgroundStream); |
damit geht dein aktueller Straem/handel, Sound in die Pause!
Delphi-Quelltext
1:
| Bass_ChannelPlay(FBackgroundStream); |
spielst Du ihn wieder ab!
Gruss alf
beastofchaos - So 22.05.11 01:03
ALF hat folgendes geschrieben : |
Delphi-Quelltext 1:
| Bass_ChannelPause(FBackgroundStream); |
damit geht dein aktueller Straem/handel, Sound in die Pause!
Delphi-Quelltext 1:
| Bass_ChannelPlay(FBackgroundStream); |
spielst Du ihn wieder ab!
Gruss alf |
Das ist mir doch klar - Mir gehts doch darum, dass mein Programm sich aufhängt, wenn ich diese Prozedur aufrufe... :/
glotzer - So 22.05.11 01:09
spielst du einen stream aus dem Netz ab? falls ja musst du Bass_ChannelStop nehmen.
ALF - So 22.05.11 01:11
BASS_Pause();
Stops the output, pausing all musics/samples/streams
Return value
If successful, then TRUE is returned, else FALSE is returned. Use BASS_ErrorGetCode to get the error code.
Hst Du auch die Errrorbehandlung mit eingebaut?
Sieht ja so aus das bei der inizialisierung was nicht stimmt!
Währe also mehr infos wichtig!
Alles andere ist Raten.
Gruss ALf
beastofchaos - So 22.05.11 01:20
ALF hat folgendes geschrieben : |
BASS_Pause();
Stops the output, pausing all musics/samples/streams
Return value
If successful, then TRUE is returned, else FALSE is returned. Use BASS_ErrorGetCode to get the error code.
Hst Du auch die Errrorbehandlung mit eingebaut?
Sieht ja so aus das bei der inizialisierung was nicht stimmt!
Währe also mehr infos wichtig!
Alles andere ist Raten.
Gruss ALf |
@glotzer: Also, ich spiel ganz normal aus einem Unterordner ein Lied ab - kA, was du sonst mit Netz meisnt :P
@ALF: Plötzlich geht bei mir ChannelPlay - das ich bei PLAY eine Errorbehandlung brauche - ist ja ätzend xD
Da werd ich wohl lieber jeden einzelnen Stream pausieren, da es jetzt geht ;) Morgen werdet ihr wieder von mir höen, weil ich dann das nächste Problem mit Dateien kopieren habe xD
(CopyFile funktioniert nicht trotz richtiger Pfade)
Gute Nacht ;)
ALF - So 22.05.11 01:31
beastofchaos hat folgendes geschrieben : |
@ALF: Plötzlich geht bei mir ChannelPlay - das ich bei PLAY eine Errorbehandlung brauche - ist ja ätzend xD
|
Darum auch die Bass-Hilfe nehmen. hat schon seinen Grund!
Bool BASS_ChannelPlay(DWORD handle, BOOL restart);
Zitat: |
Return value
If successful, TRUE is returned, else FALSE is returned. Use BASS_ErrorGetCode to get the error code.
Error codes
BASS_ERROR_HANDLE handle is not a valid channel.
BASS_ERROR_START The output is paused/stopped, use BASS_Start to start it.
BASS_ERROR_DECODE The channel is not playable, it's a "decoding channel".
BASS_ERROR_BUFLOST Should not happen... check that a valid window handle was used with BASS_Init.
BASS_ERROR_NOHW No hardware voices are available (HCHANNEL only). This only occurs if the sample was loaded/created with the BASS_SAMPLE_VAM flag and BASS_VAM_HARDWARE is set in the sample's VAM mode, and there are no hardware voices available to play it.
|
Ich glaube das sagt alles Warum man es machen soll!
Gruss ALf
beastofchaos - Mo 23.05.11 20:24
Ihr wisst ja, dass ich das Problem auch mit Bass_Stop habe. Ich dachte, ich könnte das Problem auch mit Bass_ChannelStop lösen - leider hängt sich das Programm wieder auf.
Muss ich bei ChannelStop vll. auch eine Fehlerbehandlung mitführen? Und wie würde das dann z.B. aussehen?
edit:
Ok, Problem geklärt - ein Timer versucht dann nämlich das Lied abzuspielen und wenn die gegen arbeiten, kann das nur hängen xD Dazu fällt mir aber auf, dass kein Utnerschied ziwschen ChannelStop und ChannelPlay liegt. Wie kann ich denn das Lied auf Sekudne 0 setzen?
ALF - Mo 23.05.11 21:38
Ich will ja nicht unhöfflich sein, aber hast Du nun die BASS-Hilfe oder nicht!?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var position: QWORD;
position:= BASS_ChannelGetPosition(FBackgroundStream, BASS_POS_BYTE);
BASS_ChannelSetPosition(FBackgroundStream, position, BASS_POS_BYTE); |
beastofchaos hat folgendes geschrieben : |
...ein Timer versucht dann nämlich das Lied abzuspielen und wenn die gegen arbeiten, kann das nur hängen xD Dazu fällt mir aber auf, dass kein Utnerschied ziwschen ChannelStop und ChannelPlay liegt. |
Wieso spielt ein Timer deine Sounds ab????
Was für ein unterschied??
ChannelStop, stoppt die Musik
ChannelPlay startet die Musik
Warum soll das kein unterschied sein????
Gruss ALf
beastofchaos - Mo 23.05.11 21:50
ALF hat folgendes geschrieben : |
Ich will ja nicht unhöfflich sein, aber hast Du nun die BASS-Hilfe oder nicht!?
Wieso spielt ein Timer deine Sounds ab????
Was für ein unterschied??
ChannelStop, stoppt die Musik
ChannelPlay startet die Musik
Warum soll das kein unterschied sein????
Gruss ALf |
Mit einem Timer prüfe ich, ob das Lied zu Ende ist und für den Fall wird per Random ein neues Lied gestartet.
Naja, mit ChannelPause kann ich auch pausieren xD meinte natürlic hden Utnerschied zwischen Stop und Pause. Und danke für die Prozedur und nein, ich habs heute ncoht nciht geschafft. Ich werd jetzt zu dem Thema nur etwas fragen, wenn ich die schon durchgelesen habe, ok? :)
ALF - Mo 23.05.11 22:09
beastofchaos hat folgendes geschrieben : |
Naja, mit ChannelPause kann ich auch pausieren xD meinte natürlic hden Utnerschied zwischen Stop und Pause. |
Basshilfe
Zitat: |
Stopping a user stream (created with BASS_StreamCreate) will clear its buffer contents. Use BASS_ChannelPause instead if you wish to stop a user stream and then resume it from the same point.
|
Ich kann so gut wie kein engl und habs verstanden das es da ein Unterschied gibt :wink:
Warum sollte es da also keinen Unterschied geben?
Gruss ALf
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!