Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Oszilloskop und Spektrum (https://www.delphipraxis.net/209034-oszilloskop-und-spektrum.html)

Peter666 16. Okt 2021 17:08

Oszilloskop und Spektrum
 
Hi,

ich hab hier ein Projekt bei dem lese ich eine WAV Datei ein und möchte ein Oszilloskop bzw. Spectrum darstellen.
Das Signal liegt in der WAV Datei als 32 Bit signed Integer vor. Hat jemand eine Idee wie ich da für jeden Spur die Daten auslese?

Peter

venice2 16. Okt 2021 17:37

AW: Oszilloskop und Spektrum
 
https://www.delphipraxis.net/1244774-post5.html

Delphi.Narium 16. Okt 2021 17:42

AW: Oszilloskop und Spektrum
 
Bass.dll und dort in die Demoprogramme schauen.

Hier suchen (lassen) bass dll site:delphipraxis.net

Da bass.dll in einer visuellen Komponente mal reinschauen.

Peter666 16. Okt 2021 19:47

AW: Oszilloskop und Spektrum
 
Ui, das ging schnell. Danke für die Antwort. Ehrlich gesagt hab ich dummerweise vor dem Abendessen auf erstellen geklickt in der Hoffnung danach den Text zu bearbeiten und etwas zu konkretisieren.
Bass fällt in dem Fall weg und FFT kann ich auch selber berechnen. Mir ging es eigentlich darum, dass ich nicht wusste wie die 6 Kanäle mit 32bit signed integer Auflösung gespeichert sind. Offenbar 32bit für Kanal 0, dann 32bit für Kanal 1 usw.
Ich weiß aktuell allerdings nicht und das wollte ich eigentlich schreiben, ob jemand eine Idee hat wie man das Oszilloskop für n-Kanäle darstellt. Einfach alle in eine Darstellung scheint mir nicht richtig und alle n-Kanäle separat ist zu unübersichtlich.
Das Problem an dem ich sitze ist, dass sagen wir ich 4 parallel eintrudelnde 6 Kanälige Wavs habe und die sinnvoll darstellen will, ohne den Operator zu überfordern.

Peter

Sinspin 17. Okt 2021 09:15

AW: Oszilloskop und Spektrum
 
Kommt drauf an was du für eine Auflösung haben willst, aber wie wäre es nur Spitze-Spitze anzuzeigen? Das gibt schöne Hüllkurven.
Man kann auch noch mehr Samples auslassen oder nur alle 100/200ms aktualisieren.
Wie sind die Kanäle verteilt? Alle von der gleichen Quelle würde ich überlagert in verschiedenen Farben darstellen. Alles zusammen sind das ja nur ein "paar" Pixel die man leicht einige male pro Sekunde neu zeichnen kann ohne das das Programm merklich CPU verbraucht.

Generell hat eine WAV Datei ein schön einfaches Format welches gut dokumentiert ist. Es eignet sich super um die Samples einfach auszulesen und damit visuell herumzuspielen.

Peter666 17. Okt 2021 19:50

AW: Oszilloskop und Spektrum
 
Danke,

ich habe jetzt einfach folgendes gemacht. Das Tonsignal mit den 6 Kanälen wandle ich in ein Monosignal mit 16 Bit (AV_SAMPLE_FMT_S16) um und werte das dann aus. Ffmpeg ist recht performant was die Umwandlung angeht und soweit ich das erkenne zeigt mir das Oszilloskop auch die passenden Daten an.

Was ich nicht so ganz verstehe ist, warum ich die Schrittweite durch 4 teilen muss. Das Signal ist ja nur ein Smallint für jeden Wert.

Delphi-Quellcode:
procedure TForm1.ProcessAudio(Buf: PByte; Size: integer);
var
  step, Y, X, V: integer;
  ptr: PSmallInt;

  function FixRange(const Y: integer): integer;
  begin
    Result := Y * 127 div FBitmap.Height;
  end;

begin
  FBitmap.FillTransparent;
  Y := 0;
  X := 0;

  Step := (Size div 4) div FBitmap.Width;
  if Step<1 then Step := 1;
  ptr := PSmallInt(Buf);

  for x := 0 to FBitmap.Width-1 do
  begin
    V := (32767 - ptr^) * FBitmap.Height div 65536;
    inc(ptr, Step);
    if X = 0 then Y := V;
    repeat
      if Y < V then
        Inc(Y)
      else if Y > V then
        Dec(Y);
      FBitmap.SetPixel(X, Y,
        FSpectrumPalette[FixRange(abs(Y - FBitmap.Height div 2) * 2 + 1)]);
    until Y = V;
  end;

  Image1.Picture.Assign(FBitmap);
end;

TomyN 1. Mär 2022 13:00

AW: Oszilloskop und Spektrum
 
Es könnte ein Stereo Signal sein, und man überspringt die Samples des anderen Kanals.

Was mich noch wundert ist die 127. Das sieht nach shortInt ( 8 bit) aus, Du arbeitest aber mit smallInt (16 bit).

Tomy

Blup 2. Mär 2022 10:33

AW: Oszilloskop und Spektrum
 
FSpectrumPalette hat 128 Einträge.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz