BASS.DLL Windows 7 64-Bit aktueller Audio Pegel

  • Hallo Leute,

    ich würde gerne das folgende machen ich hab mir die BASS.DLL nebst UDFs von hier geholt:

    http://www.autoit.de/index.php?page=Thread&threadID=26550

    Sehr gut absolut super, vorallem sehr einfach. Aber: Wie kann ich den aktuellen Audioüpegel der grad anliegt auislesen? Mir geht es ned um die Volumeeinstellung die hab ich mit C++ mal Testweise ausgelesen das ging alles nur ich hab da nur die Express 2010 Version also alles zu Fuß quais.

    Mit Autoit ist das ganze sehr viel schneller zu bewerkstelligen. CIh würde also, wenn ich ein Video abspiele z.B. in VLC das Audiosignal holen und dessen Wert [0,1 -> 0,100] auslesen und in einer Progressbar oder GDI-Bar anzeigen ich finde aber in der Hilfe des o.a. Links genauer in der beiliegenden CHM keinen Hinweis darauf.

    Es wird immer Bezug auf eine Audiodatei und damit auf einen Filestream genommen nicht aber, wie man den aktuellen Peak auslesen kann. Die DLLs sind so dermaßen gross da muss doch irgendwie eine Funktion dafür da sein weiß das jemand von Euch? Das wäre echt super und meinen Dank!

    LG Rufus

  • Hi, danke für die Antwort diese Funktion kannte ich ja aber das Problem ist, das alle Beispiele sich nur auf Audiodateien beziehen d.h. es wird immer eine Audiodatei vorrausgesetzt. Man findet auch kein Beispiel, in dem das Audio Signal online "geholt" wird würde es denn helfen, wenn man es aufzeichnen würde in einen Puffer schiebt und sozusagen die Analyse dann durchführt? Soweit ich das sehe, bin ich mit dem Problem wohl nicht der einzige das zieht sich quer durchs Netz. Angeblich soll es mit MCI Befehlen gehen

    open waveaudio alias device1
    status device1 left volume
    status device1 right volume

    Wäre das ein Ansatz? Hättest Du denn evtl. noch eine Idee?

    LG Rufus

  • Falls du das Signal eines Audiochannels analysieren willst, musst du versuchen, diesen mittels den Recording-Funktionen von Bass zu öffnen und dann auszulesen.

  • Hallo Rufus,
    nicht alle Funktionen der Bass-Dll/-UDF beziehen sich auf Audiodateien.
    So auch die von mir genannte Funktion. Sie erwartet ein Handle zu einem Stream-, Musik- oder Aufnahme-Kanal.
    Um ein Audiosignal aus dem Internet zu analysieren, musst Du zuerst einen Stream erstellen (z. B. mit

    [autoit]

    _BASS_StreamCreateURL ()

    [/autoit]

    ) und dann der Funktion das Handle übergeben.
    Ich denke, dass Beispiel in der Hilfe ist sehr aufschlussreich und sollte Dein Problem lösen.

  • Hi Leute,

    erstmal danke für die Antworten. Also, was ich möchte wäre den Line Out zu capturen also, das was aus dem Lautsprecher kommt. Das Windows API bietet hier in kiener Weise irgendeine Art von Möglichkeit man kann nur den aktuellen Einstellungswert des Volumereglers auslesen das ist so witzlos wie sinnlos denn die eigentliche Lautstärke bzw. Pegel den bekomment ja darüber nicht raus.

    Müsste ich also versuchen ein Handle auf den Line Out Kanal zu erstellen und diesen dann capturen? Ich müsste mal schauen, ob es da überhaupt ein passendes Beispiel gibt leider bezeihen sich ja alle auf typische Audiodateien, nicht auf Kanäle wie z.B. Line Out oder Line In. Ich habe auch mal nach geforscht das Problem, was ich habe, haben offenbar enorm viele *ggg*. Falls jemand evtl. eine Idee hat wäre ich super dankbar ich werde mir selbst natürlich auch grösste Mühe geben.

    Gruss Rufus

  • Hallo Rufus,
    es gibt mehrere Möglichkeiten, die Lautstärke/den Pegel von dem festzustellen, "was aus dem Lautsprecher" kommt.
    1. Mikrofon vor dem Lautsprecher, das mithilfe der Bass-UDF analysiert wird.
    2. Das Programm/die Anwendung, die etwas über den Lautsprecher ausgibt mithilfe der Bass-UDF analysieren.
    Falls Du unter "Line In" ein Gerät verstehst, das einen Sound-Input darstellt, ist es mit der Bass-UDF möglich, sämtliche Analyse-Verfahren durchzuführen.
    Außerdem wiederholst Du ständig, dass Dein Problem so verbreitet sei.
    Was genau Dein Problem allerdings ist bleibt unklar, da Deine Frage nach dem Analysieren eines Audiosignals von einer Website beantwortet wurde.

    P. S.: Zu Deiner Frage nach dem Feststellen eines Pegels bei der Ausgabe eines Videos sei gesagt, dass auch in diesem Fall ein Stream erstellt werden kann (mit der Funktion

    [autoit]

    _BASS_StreamCreateFile()

    [/autoit]

    ).

  • Ja, ich weiß ich wiederhole zu sehr sorry. Also kurz und knapp: Ich habe herum experementiert und diverse Beispeile auch gefunden aber lustigerweise: Die Bass DLL kann offenbar nichts analysieren, was aus LineOut raus geht alles was Input ist, geht wunderbar sämtlöiche Eingänge, Dateiströme usw. aber den Audiopegel des Line Out das scheint nicht zu gehen ich finde auch in der Hilfe nicht mal ansatzweise einen Hinweis darauf sicherlich weil die Bass DLL sich eher um Inputs und nicht um ordinäre Outputs kümmert auch die Befehle, die passen könnten haben keine Option für LineOut bzw.

    Lautsprecher oder ich hab da total den Hänger aber Leute, ich finde da wirklich nix ich meine das Ding ist schon geil aber ich dachte das man auch LineOut bekommt so Befehle GetChannel oder GetChannelLevel usw. führen leider auch nicht zum Erfolg und wenn ich Line Out eingebe kommt nicht das, was man erwarten wrüde (also in der Hilfe die ansonsten sehr gut ist).

    Versteht ihr genau da liegt ja mien Problem ginge es um Aufnahme Null Probleme das wäre fix gemacht aber ich hätte eben den Pegelstand wobei es egal ist, ob VLC oder MediaPlayer grad läuft das Windows API kanns nicht da bekommt man nur die Einstellung raus aber nicht den Pegel an sich da liegt ja der Hase im Pfeffer daher dachte ich, das das mit der Bass DLL gehen würde.

    LG Rufus

  • Hallo Rufus,
    wie laut ein Output tatsächlich ist, kann man nicht anhand der Datei, die ausgegeben wird, feststellen, weil auch die Lautstärke des Lautsprechers eine Rolle spielt.
    Wie genau sich die am Lautsprecher eingestellte Lautstärke auf die tatsächliche Lautstärke der Wiedergabe auswirkt, kann man mithilfe der Bass-Dll nicht feststellen (außer man stellt wie bereits gesagt ein Mikrofon vor dem Lautsprecher auf und erzeugt so einen Input-Kanal).

  • Hi, ah ja siehste das dachte ich mir schon es gibt wohl Workarounds aber da sind einige weitere DLLs dazwischen usw. naja, muss ich mal anders schauen aber gut, das ich das nun weiß dann muss ich ned immer weiter suchen *ggg* kennst Du denn evtl. eine Autoit Erweiterung, die das vielleicht könnte? Ich schaue mich auch noch mal um für mein Ziel Projekt ist das jetzt zwar nicht so enorm wichtig aber wäre schön gewesen naka, muss ich halt den Volumeregler benutzen *ggg* das reicht ja auch erst mal für den Anfang. Auf jeden Fall meinen besten Dank! LG Rufus

  • Es ist nicht möglich den Audio-Datenstrom von einem Fremdprogramm direkt auszulesen.

    Aber 2 Möglichkeiten gibt es doch

    1) Einen virtuellen Sountkartentreiber, der quasi zwischen Programm und richtiger Soundkarte sitzt (z.B.: VLC -> Virtueller Treiber -> Soundkartentreiber)
    Von diesem lassen sich dann die gewünschten Daten auslesen.
    Ich glaube "Virtual Audio Cable" ist sowas; vielleicht gibt es auch eine Freewarevariante...
    (oder du bist gut genug in einer höheren Programmiersprache, um selber einen virtuellen Treiber zu schreiben ;))

    2) Bei manchen Soundkarten kann man den Output direkt auf den Input patchen. Nennt sich meistens "StereoMix" oder "What you hear", einfach im Windows-Mixer das Häkchen setzen...
    Mit Bass.dll kann man den Input dann aufnehmen und analysieren.
    Die Lautstärke ist jedoch abhängig von den Reglereinstellungen im Windowsmixer

    E