2009-11-23 8 views
7

Ma question n'est pas complètement liée à la programmation, mais je pense que SO est le bon endroit pour poser la question.Comment mixer des échantillons audio?

Dans mon programme, je génère des données audio et enregistre la piste dans un fichier WAV. Tout fonctionne bien avec un générateur de son. Mais maintenant je veux ajouter plus de générateurs et mélanger les données audio générées dans un seul fichier. Malheureusement, c'est plus compliqué qu'il n'y paraît à première vue. En outre, je n'ai pas trouvé beaucoup d'informations utiles sur la façon de mélanger un ensemble d'échantillons audio.

Alors, y a-t-il quelqu'un qui peut me donner des conseils?

modifier:

Je suis la programmation en C++. Mais peu importe, puisque j'étais intéressé par la théorie derrière le mixage de deux pistes audio. Le problème que j'ai est que je ne peux pas simplement résumer les échantillons, car cela produit souvent un son déformé.

+0

Qu'est-ce que le langage de programmation et la plate-forme? –

+0

Quelle langue utilisez-vous? Quelles bibliothèques? Donnez plus de détails. – Poindexter

Répondre

6

Je suppose que votre problème est que pour chaque source audio que vous ajoutez, vous devez baisser les niveaux.

Si l'application donne le contrôle à un utilisateur, laissez-le contrôler directement les niveaux. La hotness est leur responsabilité, pas la vôtre. C'est "sommer".

Si le mélange est automatisé, you're about to go on a journey. Vous aurez probablement besoin de compression, voire de limitation. (La limitation est une version extrême de la compression.)

Notez que tout ce que vous faites pour l'audio (y compris la compression et la limitation) est une forme de distorsion, donc vous aurez une coloration de l'audio. Votre choix d'algorithmes de compression et de limitation affectera le son.

Étant donné que vous ne générez pas l'audio en temps réel, vous avez la possibilité de limiter le "mur de briques". C'est parce que vous avez une connaissance préalable des niveaux. La limitation en temps réel est plus limitée parce que vous ne pouvez pas savoir ce qui s'en vient - vous devez être réactif.

Est-ce que cette musique, effets sonores, voix, quoi?

Les programmeurs here traitent tout le temps.

+0

Merci de deviner ce que je voulais poser avec ma question originale;) – ralle

+0

C'est un problème assez commun, comme vous pouvez l'imaginer. – Nosredna

+0

Il est certainement, je suis confronté au même problème de mélange de deux sons générés dans ActionScript 3. Merci pour les liens, on dirait que j'ai quelques lectures à faire sur les compresseurs! – vitch

0

Vous n'avez jamais dit quel langage de programmation et plate-forme, mais pour l'instant, je suppose Windows en utilisant C#.

http://www.codeplex.com/naudio

Grande bibliothèque open source qui couvre vraiment hors beaucoup de choses que vous rencontreriez pendant la plupart des opérations audio.

5

Mélanger des échantillons audio, c'est les ajouter ensemble, c'est tout. Généralement, vous les ajoutez dans un type de données plus grand afin que vous puissiez détecter un débordement et bloquer les valeurs avant de les renvoyer dans votre tampon de destination. Si vous savez à l'avance que vous aurez un débordement, vous pouvez redimensionner leurs amplitudes avant l'addition - multipliez simplement par une valeur à virgule flottante entre 0 et 1, en gardant à l'esprit la question de précision, en convertissant d'abord en un type de données plus grand.

Si vous rencontrez un problème spécifique qui n'est pas résolu par ceci, n'hésitez pas à mettre à jour votre question originale.

+0

Le serrage est difficile à limiter et sonne plutôt mal. Il est plus susceptible de vouloir un genou sur cette limite. :-) – Nosredna

+0

Il pourrait, mais c'est techniquement autre chose que ce qu'il a demandé :) – Kylotan

2

mélange sale de deux échantillons

mix = (a + b) - a * b * sign(a + b) 
Questions connexes