2009-11-23 15 views
7

Meine Frage ist nicht vollständig programmierbezogen, aber trotzdem denke ich, dass SO der richtige Ort ist, um danach zu fragen.Wie mischt man Audio Samples?

In meinem Programm erzeuge ich einige Audiodaten und speichere den Track in einer WAV-Datei. Alles funktioniert gut mit einem Soundgenerator. Aber jetzt möchte ich weitere Generatoren hinzufügen und die generierten Audiodaten in eine Datei mischen. Leider ist es komplizierter als es auf den ersten Blick scheint. Außerdem fand ich nicht viele nützliche Informationen darüber, wie man einen Satz von Audio-Samples mischt.

Also gibt es jemanden, der mir Ratschläge geben kann?

bearbeiten:

Ich programmiere in C++. Aber das spielt keine Rolle, da ich an der Theorie interessiert war, die hinter dem Mischen von zwei Audiospuren steckt. Das Problem, das ich habe, ist, dass ich die Samples nicht einfach zusammenfassen kann, weil das oft verzerrten Sound erzeugt.

+0

Welche Programmiersprache und Plattform? –

+0

Welche Sprache verwenden Sie? Welche Bibliotheken? Gib noch mehr Details an. – Poindexter

Antwort

6

Ich nehme an, Ihr Problem besteht darin, dass Sie für jede Audioquelle, die Sie hinzufügen, die Pegel verringern müssen.

Wenn die App einem Benutzer die Kontrolle gibt, lassen Sie sie die Ebenen direkt steuern. Hotness ist ihre Verantwortung, nicht deine. Das ist "summierend".

Wenn das Mischen automatisiert ist, you're about to go on a journey. Sie werden wahrscheinlich eine Komprimierung benötigen, wenn nicht eine Einschränkung. (Begrenzung ist eine extreme Version der Kompression.)

Beachten Sie, dass alles, was Sie mit dem Audio (einschließlich Komprimierung und Begrenzung) tun, eine Form der Verzerrung ist, so dass Sie Färbung des Audios haben werden. Ihre Auswahl an Komprimierungs- und Begrenzungsalgorithmen beeinflusst den Klang.

Da Sie das Audio nicht in Echtzeit erzeugen, haben Sie die Möglichkeit, "Mauer" -Begrenzung zu machen. Das liegt daran, dass Sie Vorkenntnisse über die Ebenen haben. Echtzeitbegrenzung ist begrenzter, weil Sie nicht wissen können, was auf Sie zukommt - Sie müssen reaktiv sein.

Ist das Musik, Soundeffekte, Stimmen, was?

Programmierer here beschäftigen sich mit dieser die ganze Zeit.

+0

Danke fürs Raten richtig was ich mit meiner Originalfrage stellen wollte;) – ralle

+0

Es ist ein ziemlich verbreitetes Problem, wie man sich vielleicht vorstellen kann. – Nosredna

+0

Es ist sicherlich, ich habe das gleiche Problem beim Mischen von zwei generierten Sounds in ActionScript 3. Danke für die Links, sieht aus, als hätte ich etwas zu lesen auf Kompressoren! – vitch

0

Sie haben nie gesagt, welche Programmiersprache und Plattform, aber jetzt nehme ich an, Windows mit C#.

http://www.codeplex.com/naudio

Große Open-Source-Bibliothek, die wirklich viel von dem Zeug bedeckt weg von Ihnen während der meisten Audio-Operationen auftreten würde.

5

Das Mischen von Audio-Samples bedeutet, sie zusammenzufügen, das ist alles. In der Regel fügen Sie sie zu einem größeren Datentyp hinzu, sodass Sie einen Überlauf erkennen und die Werte festhalten können, bevor Sie in den Zielpuffer zurückübertragen. Wenn Sie vorher wissen, dass Sie überlaufen werden, können Sie ihre Amplituden vor der Addition skalieren - multiplizieren Sie einfach mit einem Fließkommawert zwischen 0 und 1, wobei Sie wiederum das Problem der Genauigkeit berücksichtigen und vielleicht zuerst in einen größeren Datentyp konvertieren.

Wenn Sie ein bestimmtes Problem haben, das damit nicht in Verbindung gebracht wird, können Sie Ihre ursprüngliche Frage aktualisieren.

+0

Clamping ist hard-limitierend und klingt ziemlich schlecht. Er ist eher geneigt, ein Knie bei dieser Begrenzung zu haben. :-) – Nosredna

+0

Er könnte, aber das ist technisch etwas anderes als das, was er fragte :) – Kylotan

2

schmutzig Mischung aus zwei Proben

mix = (a + b) - a * b * sign(a + b) 
Verwandte Themen