AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Visualiesirung

Ein Thema von Desmulator · begonnen am 17. Feb 2008 · letzter Beitrag vom 21. Feb 2008
Antwort Antwort
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#1

Visualiesirung

  Alt 17. Feb 2008, 11:46
HalliHallo,

also ich komme mal direkt zu sache, ich abreite immoment an einer Visualiesirung für Waves, bzw Soundaten. Das heißt das ein Kreis passend zur musik seine größe ändern soll, bei 8bit Mono geht das ja alles ganz gut... nur jetzt habe ich ein problem mit 16 bit.

Mein Ziel ist, einen Kreis (300 px durchmesser maximal) relativ zu den schwinungen zu vergrößern / verkleiner. heißt bei 8 bit :
127 / 256 ( Bei 8 Bit gibt es Maximal 256 tonfrequenzen ) soll der kreis nur halb so groß sein.

Delphi-Quellcode:
  Visual : record
    Center : Word;
    Right : Word;
    Left : Word;
  end;


    { Wenn Mono }
    if WaveEx.nChannels = Mono then begin
      //Position ermitteln
      Stream.Position := Position.sample * ( WaveEx.wBitsPerSample div 8 * WaveEx.nBlockAlign ) + AudioStart;
      //Einlesen
      Stream.Read(Visual.Center,WaveEx.wBitsPerSample div 8);
      //Amplitude anpassen Maximal 300 Pixel und Zentriren
      Amplitude := round(( Visual.Center / WaveEx.wBitsPerSample * WaveEx.nBlockAlign ) * 300 - 150);
      if Amplitude < 0 then
        Amplitude := 0;
      //Position berechnen
      DrawXYPos := 300; //Position
      DrawXYPos := DrawXYPos - round(Amplitude / 2);
      //Kreiszeichnen
      VisualWnd.Canvas.Pen.Color := RGB(Random(255),Random(255),Random(255));
      VisualWnd.Canvas.Ellipse(bounds(DrawXYPos,DrawXYPos,Amplitude,Amplitude)); //Der Kreis wird einfach drüber gemalt
    end;
So aber Irgendwie will der net, was muss ich ändern?
Lars
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Visualiesirung

  Alt 17. Feb 2008, 12:05
Bei 8 Bit soll es maximal 256 Tonfrequenzen geben? Ich würde eher sagen, die Anzahl der Frequenzen ist unendlich groß. Egal, welche Auflösung die Abtastwerte haben.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#3

Re: Visualiesirung

  Alt 17. Feb 2008, 12:20
-?-

ein von uns beiden hat dan was flasch verstanden

Also bei 8 BitsPerSample kann man maximal 256 ton unterschiede darstellen?
Und bei 16 BitsPerSampel sind es dan 2 hoch 16 als 65536 unterschiede...

Sonst wäre die Quallität ja nicht so schlecht wenn man nur 8 Bits hat ?
Lars
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Visualiesirung

  Alt 17. Feb 2008, 12:46
Das sind die Abstufungen der Abtastwerte. Frequenzen sind was ganz anderes. Gedankenbeispiel: Du kannst eine beliebig große Frequenz darstellen, wenn du die Abtastwerte nur langsam genug steigen lässt.

Jede Frequenz v lässt sich darstellen als Funktion f(x)=sin (vs).

Du kannst also jede Frequenz in diskreten Abtastwerten so speichern:
Delphi-Quellcode:
for I:=0 to high(Buffer) do
  Buffer[I]:=round(sin(I/SAMPLERATE*FREQUENCY))*MAXVALUE;
SAMPLERATE ist hierbei die Samplingrate, also die Anzahl Abtastwerte pro Sekunde und MAXVALUE ist der Wert, der für vollen Ausschlag steht (bei 8 Bit 127, bei 16 Bit 32767). FREQUENCY ist, natürlich, die Frequenz, die der Ton darstellen soll.

Wie du siehst, ist die Menge der darstellbaren Frequenzen völlig unabhängig von der Auflösung der einzelnen Samples. Die Auflösung bestimmt nur, wie groß die "Artefakte" sind. Ein 8 Bit-Sample kann einen Wert natürlich nicht so genau darstellen wie ein 16 Bit-Sample.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#5

Re: Visualiesirung

  Alt 17. Feb 2008, 12:51
ja kalr natrülich hast du recht... ich hab die ganzezeit die amplitude ( also lautstärke -?- ) mit der frequenz frequenz verwechslet... naatrülich kann ich die frequenz so groß machen wie ich will...

also der Kreis soll passent zu amliotude also dem ausschlag seine größe ändern
Lars
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#6

Re: Visualiesirung

  Alt 17. Feb 2008, 13:45
Delphi-Quellcode:
    if WaveEx.nChannels = Mono then begin
      //Position ermitteln
      Stream.Position := Position.sample * ( WaveEx.wBitsPerSample div 8 * WaveEx.nBlockAlign ) + AudioStart;
      //Einlesen ( ein Sample )
      Stream.Read(Visual.Center,2);
      //Amplitude anpassen Maximal 300 Pixel und Zentriren
      Amplitude := Trunc(Power( 2 ,WaveEx.wBitsPerSample)); //Maximum
      Amplitude := round(( Visual.Center / Amplitude) * CricleSize); //Relativ zu 300
      Amplitude := Amplitude - ( CricleSize div 2 );

      //Wenn Unter 0
      if Amplitude < 0 then
        Amplitude := 0;//Amplitude * -1; // Positiv machen
      //Position berechnen
      DrawXYPos := 300; //Position
      DrawXYPos := DrawXYPos - round(Amplitude / 2);
      //Kreiszeichnen
      VisualWnd.Canvas.Pen.Color := RGB(Random(255),Random(255),Random(255));
      VisualWnd.Canvas.Ellipse(bounds(DrawXYPos,DrawXYPos,Amplitude,Amplitude));

    end;
Wenn ich es nun 8bit- samples abspielen lasse, funktiert es, jedoch macht er bei 16bit einfach irgendwas und hängt sich schließlich auf... wo ist der fehler?
Lars
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#7

Re: Visualiesirung

  Alt 17. Feb 2008, 14:17
Hats vielleicht damit zu tun dass die 8 Bit unsigned und die 16 Bit signed sind?

8 Bit: 0 Vollausschlag nach unten, 127 kein Ausschlag, 255 Vollausschlag nach oben
16 Bit: -32768 Vollausschlag nach unten, 0 kein Auschlag, 32767 Vollausschlag nach oben
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#8

Re: Visualiesirung

  Alt 20. Feb 2008, 20:53
Nun ich denke mal des es vom endgültiken datentüp abhengt ob die werte negativ oder positiv sind...

da ich die 16bit als Word und nicht als SmallInt einlese, dürfte es daran nicht liegen...

Delphi-Quellcode:
 0 0
 . .
 . .
 . .
255 65536
Lars
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#9

Re: Visualiesirung

  Alt 21. Feb 2008, 04:32
öhm doch^^
Stichwort Zweierkomplement
Du kannst die nicht einfach als unsigned betrachten und alles ist gut.
Die sind dann zwar positiv, aber die Werte liegen woanders.

z.B -1: Bitfolge 11111...111
macht signed eben -1, unsigned aber 65535 und nicht 32766 wie du es erwartest
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  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 03:38 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