Mehrere Töne gleichzeitig abspielen

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von -Franky-.

    Neu

    Hi. Keine Ahnung ob die Bass.dll mehrere Frequenzen gleichzeitig abspielen kann ohne das erst das ganze neu berechnet werden muss. Üblicherweise erstellt man mehrere SoundBuffer mit unterschiedlichen Frequenzen die gleichzeitig abgespielt werden können. Um das zusammen mixen hat sich die entsprechende Schnittstelle (WASAPI, DirectSound, MediaFoundation) zu kümmern. Noch einfacher ist es eine oder mehrere Grundfrequenzen zu erstellen und diese per Pitch an die gewünschte Frequenz anzupassen ohne ständig alles selbst neu berechnen zu müssen. Natürlich spielt auch die Phasenlage eine gewisse Rolle wie die gemixte Frequenz wahrgenommen wird.
    Mfg -Franky-

    Neu

    Haudruferzappeltnoch schrieb:

    Also was verstehst du unter "akustisch eine Rolle spielen"?
    Generiere Dir je eine Wave-Sequenz über sagen wir 10 Sekunden mit 2 Frequenzen und verschiedenen Phasenlagen der Frequenzen zueinander.
    Spiele sie nacheinander ab und versuche akustisch, also hörend, einen Unterschied zu erkennen.
    Es gibt keinen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Neu

    Ok, bei nur zwei Frequenzen kann das gut funktionieren, wenn sie nicht zu nah beieinander liegen, macht Sinn.
    Ich sagte ja bereits, wenn ich nur eine Frequenz in der Phase verschiebe, dann ist das logisch. Bei zwei lässt sich das noch gut nachvollziehen, wenn sie nicht annähernd gleich sind.
    Aber bei drei Frequenzen wird es schon kompliziert die richtigen Randbedingungen anzugeben um die Aussage wahr zu machen.

    Ich frag mich wie Noise-Cancelling-Kopfhörer programmiert werden. Das müsste ganz ähnlich laufen: erzeuge die richtigen Frequenzen = höre weniger...aber mehr hören kann man mit den Dingern auch machen, da wird sicherlich auch dynamisch die Phase berücksichtigt der eingehenden Töne.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Neu

    Bei ANC(Active Noise Cancelling) werden zwar gegen Schallwellen verwendet, aber man müsste nicht mal die störenden Geräusche komplett eliminieren, nur soweit abschwächen das sie nicht mehr oder kaum noch warnehmbar sind, wenn es dann kaum warnehmbar ist, wird man es beim Musikhören "überhören". Dazu wird man nicht unbedingt die Phase berücksichtigen müssen. Die Wellen treffen aufeinandern und stören/neutralisieren sich, kommt eher auf die richtige Stärke an, damit man nicht ein störendes Geräusch erzeugt.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DTF“ ()

    Neu

    Doch natürlich, sagen wir der eingehende Schall ist eine normale Sinuswelle. Die Gegenwelle ist identisch, also die sollte auch ungefähr aussehen wie ein Sinus.
    Und wenn man da nun die Phase nicht berücksichtigt, dann ist das Resultat der Amplitude irgendwo zwischen doppelt so laut und weg, alles mögliche. Wie in Post 18 zu sehen.

    Neu

    @tron25 Im Prinzip benötigst Du eine Kombination aus onlinetonegenerator.com/multiple-tone-generator.html und szynalski.com/tone-generator/ Beim ersten kannst Du mehrere feste Frequenzen erzeugen, ein oder ausschalten, Panning und Volume ändern. Beim zweiten kann man die Frequenz über den Schieberegler entsprechend anpassen.

    Edit: Nur der Vollständigkeit halber wie es per DirectSound funktioniert: handmade.network/forums/articles/t/3040-directsound Im Prinzip erstellt man mehrere SoundBuffer und mit den entsprechenden DSBCAPS_-Flags hast Du alles was Du brauchst und kannst Volume, Pitch, Panning entsprechend, und wenn ich mich nicht irre, on the fly anpassen.
    Mfg -Franky-

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „-Franky-“ ()