Hat jemand eine Ahnung wo bei 8-Bit-Waves die Nulllinie liegt? Bei 127 oder bei 128?
Und wie sieht es bei 16-Bit-Waves aus? Sind die wirklich asymmetrisch? Klar, dass es so oder so keinen hörbaren unterschied gäbe, aber liegt ein Sample mit dem Wert -32768 überhaupt im definierten Bereich?
Ich habe mal ein paar Samples (8 und 16 Bit) aus meiner Sammlung untersucht, konnte da aber nichts ableiten. Macht fast den Eindruck, als ob jeder einfach frei aus dem Bauch raus macht was er für richtig hält...
Detailfragen zum Wave-Format
Detailfragen zum Wave-Format
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Detailfragen zum Wave-Format
Dafür gibt es extra vorzeichenbehaftete Variablen:
Damit ist auch klar, wo die Nulllinie ist. Und dass dabei eine Assymmetrie entsteht, ist leider unvermeidbar. Notfalls nutzt man einfach den Wert -128 nicht.
Code: Alles auswählen
b.b = 0
Debug PeekA(@b)
b = -128
Debug PeekA(@b)
b = 127
Debug PeekA(@b)
Re: Detailfragen zum Wave-Format
Danke für die Antwort, aber leider verstehe ich nicht, was Du mir mit dem Code sagen willst...
Mein Problem ist, dass in 8-Bit Waves (PCM) der die Samples im Datenblock per Definition je als "unsigned char", also vorzeichenlose Bytes gespeichert werden.
Ich muss zugeben, dass ich hier etwas haarspalterisch bin, aber ich versuche grundsätzlich mich möglichst genau an Spezifikationen zu halten, einfach um möglichst kompatibel zu bleiben. (Da ich bei Musik noch viel mit dem Amiga arbeite ist das auch nicht völlig sinnfrei)
EDIT
Scheinbar gibt es wirklich keinen definierten Nullpunkt bei 8-Bit-Waves, da das Wave-Format ein einziges Chaos ist, welches mehrfach "aufgebohrt" wurde. In der Praxis hat sich aber scheinbar 128 als Nullpunkt durchgesetzt, da man dann einfach mit Signed-Bytes arbeiten kann und nur das Vorzeichen-Bit negieren muss. (@NicTheQuick: Wolltest Du mir das mit Deinem Code sagen?)
Bei 16-Bit-Waves (bzw. generell) gibt es keine Einschränkung betreffs des maximalen negativen Wertes.
Bei Waves mit 8-Bit und 22,05 kHz gibt es je nach Wellenform übrigens hörbare Unterschiede, wenn man "synchron" arbeitet (also einen Wert unter den Tisch fallen lässt). Spätestens ab 16 Bit braucht man aber schon ein sehr gutes Gehör...
EDIT 2
Inzwischen habe ich's in der offiziellen RIFF-Spezifikation von Microsoft gefunden: 128 ist der Nullpunkt!
Mein Problem ist, dass in 8-Bit Waves (PCM) der die Samples im Datenblock per Definition je als "unsigned char", also vorzeichenlose Bytes gespeichert werden.
Ich muss zugeben, dass ich hier etwas haarspalterisch bin, aber ich versuche grundsätzlich mich möglichst genau an Spezifikationen zu halten, einfach um möglichst kompatibel zu bleiben. (Da ich bei Musik noch viel mit dem Amiga arbeite ist das auch nicht völlig sinnfrei)
EDIT
Scheinbar gibt es wirklich keinen definierten Nullpunkt bei 8-Bit-Waves, da das Wave-Format ein einziges Chaos ist, welches mehrfach "aufgebohrt" wurde. In der Praxis hat sich aber scheinbar 128 als Nullpunkt durchgesetzt, da man dann einfach mit Signed-Bytes arbeiten kann und nur das Vorzeichen-Bit negieren muss. (@NicTheQuick: Wolltest Du mir das mit Deinem Code sagen?)
Bei 16-Bit-Waves (bzw. generell) gibt es keine Einschränkung betreffs des maximalen negativen Wertes.
Bei Waves mit 8-Bit und 22,05 kHz gibt es je nach Wellenform übrigens hörbare Unterschiede, wenn man "synchron" arbeitet (also einen Wert unter den Tisch fallen lässt). Spätestens ab 16 Bit braucht man aber schon ein sehr gutes Gehör...
EDIT 2
Inzwischen habe ich's in der offiziellen RIFF-Spezifikation von Microsoft gefunden: 128 ist der Nullpunkt!
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)