| Autor |
Beitrag |
Andreas Pfau
      
Beiträge: 997
|
Verfasst: 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
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: 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 
      
Beiträge: 997
|
Verfasst: Fr 21.03.03 19:34
 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
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: 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 
      
Beiträge: 997
|
Verfasst: Sa 22.03.03 12:03
Das läuft ungefähr so:
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 
      
Beiträge: 997
|
Verfasst: Sa 22.03.03 14:02
Juhu! Ich hab's geschafft! Ich habe grade 'ne halbe Stunde gegoogelt, da habe ich die Formel gefunden:
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
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: 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
|
|
|