AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [BASS.dll] - (Stehende) Wellenanzeige
Thema durchsuchen
Ansicht
Themen-Optionen

[BASS.dll] - (Stehende) Wellenanzeige

Offene Frage von "Flips"
Ein Thema von Flips · begonnen am 27. Feb 2008 · letzter Beitrag vom 28. Feb 2008
Antwort Antwort
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#1

[BASS.dll] - (Stehende) Wellenanzeige

  Alt 27. Feb 2008, 23:17
Hallo,

ich habe es mittlerweile geschafft, die aktuelle Frequenz/Welle oder wie ihr es auch nennen wollt darzustellen.
Ein 440Hz-Sinus-Ton-Darstellung ist im Anhang.
Bitte im Folgenden den Ausdruck "stehende Welle" nicht allzu physikalisch, eher bildlich nehmen
Auf dem angehängten Bild steht die Welle zwar, in meinem Programm (welches diese Werte natürlich andauernd abtastet) verschiebt sich die Welle aber mit jeder Aktualisierung auf der X-Achse.
Ich hätte aber gerne, dass die Welle praktisch steht (was schön wäre, da der Ton ja auch 30s lang einen konstanten 440Hz-Sinus beschreibt).
Hier der verantwortliche Code:
Delphi-Quellcode:
var
  WaveData : array [0..2048] of DWORD;

With image2 do
  begin
    // Ränder zeichnen usw...
    // [...]
    HalfHeight := Height div 2;

    // Anfangspos setzen
    Canvas.moveto(0, HalfHeight);
    //BASS-Daten abrufen
    BASS_ChannelGetData(ReturnPlayingChannel, @WaveData, 2048);
    // Daten Zeichnen
    for i := 0 to Width do
    begin
      R := SmallInt(Loword(WaveData[i])); // Rechter Kanal
      // Zusammenrechnen der Kanäle + Zoom
      YPos := HalfHeight+ trunc((R / 65535) * Height);
      Canvas.lineto(i, YPos);
    end;
  end;
Wie man sehen kann ist das ganze auch nicht auf die Breite des Bildes optimiert (Array 2048 lang, Bild ~ 300px breit), das müsste ich auch noch hinbekommen.

Womit ich auch Probleme habe ist die Größe des Arrays allgemein.
Wenn ich das Array jetzt nur 512 (+1) Werte groß mache, dann sollte man meinen da i nur bis 300 geht -> Bild wird voll mit Sinus ausgefüllt. Aber ab ~ einem Drittel des Bildes ist nur noch ... ja eine Art Rauschen sichtbar.

Wie kann ich die Wellen "stehend" anzeigen?
Wie genau muss ich meine Arraygröße wählen?

Thx,

Flips
Miniaturansicht angehängter Grafiken
sinus_751.png  
Philipp F.
  Mit Zitat antworten Zitat
Benutzerbild von christian.noeding
christian.noeding

Registriert seit: 26. Mai 2005
Ort: Knw.-Remsfeld
119 Beiträge
 
Delphi XE2 Professional
 
#2

Re: [BASS.dll] - (Stehende) Wellenanzeige

  Alt 27. Feb 2008, 23:23
Hi

Das was du suchst, nennt sich "Triggern" und wird bei Oszilloskopen genutzt, um ein beliebiges (sich wiederholendes) Signal betrachten zu können. Du suchst dir in deinem Falle einfach einen bestimmten Punkt in dem Signal (z.B. Nulldurchgang) und zeichnest immer ab diesem Punkt in eine restimmte Richtung. Somit bekommst du selbst bei Veränderung der Amplitude und der Frequenz ein vernünftiges Bild, auf dem man auch die Änderungen gut beobachten kann.


bis dann,
Chris
Christian Nöding
  Mit Zitat antworten Zitat
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#3

Re: [BASS.dll] - (Stehende) Wellenanzeige

  Alt 28. Feb 2008, 15:17
Sehr großes Dankeschön
Hätte man selbst drauf kommen können.

Habs jetzt so umgesetzt, dass ich prüfe ob die Amplitude vom aktuellen Abschnitt = 0 und die Amplitude vom folgenden Abschnitt > 0 ist, was in der Sinuskurve nur an einem Punkt der Fall ist (würde ich das "Amplitude vom folgenden Abschnitt > 0" nicht machen, so würde die Kurve ständig zwischen nach oben und nach unten wechseln, da eine Sinusschwingung ja pro Phase 2 Nullstellen hat, ich aber eine eindeutige Stelle haben will).
Bissjen kompliziert erklärt, sry

Damit wäre meine erste Frage beantwortet
Philipp F.
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:47 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