Autor Beitrag
Andreas Pfau
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Do 20.03.03 21:59 
Hallo,

wie geht das, dass ich sounds dämpfe? Ich erstelle die PCM-Signale zur Laufzeit, und will, dass ich per Button eine Dämpfung von z.b. 10db zuschalten kann. Um wieviel % muss ich den Spitzenwert des Signals verringern? Oder wie berechnet man das?

_________________
Life is a bad adventure, but the graphic is really good!
MathiasH
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: Fr 21.03.03 16:06 
Hallo Andreas
db ist keine lineare einteilung, d.h., dass es in den oberen frequenzbereichen viel und in den unteren wenig ausmacht.
Auch die berechnung dürfte schwierig sein, da du ja nicht weist, welche Lautsprecher der User hat, wie nah er dran sitzt usw. prinzipiel musste halt das a von a*sin(x*d) verringern um vielleicht 10% oder so

IO-sys/MathiasH

_________________
"Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
Andreas Pfau Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Fr 21.03.03 19:34 
:oops: Das hätte ich dazusagen müssen: Die Signale sollen als eine Art "Digitaler Funktionsgenerator" verwendet werden, also von der Soundkarte abgegriffen werden. Es dürfte keine Rolle spielen, welche Boxen der User hat (OK, die Soundhardware kann auch etwas ausmachen, denke ich).

Deine Formel ist nicht ganz einleuchtend. Könntest du sie mir bitte umformen, also z.B. "EndSpitzenwert=GrundSpitzenwert*DämpfungInDezibel"? Ich will ja nur wissen, wie hoch der Spitzenwert letzendlich ist, nach einer Dämpfung von z.b. 10db. Bzw, es ändert sich doch nur der Spitzenwert, oder? Oder verändert sich etwa auch die Höhe/Tiefe separat?

_________________
Life is a bad adventure, but the graphic is really good!
MathiasH
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: Sa 22.03.03 10:26 
so wie ich mir das vogestellt hatte werden alle amplituden gestaucht, d.h. Höhen und Tiefen werden verkleinert, das a ist bei dir halt dann ein multiplikator für deine funktion: x |-> a* func(x), den höchsten wert kannste ja bei der Generierung der Funktion ermitteln, oder werden die werte nur on demand generiert?

IO-sys/mathiasH

_________________
"Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
Andreas Pfau Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Sa 22.03.03 12:03 
Das läuft ungefähr so:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
const
  Samples = 44100 div 1000 // 1000Hz
var
  Chunk: Pointer;
  I: Integer;
begin
  GetMem(Chunk, Samples * SizeOf(SmallInt));
  For I := 0 To Samples - 1 Do
    PSmallInt(Integer(Chunk) + I * SizeOf(SmallInt))^ := Round(Sin(I / Samples * 2 * Pi) * $7FFFF);

Ich hoffe, du verstesht das, wenn du das noch nie gemacht hast (erzeugt ein Sinus-Signal mit maximaler Amplitude).

Also, wenn ich das jetzt dämpfen will, muss ich das ganze (Amplitude) nur mit z.B. 0.9 multiplizieren (... * $7FFFF * 0.9), oder wie? Und wenn ja, welcher Faktor entspricht welchem db-Wert?

_________________
Life is a bad adventure, but the graphic is really good!
Andreas Pfau Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Sa 22.03.03 14:02 
Juhu! Ich hab's geschafft! Ich habe grade 'ne halbe Stunde gegoogelt, da habe ich die Formel gefunden:
ausblenden Quelltext
1:
2:
dB := 20 * Log10(Ursprungsamplitude / Ausgabeamplitude)
Ausgabeamplitude := Ursprungsamplitude / power(10, dB / 20)


Trutzdem vielen Dank für deine Mitarbeit!

_________________
Life is a bad adventure, but the graphic is really good!
MathiasH
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: Sa 22.03.03 21:24 
ich arbeite grad an nem ähnlichen Projekt, ich denke die fomel werde ich gut gebaruachen können, mein Programm soll ton dateien aller art analysieren können, fft usw

IO-sys/MathiasH

_________________
"Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche