2010-04-16 6 views
6

J'ai quelques fichiers wav et peut-être un fichier mp3 que je voudrais mixer en un seul fichier wav ou mp3. J'utilise C/C++/Obj-C (iPhone). Je n'ai vraiment aucune expérience avec ce genre de chose. Si quelqu'un pouvait me donner des conseils, je serais très reconnaissant.Mixage de fichiers son sur un iPhone

Fondamentalement ce que je veux faire est des choses semblables comme par exemple Audacity peut faire, mais par programmation. N'y at-il pas une bibliothèque de sons où vous pouvez facilement ouvrir des fichiers audio et les "coller" dans un nouveau à des positions définies? Où le mélange est quelque chose dont vous n'avez pas à vous soucier?

Merci.

+0

Pouvez-vous préciser si vous voulez lire vos fichiers simultanément ou les mélanger, puis écrire le résultat dans un fichier? Dans ce dernier cas, y a-t-il une raison pour laquelle vous ne pouvez pas les pré-traiter pour créer un seul fichier à l'avance? Si le premier, vous allez probablement vouloir lire sur les services de file d'attente audio ou OpenAL, qui sont des sujets assez profonds. – warrenm

+0

Question éditée pour être plus clair. Oui, les sons peuvent être simultanés. – quano

+0

@quano hv u trouver une solution pour ça ??? – Aadil

Répondre

0

Lire Multimedia support comme point de départ, il contient beaucoup d'informations. Voici un extrait:

Il y a 3 façons de mélanger l'audio sur iphone:

  • cadre AudioUnit
    • Mixer Multicanal - "vous permet de mixer plusieurs flux audio à un seul flux"
    • unité Mixer 3D - "vous permet de mixer plusieurs flux audio, spécifiez le panoramique de sortie stéréo, manipuler le taux d'échantillonnage"
  • OpenAL utilisé dans le développement des jeux

Vérifiez également l'exemple suivant sur: iPhoneMultichannelMixerTest:

Deux bus d'entrée sont créés chacun avec des commandes de volume d'entrée. Un contrôle du volume de la production globale du mélangeur est également fourni et chaque bus peut être activé ou désactivé

+0

Notez que je ne veux pas lire les fichiers (sur l'iPhone), juste faire des choses avec eux et enregistrer dans un nouveau fichier. :) Je vais vérifier les liens. – quano

3

mélange de deux tampons sonores de PCM linéaire est seulement une question d'ajouter chaque valeur de l'échantillon dans les ensemble, et bien sûr assurez-vous de don ne déborde pas. Normalement, vous utiliserez des valeurs à virgule flottante dans les tampons, donc le problème est quand vous revenez au fichier. Vous devriez également avoir CoreAudio disponible sur l'iPhone, il a tous les moyens d'ouvrir/lire/écrire des fichiers audio dans différents formats. Je pense qu'il y a aussi un api de plus haut niveau disponible pour l'iPhone qui n'est pas sur le mac, regardez les docs apple.

+0

Oui, j'ai compris cela aussi. Ce n'est pas difficile à faire, mais cela demande du travail. Je pensais que quelqu'un devait avoir déjà fait ça, peut-être même fait un simple lib pour cela. Cela me ferait gagner du temps. Lire des fichiers, ajouter des valeurs et écrire n'est pas la chose la plus excitante à laquelle je puisse penser.:) Il semble juste comme une caractéristique si triviale. J'ai été vraiment surpris de voir à quel point il semble difficile de trouver une lib existante qui le fasse. Jusqu'à présent, je n'ai rien trouvé dans les docs qui explique comment vous ouvrez plusieurs fichiers, les placer à des endroits spécifiques dans le temps et les mélanger dans un seul fichier. – quano

+0

Ok, mais il existe un support pour cela dans l'API, vous devez remplir une structure avec certaines propriétés de votre format de fichier si je me souviens bien, puis l'envoyer à certaines fonctions de la bibliothèque. Il y a quelque temps depuis que je l'ai fait, mais je dirais que la conversion de formats d'une multitude de formats audio est non triviale, tout est pris en charge et fait pour vous par l'API. Une chose comme une ligne de temps, je pense que vous devez vous inventer à moins que ce soit en temps réel la lecture de votre après, il est également pris en charge par l'API. Mais cela ne devrait pas être trop difficile à faire puisque vous pouvez l'obtenir (time * sample requency) pour obtenir un bufferindex. – Fred

2

Si vous recherchez spécifiquement les fonctionnalités d'Audacity, il utilise PortAudio sous le capot (ressemble à une licence MIT). Peut-être pouvez-vous simplement essayer de l'utiliser?

Questions connexes