Fragen zur korrekten Anwendung der Bass.dll

  • VB.NET

Es gibt 34 Antworten in diesem Thema. Der letzte Beitrag () ist von kafffee.

    @kafffee
    Glaub Magnitude heist das, nicht amplitude ich vertuh mach da oft. Die Einheit, keine Ahnung. Aber mit 0....0.1......10 liegst du falsch, es sollten Werte zwischen 0 und 1 kommen. Was ich vergesen hab, der Stream muss mit BASSFlag.BASS_SAMPLE_FLOAT erstellt sein, also BASSFlag.BASS_SAMPLE_FLOAT Or BASSFlag.BASS_STREAM_AUTOFREE um den stream nicht selbst freigeben zu müssen.

    Achte genau auf die Zahlen, steht im Label z.B. 7,075064E-08 oder 9,598815E-18?
    Auch das wäre kleiner als 1 :P

    Bei Progessbars, setz einfach das maximum auf 100, multipliziere den Wert aus den FFT Daten mit 100 und gut sollte es sein.
    @Takafusa

    Ah okay, ich hab den Timer auf 45ms, da hab ich das "E" glatt übersehen. Wo kommt denn das auf einmal her, ich dachte fft(index) ist ein Single?? Ist das nicht hexadezimal oder sowas (sry ich habs nicht so mit Mathe...)
    Edit: Ah ne das E hat glaub was mit den Nachkommastellen zu tun oder?

    Meinst du so?:

    VB.NET-Quellcode

    1. barFreqAmp.Value = CInt(fft(index) * 100)


    Das bleibt auch bei 0, selbst wenn ich es mal 1000 nehme...

    Das mit den BassFlags hab ich eh noch nicht so ganz verstanden zu was das da ist. Auf was muss man da generell achten?

    Hab das gefunden aber da werd ich nicht schlau draus:
    bass.radio42.com/help/html/748a6153-d6db-1d97-ff25-e58b847d712b.htm


    Und was genau macht der Or-Operator da? Probiert das Programm dann einfach aus, ob eines der beiden Argumente funktioniert oder wie?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „kafffee“ ()

    @kafffee Meinst Du das?

    VB.NET-Quellcode

    1. bytesread = bytesread Or CInt(BASSStreamProc.BASS_STREAMPROC_END) ' set indicator flag
    Schreib das Resultat hexadezimal in die Console.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    kafffee schrieb:

    Das bleibt auch bei 0, selbst wenn ich es mal 1000 nehme...

    evtl. ist der Wert auch 0, bei 8KHz+ sehr oft der Fall.

    kafffee schrieb:

    Und was genau macht der Or-Operator da?


    Mit den Flags ist hier erläutert, sollte man ein Flag setzen müssen, wie für BASS_ChannelGetData, steht das in der Doku bei der Funktion.
    bass.radio42.com/help/html/fdf…951-c126-3ce35edaa7f5.htm

    Die Flags können Kombiniert werden(Bitwise Operations)

    VB.NET-Quellcode

    1. Dim flag1 = 1 = 00000000 00000000 00000000 00000001
    2. Dim flag2 = 2 = 00000000 00000000 00000000 00000010
    3. Dim flag3 = 4 = 00000000 00000000 00000000 00000100


    Quellcode

    1. dim mixedFlag = flag1 or flag2
    2. 00000000 00000000 00000000 00000001
    3. or 00000000 00000000 00000000 00000010
    4. = 00000000 00000000 00000000 00000011
    5. mixedFlag ist 3


    Quellcode

    1. dim mixedFlag = flag1 or flag2 or flag3
    2. 00000000 00000000 00000000 00000001
    3. or 00000000 00000000 00000000 00000010
    4. or 00000000 00000000 00000000 00000100
    5. = 00000000 00000000 00000000 00000111
    6. mixedFlag ist 7


    Siehe auch Bitwise Operations:
    tutorialspoint.com/vb.net/vb.net_bitshift_operators.htm

    kafffee schrieb:

    Edit: Ah ne das E hat glaub was mit den Nachkommastellen zu tun oder?

    Siehe:
    de.wikipedia.org/wiki/Wissenschaftliche_Notation

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Takafusa“ ()

    kafffee schrieb:

    Auf welche Frage von mir beziehst du dich?

    kafffee schrieb:

    Hab das gefunden aber da werd ich nicht schlau draus:
    bass.radio42.com/help/html/748…d97-ff25-e58b847d712b.htm
    Da steht:

    VB.NET-Quellcode

    1. Private Function MyFileProc(ByVal handle As Integer, ByVal buffer As IntPtr,
    2. ByVal length As Integer, ByVal user As IntPtr) As Integer
    3. ' implementing the callback for BASS_StreamCreate...
    4. ' here we need to deliver PCM sample data
    5. ' increase the data buffer as needed
    6. If _data = Nothing OrElse _data.Length < length Then
    7. _data = New Byte(length) {}
    8. End If
    9. Dim bytesread As Integer = _fs.Read(_data, 0, length) ' #### hier
    10. Marshal.Copy(_data, 0, buffer, bytesread)
    11. If bytesread < length Then
    12. bytesread = bytesread Or CInt(BASSStreamProc.BASS_STREAMPROC_END) ' set indicator flag
    13. _fs.Close()
    14. EndIf
    15. Return bytesread
    16. End Function
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Takafusa

    Ist ja cool dass die Flags so kombiniert werden können. Hatte Schon Sorge dass ich mich da irgendwie für eins entscheiden muss...

    Hab den Wert jetzt mal mit 10000 multipliziert dann hats einen kleinen Ausschlag gezeigt. Wahrscheinlich dann nur für exakt diese Frequenz. Ich hab mich entschlossen das jetzt mit einem Spectrum Analyzer zu machen, das funktioniert besser...
    Nunja ein Spektrum Analyzer macht so gesehen nichts anderes. Aber die BassNet hat irgendwas an Board womit du sowas in einer PictureBox anzeigen lassen kannst. Ich glaub im Misc Namespace.

    Hab eben geguggt,
    Un4seen.Bass.Misc.Visual
    Un4seen.Bass.Misc.WaveForm
    damit ging was, schau mir hier nach Posts von OnkelR(RIP), der hatte da damals ein paar Posts zu.
    Ein Arduino ist mir zu schwach auf Brust. Ich nutze NodeMCU's oder Teensy Boards. Bastel im Moment die nächste Lampe mit Bewgungsmelder für im Keller. Da das Ding auch WLAN an Board hat kriege ich sogar mit wenn jemand unbefugt meinen Keller betritt. In meinem "Mediaroom" kann ich via COM oder WLAN alles schalten.
    Dateien
    Ich hab mich mal im Un4Seen-Forum schlau gemacht. Es ist tatsächlich möglich, jedem Stream parallel jeweils ein Audioausgabegerät zuzuweisen.

    Einfach für jedes Gerät die Bass.BASS_Init aufrufen mit dem index des gewollten Geräts (den kann man auch ermitteln)

    Dann ganz normal die Streams erstellen.

    Dann mit Bass.BASS_ChannelSetDevice([streamhandle], [deviceindex]) das Gerät ändern. Kann man sogar machen während der stream gerade abgespielt wird.

    Bei Fragen könnt ihr euch gerne melden :)