Wer beherrscht die Welt?
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
Also vor paar Jahren hab ich mal von einer von CD geripten wav
einmal eine OGG-Datei mit 128kbps und einmal eine MP3-Datei bei gleicher Bitrate mit dem Lame-Encoder erzeugt. Die OGG-Datei hat sich deutlich dumpfer angehört, nicht
als ob die Kompression so stark eingespielt hat sondern eher als ob jemand nen Vorhang vor den Lautsprecher gezogen hat.
Heute ist das aber nicht mehr so....
einmal eine OGG-Datei mit 128kbps und einmal eine MP3-Datei bei gleicher Bitrate mit dem Lame-Encoder erzeugt. Die OGG-Datei hat sich deutlich dumpfer angehört, nicht
als ob die Kompression so stark eingespielt hat sondern eher als ob jemand nen Vorhang vor den Lautsprecher gezogen hat.
Heute ist das aber nicht mehr so....
I´a dllfreak2001
wo wir gerade von Wave-Kompression sprechen.
Wollen wir mal einen eigenen Codec entwickeln?
Im Anfänger-Forum gibt es auch gerade das Thema Waves.
Ich hab mir mal die Bezier-Kurven angesehen und muss sagen, dass sich da doch sicherlich was machen lässt.
Und wenn man statt 150 * 2 Einheiten nur 4 Einheiten bräuchte ...
also in dem man die Sache grafisch betrachtet und versucht Funktionsabschnitte durch Bezier-Kurven darzustellen ...
Ich weiß zwar nicht, wie gut das Ergebnis werden kann, vielleicht muss man auch noch ein paar Modulationen reinspielen, damit das Zittern auf der Amplitude mit integriert werden kann ...
aber um einiges sollte man eine Wave damit schon komprimieren können.
Kennt sich jemand mit Mathematik, vor allem Funktionen und Analysis aus?
Ich nur bedingt.
Wie kann man überhaupt von einer Zeichnung (Kurve) (Pixel mit nur einem möglichen Y-Wert pro x-Position) eine Funktion ermitteln?
Interessiert mich auch allgemein für zum Beispiel das Glätten von Zeichnungen oder Eckigen Kanten in Bildern.

Wollen wir mal einen eigenen Codec entwickeln?
Im Anfänger-Forum gibt es auch gerade das Thema Waves.
Ich hab mir mal die Bezier-Kurven angesehen und muss sagen, dass sich da doch sicherlich was machen lässt.
Und wenn man statt 150 * 2 Einheiten nur 4 Einheiten bräuchte ...
also in dem man die Sache grafisch betrachtet und versucht Funktionsabschnitte durch Bezier-Kurven darzustellen ...
Ich weiß zwar nicht, wie gut das Ergebnis werden kann, vielleicht muss man auch noch ein paar Modulationen reinspielen, damit das Zittern auf der Amplitude mit integriert werden kann ...
aber um einiges sollte man eine Wave damit schon komprimieren können.
Kennt sich jemand mit Mathematik, vor allem Funktionen und Analysis aus?
Ich nur bedingt.
Wie kann man überhaupt von einer Zeichnung (Kurve) (Pixel mit nur einem möglichen Y-Wert pro x-Position) eine Funktion ermitteln?
Interessiert mich auch allgemein für zum Beispiel das Glätten von Zeichnungen oder Eckigen Kanten in Bildern.

