AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

stream korrekt?

Ein Thema von venice2 · begonnen am 31. Aug 2020 · letzter Beitrag vom 1. Sep 2020
Antwort Antwort
Seite 1 von 2  1 2   
venice2

Registriert seit: 5. Dez 2019
331 Beiträge
 
Delphi 2010 Architect
 
#1

stream korrekt?

  Alt 31. Aug 2020, 09:13
Bass Library!

Irgendein Entwickler schickt einen schlechten Stream an meinen Visualisierungs-Wrapper.

Wie kann ich prüfen ob ein Stream die richtigen Daten enthält?

Ich kann 8, 16 und (32Bit Floating point) verarbeiten.
Trotzdem sehe ich das die Daten von manchen Streams einfach zu hoch für die Spectrum\Wave Daten sind wenn er falsch übergeben wird.
Zum beispiel ein nicht korrekt initialisierter Mixer Stream.

Ich möchte in dem Fall das Rendern einfach unterbinden.

Irgendwelche Ideen?
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.465 Beiträge
 
Delphi 7 Professional
 
#2

AW: stream korrekt?

  Alt 31. Aug 2020, 09:57
Kannst Du eventuell mit demhier BASS_CHANNELINFO oder demhier BASS_ChannelFlags bzw. demhier BASS_ChannelGetInfo an die gewünschten Infos kommen?
Code:
...
BASS_SAMPLE_8BITS   The channel's resolution is 8-bit. If neither this or the BASS_SAMPLE_FLOAT flags are present, then the channel's resolution is 16-bit.
BASS_SAMPLE_FLOAT   The channel's resolution is 32-bit floating-point.
...
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
2.637 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: stream korrekt?

  Alt 31. Aug 2020, 12:25
Wenn das mit Channel(get)Info nicht fruchten sollte, schau Dir mal den Nemp Player Quelltext an.
Benutzer Gausi hat Nemp inklusive Sourcen auf seiner Webseite bereit gestellt, vielleicht entdeckst Du bei der Einbindung von Fremdquellen genau das was Dir weiterhelfen kann oder aber es basiert auf Channel(get)Info... gucken kost ja nix
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
704 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: stream korrekt?

  Alt 31. Aug 2020, 14:03
Da es hier um Visualisierung geht, könnte man dann genauso gut in die Demo-Programme der bass.dll gucken (Spectrum_vis oder so ähnlich). Denn was anderes läuft bei meinem Player an der Stelle auch nicht ab. Ich habe den Bass-Demo-Code da nur ein wenig modifiziert, aber im Wesentlichen übernommen.

Die "Visualisierung" ist bei mir nur eine kleine Spielerei, die kaum den Namen verdient.
The angels have the phone box.
  Mit Zitat antworten Zitat
venice2

Registriert seit: 5. Dez 2019
331 Beiträge
 
Delphi 2010 Architect
 
#5

AW: stream korrekt?

  Alt 31. Aug 2020, 18:15
Kannst Du eventuell mit demhier BASS_CHANNELINFO oder demhier BASS_ChannelFlags bzw. demhier BASS_ChannelGetInfo an die gewünschten Infos kommen?
Code:
...
BASS_SAMPLE_8BITS   The channel's resolution is 8-bit. If neither this or the BASS_SAMPLE_FLOAT flags are present, then the channel's resolution is 16-bit.
BASS_SAMPLE_FLOAT   The channel's resolution is 32-bit floating-point.
...
Das tue ich alles schon.
Ich sagte auch ich kann 8, 16, und 32Bit Sample Float verarbeiten. Danke.

Das Problem ist eher das wenn ein Mixer Stream übergeben wird die Daten einfach nicht stimmen meist sind\liegen sie im höchsten bereich.
Was bedeutet das beim Spectrum zum Beispiel die Daten im absoluten roten Bereich liegen.

Die Spectrum\Wave Daten sind quasi übersteuert.

