Verfremden von Waves

Von: , Frage gestellt am Mo, 7. Mai 2001

Hallo Leute,

welche mathematischen Tricks kann man so mit Sprachdateien machen, wenn sie mir als .wav vorliegen. Mir schwebt da z.B. "Roboter"-Stimme, Veränderung der Stimm-Frequenz (ohne an der Abspielgeschwindigkeit / Dauer des Samples was zu ändern) oder bestimmte Frequenzen herausrechnen. Oder sind das so Sachen, die software- / rechentechnisch gar nicht möglich sind und die Soundkarte das per Hardware (Frequenzweichen, etc) macht?

Danke, Ebenezer Scrooge

11 Antworten zu dieser Frage

  1. Antwort von nach 20 Stunden 0 hilfreich
    Re: Verfremden von Waves

    Hallo Leute,

    welche mathematischen Tricks kann man so mit Sprachdateien
    machen, wenn sie mir als .wav vorliegen. Mir schwebt da z.B.
    "Roboter"-Stimme, Veränderung der Stimm-Frequenz (ohne an der
    Abspielgeschwindigkeit / Dauer des Samples was zu ändern) oder
    bestimmte Frequenzen herausrechnen. Oder sind das so Sachen,
    die software- / rechentechnisch gar nicht möglich sind und die
    Soundkarte das per Hardware (Frequenzweichen, etc) macht?
    Das würde mich auch saumäßig interessieren! Also, die genaue mathematische Erklärung. Am genialsten wäre natürlich die direkte Veränderung einer .wav-Datei per eigenem Programm (in C oder so...).
    So lowlevel-Funktionen wie makeRobot(waveFile),...

    Bin mal gespannt, ob da irgendjemand was weiss...

    Grüße und auf Antworten wartend,
    Alexander

    • Antwort von nach einem Tag 0 hilfreich
      Re^2: Verfremden von Waves

      Ich danke Alexander für seine Unterstützung des Vorhabens.

      Zur Unterstreichung meiner Ernsthaftigkeit, habe ich mir selbst ein paar Gedanken gemacht.

      1. "Robot": Hier habe ich zumindest eine technische Erklärung. Soviel ich weiss, moduliert man auf dem blechern klingenden Rauschen "einfach" die Stimme auf (wie auch immer das im Detail funktioniert)

      2. Gemeint mit Frequenzänderung ist hier die Ausgabe eines typischen "Terroristenanrufes". Dort läuft das Ganze sicherlich hardwaremäßig ab, wegen Echtzeit. Hier sind die Elektrotechniker und Physiker gefragt. Denn die Funktionsweise eines solchen Gerätes gibt sicher Anhaltspunkte für die Softwarelösung. Goldwave hat bspw den Dopplereffekt im Angebot, damit wird das Sample aber auch kürzer / länger.

      Ich als Hobbyprogrammierer (bin selbst kein Informatiker) hab' mal ein wenig mit Pascal und einigen Waves herumgespielt und folgendes ausprobiert:
      - zunächst habe ich 100 ms Stückchen auf, na sagen wir 80ms runtergequetscht und die 20ms Lücken mit Nullen gefüllt, das gab aber häßliches Knacken (ich vermute wegen der Sprünge, Möglichkeit: keine Nullen, sondern Endpunkt und Anfangspunkt linear verbinden)
      - der andere Weg: hochstrecken der 100ms auf 120ms und anschließendes Weglassen bestimmter Teile gab auch keinen tollen Effekt

      3. An den folgenden Überlegungung zum Thema Frequenzen herausrechnen bin ich bereits gescheitert. Wie mische ich 2 Waves, so dass sie sich ungestört überlagern? Und anders: Wenn ich eine x Hz Ausgangsfrequenz als Wave habe, wie schaffe ich es, dass genau diese Frequenz aus dem Musikwave verstummt (subtrahieren, dividieren, logische Verknüfung)

      Das ganze find ich wahnsinnig interessant, aber irgendwie habe ich keinen konkreten Anhaltspunkt für die mathematischen Sachen, die da möglicherweise dahinterstehen.

      Ich hoffe weiterhin auf spannende Vorschläge

      Ebenezer [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

      • Antwort von nach 6 Tagen 0 hilfreich
        Re^3: Verfremden von Waves

        3. An den folgenden Überlegungung zum Thema Frequenzen
        herausrechnen bin ich bereits gescheitert. Wie mische ich 2
        Waves, so dass sie sich ungestört überlagern?
        Hi!
        Das mit dem Ueberlagern hab ich auch schon mal gemacht.
        wir nehmen jetzt mal der Einfachheit halber eine 8bit mono wav-Datei. Die Daten der Wav-Datei sind ja bekanntlich die digital umgewandelte Schallwelle. Wenn man sich das mal an einer Sinuskurve anguckt, dann ist

        255 o
        o o
        128 - o o o -----
        o o
        0 o

        Der ASCII-Wert 128 (oder 127 bin mir nicht ganz sicher.) steht also in einer Datei, in der nichts aufgenommen wurde.

        So jetzt haben wir zwei Schallwellen.
        Wir nehmen uns jeweils ein Byte mit dem ASCII-Wert X1,X2 aus den dateien datei1 und datei2.
        Pseudo-Code:

        X1=X1-128;
        X2=X2-128;
        X3=(X1+X2)/2;
        X3=X3=128;

        Als Ergebnis bekommst du X3 und tust das in die asugabedatei datei3. Dat machst du dann mit jedem Byte aus dem Datenbereich der Wav-Dateien. Nimm am betsen zwei gleichlange dateien.

        Nur noch mal zur erklaerung: nimmst du eine sprach-wav-datei und vermischst die mit einer leeren datei dann kommt die sprachdatei aber mit halbierter lautstaerke raus. (Amplitude der Sprachwelle entspricht der Lautstaerke)

  2. Antwort von nach einem Tag 0 hilfreich
    Re: Verfremden von Waves

    Also, nochmal ganz kurz:

    Ich studiere nämlich Physik und habe zumindest die Möglichkeit, die Theorie zu erfragen, da ich schon ewig Programmiere wäre die Umsetzung vielleicht auch nicht soooo... verzwickt!

    Aber noch eine Frage: Du hast schon mit Waves herumexperimentiert, sagst Du? Hast Du einfach die *.wav-Datei als binäre Datei geladen und dann einzeln moduliert???

    Weisst Du auch, dass *.wav-Files in Blöcke unterteilt sind??
    Du darfst nur den Datenblock modulieren, sonst verlierst Du den Header und dann war's das mit Deiner Wave-Datei. Ich schau' nochmal genau nach und mail Dir genau den Aufbau, okay?

    Ich glaub', ich frag' auch gleich heute in der Uni mal meinen Professor...

    Gruß
    Alexander

    • Antwort von nach 2 Tagen 0 hilfreich
      Re^2: Verfremden von Waves

      Hallo Alexander,

      Ich hab' irgendwo den Aufbau des Headers gehabt, und wenn das bekannt ist, ist es ja kein Problem mehr, die Anreihung der Amplituden in irgendeiner Weise zu bearbeiten (Für kleine Experimente war es natürlich sinnvoll, einfach erstmal mit 8 Bit, Mono zu arbeiten, denn da erspart man sich den Umrechnungsaufwand.)

      Meine "Experimente" beschränkten sich im wesentlichen darauf, den Header zu überspringen (ich wußte ja, welche Art von Waves ich reinschicke) und die sequentell eingelesenen Bytes irgendwie anders wieder zu speichern.

      Also auch nach meinen Pascal-Orgien war sie noch als Wave brauchbar von Goldwave lesbar, nur das Ergebnis war halt nicht so ganz das, was ich mir anfangs vorgstellt hatte. Aber das Interesse der Materie hat es schon geweckt und ich sehe mich auch in Sachen Mathe, Physik, Informatik als interessierter Fortgeschrittener, so dass wir gleich voll einsteigen könnten.

      Wo bleiben die anderen Interessierten? Sonst könnten wir uns ja gleich über EMail unterhalten.

      Tschüß,
      Ralph / Ebenezer


      Ich werd' nochmal schauen, wo ich den Header "Wave" habe und werde es dann hier mal einstellen. [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

  3. Antwort von nach 3 Tagen 0 hilfreich
    Re: Verfremden von Waves

    welche mathematischen Tricks kann man so mit Sprachdateien
    machen, wenn sie mir als .wav vorliegen. Mir schwebt da z.B.
    "Roboter"-Stimme, Veränderung der Stimm-Frequenz (ohne an der
    Abspielgeschwindigkeit / Dauer des Samples was zu ändern) oder
    bestimmte Frequenzen herausrechnen. Oder sind das so Sachen,
    die software- / rechentechnisch gar nicht möglich sind und die
    Soundkarte das per Hardware (Frequenzweichen, etc) macht?
    vor mittlerweile ueber einem jahrzehnt gab es mal nen recht guten grundlagenartikel zum thema digitale filter in der c't...

    c't 12/87, Seite 92

    wenn ich mich recht erinnere, gab es dazu dann auch noch die sourcen in 68k assembler zum abtippen fuer den kat-ce (in realtime natuerlich), einen 68008 einplatinencomputer zum selberloeten...
    ja, das waren noch zeiten, da war die c't noch das magazin fuer leute mit der lizenz zum loeten und jeder zweite artikel war "mit beiden armen tief im system"

    joachim, der schon seit einigen tagen c't liest...

    • Antwort von nach 3 Tagen 0 hilfreich
      Re^2: Verfremden von Waves

      Die c't ist doch noch immer recht systemnah. Gegenüber dem einstigen Pionier "Chip", der ja schon seit längerer Zeit nur noch Berichte für die Masse schreibt (Kaufempfehlungen, Tips und Tricks zu Windows & Co.,...). Und das "PC Magazin" könnte auch mal wieder zu seinen "DOS international" Wurzeln zurückkehren. (einzig PC Underground ist von Interesse)

      Die c't gibts ja auch auf c't ROM, leider erst ab 1990. Aber ab dem Zeitpunkt hab' ich sie ja eigentlich da... ich werd' mal mein Archiv-Orakel befragen. vor mittlerweile ueber einem jahrzehnt gab es mal nen recht
      guten grundlagenartikel zum thema digitale filter in der
      c't...

      c't 12/87, Seite 92

      wenn ich mich recht erinnere, gab es dazu dann auch noch die
      sourcen in 68k assembler zum abtippen fuer den kat-ce (in
      realtime natuerlich), einen 68008 einplatinencomputer zum
      selberloeten...
      ja, das waren noch zeiten, da war die c't noch das magazin
      fuer leute mit der lizenz zum loeten und jeder zweite artikel
      war "mit beiden armen tief im system"

      joachim, der schon seit einigen tagen c't liest...

  4. Antwort von nach 3 Tagen 0 hilfreich
    Re: Verfremden von Waves

    Hallo Leute,

    welche mathematischen Tricks kann man so mit Sprachdateien
    machen, wenn sie mir als .wav vorliegen.
    Zunächst mußt Du eine reine Binärdatei haben, dann kannst Du aber praktisch jede beliebige Manipulation vornehmen. Die Mathematik dazu ist aber nicht ganz trivial. Die bekanntesten Methoden dazu dürften sein:

    1. Digitale Filter. Damit lassen sich alle bekannten Filterfunktionen mathematisch simulieren. Sie werden gerne in Echtzeitanwendungen eingesetzt.

    2. Fourier-Transformation. Das Sample wird zunächst in den Frequenzbereich transformiert, also in sein komplexes Frequenzpektrum. Im Frequenzbereich lassen sich die einzelnen Frequenzbereiche gut bearbeiten. Anschließend wird das komplexe Spektrum wieder in eine reale Zeitfunktion rücktransformiert.

    Zu beiden Verfahren sollte es Unmengen an Literatur geben, insbesondere im Zusammenhang mit der Programmierung von Signalprozessoren. Mir schwebt da z.B.
    "Roboter"-Stimme, Veränderung der Stimm-Frequenz (ohne an der
    Abspielgeschwindigkeit / Dauer des Samples was zu ändern) oder
    Das ist das Prinzip des Harmonizers. Das kann man natürlich auch simulieren. Du legst die Daten in einem Ringpuffer von z.B. 20 ms Länge ab, in den die Daten zyklisch reingeschrieben werden. Aus diesem Puffer werden die Daten dann ebenfalls zyklisch, jedoch mit einer anderen Abtastrate ausgelesen. Ggf. muß anschließend die Abtastrate wieder auf den ursprünglichen Wert zurückgerechnet werden. Kritisch ist noch der Moment, wenn sich Lese- und Schreibpointer gegenseitig "überholen". Diese Unstetigkeitsstelle im Lesesignal macht sich durch einen Knack bemerkbar. Das kann man ausbügeln, indem man den Puffer nicht einfach überschreibt, sondern eine weiche Übergangszone schafft, in der neue und alte Werte vermischt sind und der Anteil der alten Werte langsam auf null sinkt. bestimmte Frequenzen herausrechnen. Oder sind das so Sachen,
    die software- / rechentechnisch gar nicht möglich sind und die
    Soundkarte das per Hardware (Frequenzweichen, etc) macht?

    Das ist mit den o.a. Verfahren kein Problem. Wenn Du aber reale dreidimensionale akustische Filterfunktionen simulieren willst, z.B. das Klangverhalten eines Konzertsaales, kann es beliebig kompliziert werden.

    Jörg

    • Antwort von nach 3 Tagen 0 hilfreich
      Re^2: Verfremden von Waves

      Zunächst mußt Du eine reine Binärdatei haben, dann kannst Du
      aber praktisch jede beliebige Manipulation vornehmen. Die
      Mathematik dazu ist aber nicht ganz trivial. Die bekanntesten
      Methoden dazu dürften sein:
      Nun, daran solls nicht scheitern, ich habe mal den Header rausgesucht:

      00h-03h  4 Bytes  String "RIFF"
      04h-07h  4        Dateilänge
      08h-0Bh  4        String "WAVE"
      0Ch-0Fh  4        String "FMT "
      10h-13h  4        Datenlänge
      13h-15h  2        Format: 1=Mono; 2=Stereo
      16h-17h  2        Anzahl der Kanäle
      18h-1Bh  4        Samplerate in Hz
      1Ch-1Fh  4        Anzahl Bytes je Sekunde
      20h-21h  2        Bytes je Sample --> 1=8Bit Mono
                                            2=8Bit Stereo oder 16Bit Mono
                                            4=16Bit Stereo
      22h-23h  2        Bit je Sample
      24h-27h  4        String "DATA"
      28h-...  ...      An hier kommen die Daten
      

      Ich hoffe, mit diesen Infos kann ich einige interessierte noch dazu bewegen, ein wenig mit den Sounddateien zu experimentieren. 1. Digitale Filter. Damit lassen sich alle bekannten
      Filterfunktionen mathematisch simulieren. Sie werden gerne in
      Echtzeitanwendungen eingesetzt.
      redest Du hier von Hardwarelösungen? 2. Fourier-Transformation. Das Sample wird zunächst in den
      Frequenzbereich transformiert, also in sein komplexes
      Frequenzpektrum. Im Frequenzbereich lassen sich die einzelnen
      Frequenzbereiche gut bearbeiten. Anschließend wird das
      komplexe Spektrum wieder in eine reale Zeitfunktion
      rücktransformiert.
      Moment, da durchschießt es mich! Das ist doch auch ein Teil der mp3 Kompression, oder? Also ist es nicht so einfach möglich, eine Trägerfreguenz mit bekannter Hertzzahl einfach durch lgische Operationen mit meiner Wave-Datei zu verknüpfen? Zu beiden Verfahren sollte es Unmengen an Literatur geben,
      insbesondere im Zusammenhang mit der Programmierung von
      Signalprozessoren.
      Oder kennst Du auch gute Links (irgendwelche Universitäten, Fraunhofer, Working Papers im Netz,... Das ist das Prinzip des Harmonizers. Das kann man natürlich
      auch simulieren. Du legst die Daten in einem Ringpuffer von
      z.B. 20 ms Länge ab, in den die Daten zyklisch reingeschrieben
      werden. Aus diesem Puffer werden die Daten dann ebenfalls
      zyklisch, jedoch mit einer anderen Abtastrate ausgelesen. Ggf.
      muß anschließend die Abtastrate wieder auf den ursprünglichen
      Wert zurückgerechnet werden. Kritisch ist noch der Moment,
      wenn sich Lese- und Schreibpointer gegenseitig "überholen".
      Diese Unstetigkeitsstelle im Lesesignal macht sich durch einen
      Knack bemerkbar.
      Nicht ganz so elegent aber vom Prinzip her hab' ichs ja mal probiert. Ich les' mal weiter, jetzt scheint es spannend zu werden ;-) Das kann man ausbügeln, indem man den Puffer
      nicht einfach überschreibt, sondern eine weiche Übergangszone
      schafft, in der neue und alte Werte vermischt sind und der
      Anteil der alten Werte langsam auf null sinkt.
      Das hab' ich jetzt nicht gleich zu 100% verstanden, aber ich lasse mir mal Deine Ausführungen durch den Kopf gehen, prinzipiell ist mir klar, was Du meinst . Ich danke Dir für Deine Tipps reale dreidimensionale akustische Filterfunktionen simulieren
      willst, z.B. das Klangverhalten eines Konzertsaales, kann es
      beliebig kompliziert werden.
      Herr im Himmel, jetzt wird es richtig professionel

      Ich dank Dir für die sehr guten Anregungen, du kannst hier gern noch mehr darüber schreiben. Das sind genau die Denkanstöße, die ich gesucht habe.

      Tschüß
      Ralph / Ebenezer Scrooge



Keine passende Antwort gefunden? Jetzt eigene Frage stellen!