Kinder an die Macht http://scratch.mit.edu/
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
Per Fourier-Analyse und Synthese könnte man das machen.
Damit wird die Audiodatei komplett in einer Funktion beschrieben.
Das ist aber derart aufwendig das zum einen ein extrem leistungsstarker Computer benötigt wird und bei entsprechender Genauigkeit (hier geht
auch etwas verloren) wird die entstehende Formel auch nicht gerade kurz.
Die Glättung bei digitaler Musik geschieht erst hinter dem DA-Wandler.
Meist durch einen kleinen Kondensator, von daher ist das oben beschriebene Verfahren doppelt unbrauchbar.
Damit wird die Audiodatei komplett in einer Funktion beschrieben.
Das ist aber derart aufwendig das zum einen ein extrem leistungsstarker Computer benötigt wird und bei entsprechender Genauigkeit (hier geht
auch etwas verloren) wird die entstehende Formel auch nicht gerade kurz.
Die Glättung bei digitaler Musik geschieht erst hinter dem DA-Wandler.
Meist durch einen kleinen Kondensator, von daher ist das oben beschriebene Verfahren doppelt unbrauchbar.
I´a dllfreak2001
Ich würde mir einfach mal anschauen, wie ogg oder mp3 vorgehen. Zum Beispiel könntest Du Dir einfach den Source-Code für ogg-vorbis runterladen (xiph.org) und da mal reinschnüffeln... dann würd ich von dort ausgehend überlegen, ob man das irgendwie anders lösen könnte. Aber einfach so ins blaue drüber nachzudenken ist glaub keine gute Idee.
Auch das ganze durch Kurvenfunktionen zu beschreiben, klappt nicht unbedingt. Überleg mal wie fein so eine Sampling-Auflösung ist (z.B. 44100 Samples pro Sekunde), und wenn Du das mal in 1:1 Größe anschaust, siehst Du auch, daß da selten triviale Kurven oder sowas drin vorkommen. Das also alles nun irgendwie als Kurven zu beschreiben, wird wohl nur sehr wenig bringen - ich würde sogar vermuten, daß dadurch die Dateigröße eher steigt.
Auch das ganze durch Kurvenfunktionen zu beschreiben, klappt nicht unbedingt. Überleg mal wie fein so eine Sampling-Auflösung ist (z.B. 44100 Samples pro Sekunde), und wenn Du das mal in 1:1 Größe anschaust, siehst Du auch, daß da selten triviale Kurven oder sowas drin vorkommen. Das also alles nun irgendwie als Kurven zu beschreiben, wird wohl nur sehr wenig bringen - ich würde sogar vermuten, daß dadurch die Dateigröße eher steigt.


ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
- hardfalcon
- Beiträge: 3447
- Registriert: 29.08.2004 20:46
Vom Prinzip her wäre ein Format, das Wave-Daten mit mathematischen Kurvengleichungen beschreibt ein ser interessanter Ansatz. Das wäre quasi das Prinzip der Vektorgrafik auf Musik angewendet. Bei so einem Format könnte man die Lautstärke ohne irgendeinen Qualitätsverlust (vom erstmaligen "Vektorisieren" natürlich mal abgesehen) beliebig ändern, genauso wie man die Audio-Dateien beliebig dehen und stauchen könnte. Da wären sicherlich auch noch ganz andere Effekte denkbar...
Aber von der Umsetzung her wäre das mir nen (ziemlich großen) Tick zu kompliziert, ich würde mir nichtmal ne Erkennungsroutine für Morse zutrauen...
Aber von der Umsetzung her wäre das mir nen (ziemlich großen) Tick zu kompliziert, ich würde mir nichtmal ne Erkennungsroutine für Morse zutrauen...

Fürs Morsen ist es kein Problem.
Ton da, Ton weg, Ton länger da, Ton weg. ...
selbst mit einer Rauschannahme ist es möglich aus einer Wave einen MorseCode zu erhalten. /\
_ _ _ / \
/\ / \ ___ / \ / \_____ /\ /\ / \ /\
\_/ \_/ \_/ \_/ \_/ \/ \/ \/ \
Man kann die Spitzen zählen und die Maximalhöhe ermitteln.
Anzahl der Spitzen wären Frequenz und Höhe der Maxima, die Lautstärke.
OGG und MP3 will ich mir gar nicht ankucken. Ich will keine Verfahren kopieren oder nachäffen. Es geht mir um die eigene Entwicklung.
Inklusive der späteren Erkenntnis der Unmöglichkeit.
Versuch macht klugt.
Das einzige, was ich bäruchte, wäre ein Ansatz, wie man aus vorgegeben Punkten die dazugehörige Funktionsgleichung ermittelt.
Eine allgemeine Formel, die es mit einer Reihe von Punkten schafft.
In der Schule waren es meist ja nur Vorgaben wie:
Funktion 3. Grades und der Punkt sowieso und sowieso liegen darauf.
Die zweite Ableitung hat eine Nullstelle bei ...
Aber das wird nicht reichen. Wer bestimmt, ob sie dritten oder zweiten oder n-ten Grades ist?
Wie kann ich eine Bezierkurze ermitteln, die durch sagen wir 8 von 10 Punkten führt und wo die anderen beiden nahe dabei liegen?
Zweites Beispiel:

Ton da, Ton weg, Ton länger da, Ton weg. ...
selbst mit einer Rauschannahme ist es möglich aus einer Wave einen MorseCode zu erhalten. /\
_ _ _ / \
/\ / \ ___ / \ / \_____ /\ /\ / \ /\
\_/ \_/ \_/ \_/ \_/ \/ \/ \/ \
Man kann die Spitzen zählen und die Maximalhöhe ermitteln.
Anzahl der Spitzen wären Frequenz und Höhe der Maxima, die Lautstärke.
OGG und MP3 will ich mir gar nicht ankucken. Ich will keine Verfahren kopieren oder nachäffen. Es geht mir um die eigene Entwicklung.
Inklusive der späteren Erkenntnis der Unmöglichkeit.
Versuch macht klugt.
Das einzige, was ich bäruchte, wäre ein Ansatz, wie man aus vorgegeben Punkten die dazugehörige Funktionsgleichung ermittelt.
Eine allgemeine Formel, die es mit einer Reihe von Punkten schafft.
In der Schule waren es meist ja nur Vorgaben wie:
Funktion 3. Grades und der Punkt sowieso und sowieso liegen darauf.
Die zweite Ableitung hat eine Nullstelle bei ...
Aber das wird nicht reichen. Wer bestimmt, ob sie dritten oder zweiten oder n-ten Grades ist?
Wie kann ich eine Bezierkurze ermitteln, die durch sagen wir 8 von 10 Punkten führt und wo die anderen beiden nahe dabei liegen?
Code: Alles auswählen
; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=2515&highlight=
; Author: Rob (updated for PB4.00 by blbltheworm)
; Date: 09. October 2003
; OS: Windows
; Demo: Yes
; Bezier-Kurven Funktion:
; Im Beispiel: Mit der Maus die Punkte bewegen, mit der linken Maustaste den aktiven Punkt ändern.
cw = RGB(255,255,255)
cr = RGB(255,0,0)
Procedure bezier(x1,y1,x2,y2,x3,y3,x4,y4,color)
oldx=x1
oldy=y1
cx.f=3*(x2-x1)
bx.f=3*(x3-x2)-cx
ax.f=x4-x1-cx-bx
cy.f=3*(y2-y1)
by.f=3*(y3-y2)-cy
ay.f=y4-y1-cy-by
While i.f < 1
i+0.05
x=((ax*i+bx)*i+cx)*i+x1
y=((ay*i+by)*i+cy)*i+y1
If i>0: LineXY(oldx,oldy,x,y,color) : EndIf
oldx=x
oldy=y
Wend
EndProcedure
InitSprite()
InitKeyboard()
InitMouse()
OpenScreen(640,480,16,"Bezier")
x1=0 : y1=0
x2=640 : y2=0
x3=0 : y3=480
x4=640 : y4=480
key = 1
Repeat
ExamineKeyboard()
ExamineMouse()
; Punkt wechseln
If MouseButton(1) And mousepush=0 ; Punkte rotieren: 1-4
key = (key % 4) + 1
If key=1 : MouseLocate(x1,y1) : EndIf
If key=2 : MouseLocate(x2,y2) : EndIf
If key=3 : MouseLocate(x3,y3) : EndIf
If key=4 : MouseLocate(x4,y4) : EndIf
EndIf
mousepush=MouseButton(1)
StartDrawing(ScreenOutput())
DrawingMode(4)
; Punkte zeichnen
If key=1 : x1=MouseX() : y1=MouseY() : Circle(x1,y1,5,cr) : Else : Circle(x1,y1,5,cw) : EndIf
If key=2 : x2=MouseX() : y2=MouseY() : Circle(x2,y2,5,cr) : Else : Circle(x2,y2,5,cw) : EndIf
If key=3 : x3=MouseX() : y3=MouseY() : Circle(x3,y3,5,cr) : Else : Circle(x3,y3,5,cw) : EndIf
If key=4 : x4=MouseX() : y4=MouseY() : Circle(x4,y4,5,cr) : Else : Circle(x4,y4,5,cw) : EndIf
; Bezierkurve zeichnen
bezier(x1,y1,x2,y2,x3,y3,x4,y4,cw)
StopDrawing()
FlipBuffers()
ClearScreen(RGB(0,0,0))
Until KeyboardPushed(1)
Code: Alles auswählen
; http://www.freesoundeditor.com/downloads/sources/beziergadget.pb
; Author: ZapMan (updated for PB 4.00 by Andre)
; Date: 14. November 2004
; OS: Windows
; Demo: No
; Bezier Gadget
; By Zapman
;
; Développé avec PureBasic 3.90
;
; Pas de bibliothcque nécessaire
;
; Comme son nom le laisse supposer, Bezier Gadget permet de créer
; et de gérer un "simili" gadget de type "courbe de Bezier".
;
; Le calcul de la courbe est basé sur une procédure absolument somptueuse
; signée Rob (du Robsite). Les matheux apprécieront sans doute.

Kinder an die Macht http://scratch.mit.edu/
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
Jede Kurvenform ist mit Sinusfunktionen näherungsweise realisierbar.
Aber, für jede einzelne Frequenz fällt eine Sinusfunktion an.
Bei einem Frequenzband von 0-22kHz wären das 22000xsinus
und damit sind noch nichtmal alle nichtganzzahligen Frequenzanteile
berücksichtigt.
Jetzt rechne mal hoch wieviel Rechnerzeit man benötigen würde um das Format zu en/decodieren.
Außerdem würdest du keinerlei Gewinn machen der den Aufwand rechtfertigt da heutige DA-Wandler sowieso nur mit einer puren Amplitude was anfangen können.
Aber, für jede einzelne Frequenz fällt eine Sinusfunktion an.
Bei einem Frequenzband von 0-22kHz wären das 22000xsinus
und damit sind noch nichtmal alle nichtganzzahligen Frequenzanteile
berücksichtigt.
Jetzt rechne mal hoch wieviel Rechnerzeit man benötigen würde um das Format zu en/decodieren.
Außerdem würdest du keinerlei Gewinn machen der den Aufwand rechtfertigt da heutige DA-Wandler sowieso nur mit einer puren Amplitude was anfangen können.
I´a dllfreak2001
Alter Pessimist.
Ich hab nie gesagt, dass ich eine verlustfreie Kompression erreichen möchte.
Ich würde halt nur gern eine einfache Art der Berechnung finden, wenn ich mehrere Punkte im Raum habe, wie ich möglichst viele davon schneide mit einer Funktionsgleichung.
Da hatte ich nur gemeint, dass die Bezier-Kurzen sicherlich ganz brauchbar sind.
http://de.wikipedia.org/wiki/Kurvendiskussion
Irgendwas in der Richtung vielleicht:
http://de.wikipedia.org/wiki/Newton-Verfahren