EDIT:
Ich glaube mache da gar nichts.
Wenn der Developer nicht in der Lage ist den richtigen Stream zu übergeben dann ist es halt so das er ungenügende Ausgaben der Visualisierung bekommt.
Es ist halt nicht möglich alle Eventualitäten gegenzuprüfen.

Geändert von venice2 (31. Aug 2020 um 18:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.990 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: stream korrekt?

  Alt 31. Aug 2020, 18:31
Du hast das in dem Zitat aber auch richtig verstanden?
Delphi-Quellcode:
if BASS_SAMPLE_FLOAT // 32 Bit
else if BASS_SAMPLE_8BITS // 8 Bit
else // 16 Bit
Was sind für dich unrichtige Daten?
* richtige Daten aber Aufnahme total übersteuert (dann ist das Rot richtig)
* richtige Daten in einem von dir nicht beachteten Format
* ungültige/falsche Daten (irgendwas, aber keine Sound-Daten)

Und jupp, wenn Letzeres, dann ist das halt so und ich würde das auch nicht behandeln.
OK, man könnte maximal irgendwie versuchen rauszubekommen, ob die wirklich ungültig sind, und z.B. mit einer Exception reagieren, was aber schwer/unmöglich wird, wenn die Daten dennoch der Spezifikation entsprechen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (31. Aug 2020 um 18:36 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.465 Beiträge
 
Delphi 7 Professional
 
#7

AW: stream korrekt?

  Alt 31. Aug 2020, 18:55
Du meinst also was ganz anderes, als ich aus Deiner Fragestellung entnommen habe.

Es hat also nichts mit 8, 16, und 32Bit Sample Float zu tun, sondern mit der Lautstärke der Streams.

Unterschiedliche Internetradios sind unterschiedlich laut und deshalb bekommt man da bei BASS_ChannelGetLevel teils "exorbitante" Werte heraus. Je höher die Werte, umso "übersteuerter" die Anzeige.

Leider weiß man am Beginn eines Streams nicht, ob er insgeamt zu laut ist oder nur am Anfang ein paar etwas lautere Töne, deshalb kann man eigentlich erst am Ende sagen, dass er insgesamt zu laut war.

Wenn Du also in der Anzeige eine "Übersteuerung" vermeiden willst, musst Du Dir einen Algorithmus überlegen, mit dem Du die per BASS_ChannelGetLevel erhaltenen Werte auf ein "erträgliches" Maß herunterrechnest. Zugegeben hab' ich keine Ahnung, wie man das sinnvoll lösen kann.

Bei meinem NetRadio sind übersteuerte Sender halt auch in der Anzeige übersteuert

Wobei: In diesem Zusammenhang ist der Ausdruck "Übersteuert" etwas irreführend:

Früher war es bei Tonbändern und Cassetten so, dass übersteuerte Aufnahmen akustisch verzerrt wurden. Die Übersteuerung führte, je nach Höhe, zu einem massiven Qualitätsverlust, die Akustik, die Wiedergabequalität litt.

Dies ist im Zusammenhang mit lauten Streams nicht der Fall, da sieht halt "nur die Anzeige rot" und nicht die Ohren

Achso, Dein Nachsatz per Edit: Ich glaube mache da gar nichts. ist meiner Meinung nach in diesem Zusammenhang die einzig sinnvolle Entscheidung.
  Mit Zitat antworten Zitat
venice2

Registriert seit: 5. Dez 2019
331 Beiträge
 
Delphi 2010 Architect
 
#8

AW: stream korrekt?

  Alt 31. Aug 2020, 18:57
Zitat:
Du hast das in dem Zitat aber auch richtig verstanden?
Entschuldige aber ich weis jetzt nicht was du nicht verstanden hast.

also gerne noch einmal.
Zitat:
Ich sagte auch ich kann 8, 16, und 32Bit Sample Float verarbeiten. Danke.
Delphi-Quellcode:
if ((flags and BASS_SAMPLE_FLOAT) = BASS_SAMPLE_FLOAT) then
// Ich tue etwas
if ((flags and BASS_SAMPLE_MONO) = BASS_SAMPLE_MONO) then
// Ich tue etwas anderes
if ((flags and BASS_SAMPLE_8BITS) = BASS_SAMPLE_8BITS) then
// Ich tue etwas ganz anders
ChannelDaten mit BASS können einmal als normaler Stream 8, 16, 32 Bit Floating Point übergeben werden.
Diese werden dann mit Bass_ChannelGetdata über entsprechenden Stream und übergebenen Flags eingelesen.
Abhängig von den Flags werden die Daten dann mit 8, 16, oder 32 Bit analysiert.

Daten können aber auch als Mixer Stream übergeben werden.
Dazu wird der Mixer erstellt.
Mixer_Handle := BASS_Mixer_StreamCreate(..

Spielt man nun einen Titel dann wird der Stream (normale unveränderte Daten) entsprechend der Datei erstellt.
Stream_Handle := Bass.BASS_StreamCreateFile(..

Verwendet man nun den Mixer dann wird dieser Stream dem Mixer Stream hinzugefügt.
BASS_Mixer_StreamAddChannel(Mixer_Handle, Stream_Handle...

Wenn ich nun Pech habe wird dieser Stream auch noch einmal mit DSP und oder Equalizer Effekte verändert und dann an meinem Wrapper geschickt.
Das nenne ich nicht normalen Stream er wurde vorher extrem verfälscht\verändert)

Nun!
Wie kann ich das prüfen? Denke gar nicht.
Deswegen mein Edit in der vorherigen Post. Ich mache gar nichts.
Ansonsten müsste ich den Stream in seine Einzelteile zerlegen um wieder auf den normalen Stream zu kommen.
Das scheint mir aber unmöglich zu sein.

Zitat:
Es hat also nichts mit 8, 16, und 32Bit Sample Float zu tun, sondern mit der Lautstärke der Streams.
Ja die Amplitude halt.

Zitat:
die einzig sinnvolle Entscheidung.
Ja denke auch

Danke für euer Interesse.

Geändert von venice2 (31. Aug 2020 um 20:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.990 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: stream korrekt?

  Alt 31. Aug 2020, 19:39
Nja, speziell das hier "If neither this or the BASS_SAMPLE_FLOAT flags are present, then the channel's resolution is 16-bit." ist eine Ausnahme, die bei deinen IFs fehlt.


Tja, wenn die Daten wirklich so sind, dann stimmt die Anzeige ja eigentlich.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
venice2

Registriert seit: 5. Dez 2019
331 Beiträge
 
Delphi 2010 Architect
 
#10

AW: stream korrekt?

  Alt 31. Aug 2020, 20:18
Nja, speziell das hier "If neither this or the BASS_SAMPLE_FLOAT flags are present, then the channel's resolution is 16-bit." ist eine Ausnahme, die bei deinen IFs fehlt.


Tja, wenn die Daten wirklich so sind, dann stimmt die Anzeige ja eigentlich.
Nein sie fehlt nicht.
Aber das kannst du nicht sehen.
Bitte..
Delphi-Quellcode:
    BASS_ChannelGetInfo(VisRenderThread.Stream, ChanInfo);

    if (ChanInfo.flags and BASS_SAMPLE_8BITS) = BASS_SAMPLE_8BITS then
      BassSoInfo.BitsPerSample := 8
    else if (ChanInfo.flags and BASS_SAMPLE_FLOAT) = BASS_SAMPLE_FLOAT then
      BassSoInfo.BitsPerSample := 32
    else
    BassSoInfo.BitsPerSample := 16;
Du bist ein Perfektionist so wie ich.

Zitat:
Tja, wenn die Daten wirklich so sind, dann stimmt die Anzeige ja eigentlich.
Liegt im Auge des Betrachters.
Für mich sind sie in der Darstellung auf das äußerste Ausgelastet, aber gut muss der Developer selbst für sorgen das es stimmt.
Falscher Stream falsche Ausgabe und fertig. Sein eigenes Problem.

Geändert von venice2 (31. Aug 2020 um 20:24 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf