HILFE!! Short-Werte ... Dringend!

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

JPD

Betreff: HILFE!! Short-Werte ... Dringend!

BeitragDo, Jun 03, 2004 21:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich hab vorher schon geschrieben, aber es versteht glaub keiner was ich möchte.

Ich hab ne Audiodatei als RAW-File ... also ohne Header. Davon hab ich 2 Stück. Wenn ich jetzt beide zu ner Mono-Datei machen möchte, benötige ich die Hälfte der Gesamtamplitude. Das geht meiner Meinung nach doch mit Wert/2 ... .
Es handelt sich um Short-Werte. Wenn ich mal 2 nehme, funktioniert das ganze perfekt ... nur Übersteuert. Teile ich durch 2 hab ich nur noch entweder 0 oder vollanschlag (32768) ... Mit 8-Bit also Byte funktioniert es mit dem durch 2 Teilen, nur bei 16-Bit leider nicht ...

An was liegt das? Währe für jede Antwort dankbar 8) ...

mfg JPD

JPD

Betreff: Was ist falsch an der ganzen Sache?

BeitragDo, Jun 03, 2004 22:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Print "Test"
Print " "
filein = ReadFile("C:\test.raw") ;16-Bit Audio RAW
fileout = WriteFile("C:\neu.raw")
wert1 = ReadShort(filein)
x = 10
Print "Teilen durch " + x
wert1 = wert1 / x
WriteShort(fileout, wert1)
Print " "
Print "Gespeichert als c:\neu.raw ..."


wenn ich anstatt / x ... * x einsetze tuts .. halt total übersteuert ...
ich kann mir das selber nicht mehr erklären ...

Vertex

BeitragDo, Jun 03, 2004 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
sollte nicht die amplitude des rechten sowie des linken lautsprechers nur auf ein byte verteilt sein? also zweimal readbyte()?
mfg olli

JPD

BeitragDo, Jun 03, 2004 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein ... das ist ne Mono-Datei mit 16 Bit ... also Sample an Sample mit 16 Bit ... wenn ich das ganze Multipliziere tuts ja ... nur wenn ich das ganze Dividiere spinnt das ganze total ...

BladeRunner

Moderator

BeitragFr, Jun 04, 2004 9:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach aus x und wert1 floats und es wird gehen.
Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

JPD

BeitragFr, Jun 04, 2004 10:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Irgendwie gehts mit dem auch net ... frag mich bitte nicht, warum das net geht ... bei 8 Bit gehts doch auch ...

Ich frag mich bloß, wenn ich doch 100 durch 10 Teil kommt 10 raus und nicht 44 oder so und wenn ich 3200 durch den 10 Teil 320 und mein Proggy schreibt was mit 32768 ... also irgendwas stimmt mit der Funktion beim Teilen nicht ...

Code: [AUSKLAPPEN]

summe# = ReadShort(filein)
Teiler1# = 10
summe2# = Float(summe#)/Float(Teiler1#)
ausgabe# = summe2# ;+ sonstiges ...   :shock:
WriteShort(dateiausgabe,ausgabe#)


nun ja ... was ist da falsch??? 8)

Noch was ... wenn ich das ganze 1:1 Übertrage, also ohne Teilen, kommen die Negativwerte mit. Wenn ich jetzt durch 2 Teile, spinnt auch einiges mit den Negativwerten ...

mfg JPD

Jan_

Ehemaliger Admin

BeitragFr, Jun 04, 2004 10:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
summe# = ReadShort(filein)
summe2# = summe#/2.0
ausgabe# = summe2#
Debulog "Eingegangen: " +summe#
Debulog summe# + " / 2 = "+  summe2#
WriteShort(dateiausgabe,ausgabe#)


was kommt heraus?
between angels and insects

JPD

BeitragFr, Jun 04, 2004 11:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun ja ... der gleiche Mist ...

es ist nun so:

wenn ich angebe, alle Werte über 0 sollen weggelassen werden passiert garnichts ...

geb ich aber an:
Code: [AUSKLAPPEN]

if summe# > 32768 summe# = 0


dann nimmt er mir nur die positiven Teile !?!?

Ich dachte bei 16-Bit würde man mit -32768 und + 32768 rechnen, oder rechnet man von 0 - 65536 ??
Ich glaube daran scheitert das ganze ... BlitzBasic ließt glaub mein Shorts irgendwie anderst ein, entweder schon mit dem Nullpunkt oder von 0-65536 ... irgendwas stimmt hier noch nicht ...

Jan_

Ehemaliger Admin

BeitragFr, Jun 04, 2004 11:03
Antworten mit Zitat
Benutzer-Profile anzeigen
dann machs doch selber, 2x read byte, dann nur noch rechnen!
between angels and insects

JPD

BeitragFr, Jun 04, 2004 11:41
Antworten mit Zitat
Benutzer-Profile anzeigen
2 mal Byte? Die 2 Byte ergeben doch den Short-Wert ...

kann es sein, dass wenn BlitzBasic nen negativen Shortwert teilt, eigentlich malnimmt ?? Also 3000 / 2 = 1500 und -3000 / 2 = -6000 .... oder so?

Es ist so ... ich habe es hingebracht mit durch 2 Teilen, nur musste ich da wieder nach dem Teilen der negativwerte wieder ca. 64... hinzuaddieren ... was mir seltsam vorkommt ...

Ich muss das noch irgendwie rauskriegen ... es kann doch nicht so schwer sein Shocked

Mfg JPD

JPD

BeitragFr, Jun 04, 2004 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ahhhhhh!!! Shocked Shocked Shocked Shocked Shocked Shocked

0 = 65536 Ich spinn doch net!?!?
-1 = 65535

Question Question Question Question

Hä? what soll dat?

Jan_

Ehemaliger Admin

BeitragFr, Jun 04, 2004 11:48
Antworten mit Zitat
Benutzer-Profile anzeigen
?

ich glaube, wir kennen dein prob nicht!
schicke uns einfach deine Datei, und erkläre uns, wie es werden soll, danach schauen wir mal!
between angels and insects

JPD

BeitragFr, Jun 04, 2004 11:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch jetzt schon Very Happy Very Happy Very Happy

Alle Werte über 0 werden von 0-32768 gespeichert
Alle Werte unter 0 von 32769-65536 !!!

So und wenn ich jetzt durch 2 teile ist es klar dass nur sche.... rauskommen kann ...

klar? Also ... wenn jemand mit Audiofiles und 16-Bit arbeitet, kann so etwas zum Verhängnis werden ...

Puh Shocked

Jan_

Ehemaliger Admin

BeitragFr, Jun 04, 2004 11:59
Antworten mit Zitat
Benutzer-Profile anzeigen
*0.5 versucht?
between angels and insects

JPD

BeitragFr, Jun 04, 2004 12:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun ja , es ist so wie ich es gedacht habe !! Das müsst ihr euch geben ...

Code: [AUSKLAPPEN]

summe# = ReadShort(filein)
Teiler1# = 3
If (summe# > 32768) And (summe# <65537) Then  summe# = summe# - 65536
summe2# = Float(summe#)/10


Shocked


Nun hab ich auch negativ-Werte! Und jetzt klappt es auch ...

JPD

BeitragFr, Jun 04, 2004 12:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich muss nochmal was sagen ...

hat von euch schon mal jemand nen echten Sinusgenerator geschrieben? Welcher keine Oberwellen im Frequenzspektrum erzeugt? (5 Stunden arbeit) ... ne Amplitudenmodulation (2 Stunden arbeit) ...
Laustärke von 16-Bit-Audiofiles halbieren (10 Stunden) ...

OK, ich habs selber hingebracht ... trotzdem danke erstmal Very Happy

Mfg J.P.D

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group