Es muss nicht perfekt sein. Aber wenn es zum Beispiel schon für Sinustöne geeignet wäre und nach einer Änderung des Tones diese Änderung bemerkt, wäre es ein Erfolg.
a 440 Hz
a' 880 Hz
...
Encodieren dauert immer länger als decodieren.
Weil man ja noch nicht mal den Umfang der benötigten Informationen kennt. So muss bei einer RAR-Datei ja auch erstmal eine Liste mit Dateien und deren Inhalt erstellt werden ...
Und beim entpackten, ist diese Liste ja schon klar.
Mein Pentium 150 brauchte für 1 Minute MP3-Kodierung 3 Minuten
dekodieren hatte er in einer halben Minute pro Minute Musik geschafft.
Bei Audiokompression ist es dann ja auch noch wichtig, für welchen Zweck sie verwendet werden soll.
Für VoIP zum Beispiel wäre ein Verfahren, was die gesamte Musikdatei betrachtet quatsch. Für einen MP3-Player aber denkbar.
Das Problem ist auch bei den Fotoapperaten. Die JPEGs sind von der Datenraten etweder sehr groß oder sehen wirklich mies aus.
Obwohl man beim Speichern in einem Bilbbearbeitungsprogramm bei gleicher Datei-Größe bessere Ergebnisse erzielen kann.
Wieso? Weil der Prozessor im Fotoapperat nicht so leistungsfähig ist und damit eine angemessene Speicherzeit erreicht wird, müssen halt abstriche gemacht werden.
Wenn erst einmal der mathematische Hintergrund klar ist, kann man sich immer noch um die Performance Gedanken machen.
Aber von vornherrein gleich alles abtun ...
Als MP3 entwickelt worden ist in den 80er gab es auch noch keine tragbaren Geräte, die in der Lage gewesen wären, diese Rechenoperationen schnell genug in angemessener Zeit zu vollführen.
Und trotzdem wurde daran geforscht.
Selbst wenn man für das encoden 10 Rechner bräuchte, aber dafür nur 1 Prozent von einem 100 MHz Rechner zum dekodieren, lohnt sich das doch. Man kann ja auch HDTV-Kinofilme auf DVD kaufen.
Und die laufen auch schnell genug, selbst wenn die Technik zu Hause nicht ausreichen würde, um Fluch der Karibik 3 selbst zu filmen, zu animieren und die Darsteller zu bezahlen.
Videospiele benötigen meist 3 Jahre, bis sie fertig sind, wer spielt schon so lange, bis er es durch hat?
Bücher werden auch nicht an einem Tag geschrieben und doch gibt es Leseratten, die HarryPotter in 8 Stunden durch hatten.
Aber du verstehst sicherlich, was ich damit sagen möchte
Ich hab nie gesagt, dass ich eine verlustfreie Kompression erreichen möchte.
Ich würde halt nur gern eine einfache Art der Berechnung finden, wenn ich mehrere Punkte im Raum habe, wie ich möglichst viele davon schneide mit einer Funktionsgleichung.
Da hatte ich nur gemeint, dass die Bezier-Kurzen sicherlich ganz brauchbar sind.
http://de.wikipedia.org/wiki/Kurvendiskussion
Irgendwas in der Richtung vielleicht:
http://de.wikipedia.org/wiki/Newton-Verfahren

Es muss nicht perfekt sein. Aber wenn es zum Beispiel schon für Sinustöne geeignet wäre und nach einer Änderung des Tones diese Änderung bemerkt, wäre es ein Erfolg.
a 440 Hz
a' 880 Hz
...
Encodieren dauert immer länger als decodieren.
Weil man ja noch nicht mal den Umfang der benötigten Informationen kennt. So muss bei einer RAR-Datei ja auch erstmal eine Liste mit Dateien und deren Inhalt erstellt werden ...
Und beim entpackten, ist diese Liste ja schon klar.
Mein Pentium 150 brauchte für 1 Minute MP3-Kodierung 3 Minuten
dekodieren hatte er in einer halben Minute pro Minute Musik geschafft.
Bei Audiokompression ist es dann ja auch noch wichtig, für welchen Zweck sie verwendet werden soll.
Für VoIP zum Beispiel wäre ein Verfahren, was die gesamte Musikdatei betrachtet quatsch. Für einen MP3-Player aber denkbar.
Das Problem ist auch bei den Fotoapperaten. Die JPEGs sind von der Datenraten etweder sehr groß oder sehen wirklich mies aus.
Obwohl man beim Speichern in einem Bilbbearbeitungsprogramm bei gleicher Datei-Größe bessere Ergebnisse erzielen kann.
Wieso? Weil der Prozessor im Fotoapperat nicht so leistungsfähig ist und damit eine angemessene Speicherzeit erreicht wird, müssen halt abstriche gemacht werden.
Wenn erst einmal der mathematische Hintergrund klar ist, kann man sich immer noch um die Performance Gedanken machen.
Aber von vornherrein gleich alles abtun ...
Als MP3 entwickelt worden ist in den 80er gab es auch noch keine tragbaren Geräte, die in der Lage gewesen wären, diese Rechenoperationen schnell genug in angemessener Zeit zu vollführen.
Und trotzdem wurde daran geforscht.
Selbst wenn man für das encoden 10 Rechner bräuchte, aber dafür nur 1 Prozent von einem 100 MHz Rechner zum dekodieren, lohnt sich das doch. Man kann ja auch HDTV-Kinofilme auf DVD kaufen.
Und die laufen auch schnell genug, selbst wenn die Technik zu Hause nicht ausreichen würde, um Fluch der Karibik 3 selbst zu filmen, zu animieren und die Darsteller zu bezahlen.
Videospiele benötigen meist 3 Jahre, bis sie fertig sind, wer spielt schon so lange, bis er es durch hat?
Bücher werden auch nicht an einem Tag geschrieben und doch gibt es Leseratten, die HarryPotter in 8 Stunden durch hatten.
Aber du verstehst sicherlich, was ich damit sagen möchte

Kinder an die Macht http://scratch.mit.edu/
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
Ne, ein Musikstück besteht nicht aus idealen Bezierkurven sondern
wenn du den Amplitudengang über die Zeit betrachtest sieht das eher
wie ein bunt zusammengewürfelter Müll aus.
Außerdem wage ich zu behaupten das die Berechnung einer Bezierkurve nicht flotter sein wird als die Methode über Fourier-Synthese.
Der Qualitätsverlust wird bei alltagtauglicher Rechnerlast derart stark
das man zwar einfachen Techno ordentlich hören kann aber mehr auch nicht. Vokalmusik wirkt dann unnatürlich und fremdartig, weil bestimmte
Frequenzanteile fehlen.
Wie gesagt, gängige DA-Wandler können nur mit Amplituden wirklich etwas anfangen und die können bis weilen auch nicht mehr als 24Bit verarbeiten (im Heimbereich).
wenn du den Amplitudengang über die Zeit betrachtest sieht das eher
wie ein bunt zusammengewürfelter Müll aus.
Außerdem wage ich zu behaupten das die Berechnung einer Bezierkurve nicht flotter sein wird als die Methode über Fourier-Synthese.
Der Qualitätsverlust wird bei alltagtauglicher Rechnerlast derart stark
das man zwar einfachen Techno ordentlich hören kann aber mehr auch nicht. Vokalmusik wirkt dann unnatürlich und fremdartig, weil bestimmte
Frequenzanteile fehlen.
Wie gesagt, gängige DA-Wandler können nur mit Amplituden wirklich etwas anfangen und die können bis weilen auch nicht mehr als 24Bit verarbeiten (im Heimbereich).
I´a dllfreak2001
Ja gut.
Aber nun weiß ich immer noch nicht, wie ich aus ein paar Punkten eine Kurve berechnen kann.
Egal ob für Musik oder Vektorgrafiken. Haste da ne Formel oder willste mir nur sagen, dass es alles keinen Sinn hat
Aber nun weiß ich immer noch nicht, wie ich aus ein paar Punkten eine Kurve berechnen kann.
Egal ob für Musik oder Vektorgrafiken. Haste da ne Formel oder willste mir nur sagen, dass es alles keinen Sinn hat

Kinder an die Macht http://scratch.mit.edu/