modifier son

lucluc Membre

Bonjour,


 


Si vous avez des pistes pour modifier les aiguës ou grave d'un son charger en mémoire.


 


Merci d'avance


Réponses

  • HerveHerve Membre
    août 2014 modifié #2

    Tout ce qui est dsp audio suppose d'utiliser CoreAudio. Il faut faire un AUGraph dans lequel tu vas, soit intégrer une fonction RenderCallback, soit utiliser un module AudioUnit Apple intégré à  l'OS. Dans ce render callback tu filtres le signal avec des filtres passe-haut- passe bas, et tu ajoutes ce signal ou le retranche au signal d'origine. Dans ton cas, utiliser le AudioUnit type a des chances d'être très suffisant.


    Le problème est que si je sais faire un synthétiseur (et donc te donner un bon code source pour les filtres), je n'ai pas encore appris à  récupérer l'audio dans le renderCallback.  (pas eu besoin), mais monter une chaine de AudioUnit "de base" est assez simple. Il y en a un pour lire des fichiers audio de tous types, et d'autres pour filtrer, ajouter de la réverb, de l'écho, etc.


     


    En gros, tu reproduis en code un montage audio analogique, le lecteur audio est connecté (avec les AUNode) à  l'effet, qui est connecté quant à  lui à  la sortie. Le AUGraph est le studio en quelques sortes dans lequel des AUNode connectent des AudioUnit.


     


    Il y a des exemples de code source dans les exemples Apple. Des liens pour commencer :


    https://developer.apple.com/library/ios/documentation/MusicAudio/Conceptual/CoreAudioOverview/Introduction/Introduction.html#//apple_ref/doc/uid/TP40003577-CH1-SW1


     


    https://developer.apple.com/library/ios/documentation/MusicAudio/Conceptual/AudioUnitHostingGuide_iOS/Introduction/Introduction.html


     


    Cherche aussi des exemples d'appli déjà  faites.


     


    Exemple pour finir (pour l'instant) d'un synthé sous MacOS :



    -(void)setUp{
    NewAUGraph (&_graph);
    //AudioUnit defaultOutputUnit;

    /*** 1 ***/
    ComponentDescription cd;
    cd.componentType = kAudioUnitType_Output;
    cd.componentSubType = kAudioUnitSubType_DefaultOutput;
    cd.componentManufacturer = kAudioUnitManufacturer_Apple;
    cd.componentFlags = 0;
    cd.componentFlagsMask = 0;

    Component comp = FindNextComponent(NULL, &cd);
    OpenAComponent(comp, &defaultOutputUnit);

    /*** 2 ***/
    AURenderCallbackStruct input;
    input.inputProc = MyAURenderCallback;//une méthode connectée ici implémentera le synthé. Inutile dans ton cas sans doute, à  moins de vouloir des effets très spéciaux.
    input.inputProcRefCon = self;

    AudioUnitSetProperty (defaultOutputUnit,
    kAudioUnitProperty_SetRenderCallback,
    kAudioUnitScope_Input,
    0,
    &input,
    sizeof(input));


    AudioUnitInitialize(defaultOutputUnit);

    /*** 3 ***/
    AudioOutputUnitStart (defaultOutputUnit);

    // Open the Mixer
    AudioComponentDescription descriptionMix;
    descriptionMix.componentType = kAudioUnitType_Mixer;
    descriptionMix.componentSubType = kAudioUnitSubType_StereoMixer;
    descriptionMix.componentManufacturer = kAudioUnitManufacturer_Apple;
    descriptionMix.componentFlags = 0;
    descriptionMix.componentFlagsMask = 0;
    AUGraphAddNode (_graph, &descriptionMix, &_mixerNode);


    // Open the output device
    AudioComponentDescription descriptionOut;
    descriptionOut.componentType = kAudioUnitType_Output;
    descriptionOut.componentSubType = kAudioUnitSubType_HALOutput;
    descriptionOut.componentManufacturer = kAudioUnitManufacturer_Apple;
    descriptionOut.componentFlags = 0;
    descriptionOut.componentFlagsMask = 0;
    AUGraphAddNode (_graph, &descriptionOut, &_outputNode);

    // Connect the devices up
    AUGraphConnectNodeInput (_graph, _synthNode, 0, _mixerNode, 0);
    AUGraphConnectNodeInput (_graph, _mixerNode, 0, _outputNode, 0);
    AUGraphUpdate (_graph, NULL);

    // Open and initialize the audio units
    AUGraphOpen (_graph);
    AUGraphInitialize (_graph);

    // Start playing
    AUGraphStart (_graph);
    }
  • lucluc Membre

    merci herve, je vais me pencher sur AudioUnit parce que la doc c'est pas ce qui manque alors je tentai de faire une recherche avec le mot pitch...


     


    merci encore.


  • je suis aussi intéressé par la solution. Merci de faire un feed-back


  • CéroceCéroce Membre, Modérateur
    août 2014 modifié #5
    La solution pour faire quoi? Changer le pitch ou opérer une égalisation ? Parce que la question de départ est trop vague.
    Dans les deux cas, il faut utiliser les Audio Units standard en les combinant dans un Audio Graph.
  • l'equalisation


  • lucluc Membre


    La solution pour faire quoi? Changer le pitch ou opérer une égalisation ? Parce que la question de départ est trop vague.

    Dans les deux cas, il faut utiliser les Audio Units standard en les combinant dans un Audio Graph.




    modifier les aiguës ou les graves (hauteur de son) ce n'est pas une égalisation ?!

  • Le pitch shifting consiste à  transposer sans variation de durée un enregistrement vers le grave ou vers l'aigu. L'équalisation consiste à  rehausser le timbre, pas la hauteur. 


     


    Exemple : un morceau est enregistré en do majeur, on veut chanter ou jouer par dessus en ré majeur -> pitch shifting.


    Un enregistrement parrait sourd, il faudrait mieux entendre les fréquences aiguës -> equaliseur.


     


    Un exemple de multieffet pour iOS :


    https://developer.apple.com/library/mac/samplecode/AUTimePitchTest/Introduction/Intro.html

  • lucluc Membre


    Le pitch shifting consiste à  transposer sans variation de durée un enregistrement vers le grave ou vers l'aigu. L'équalisation consiste à  rehausser le timbre, pas la hauteur. 


     


    Exemple : un morceau est enregistré en do majeur, on veut chanter ou jouer par dessus en ré majeur -> pitch shifting.


    Un enregistrement parrait sourd, il faudrait mieux entendre les fréquences aiguës -> equaliseur.


     


    Un exemple de multieffet pour iOS :


    https://developer.apple.com/library/mac/samplecode/AUTimePitchTest/Introduction/Intro.html




    le pitch doit convenir pour un traitement immédiat, beaucoup moins pour l'équaliser.

  • Que veux-tu faire exactement?  Avec ton Mac, si tu as Garage Band par exemple, tu peux essayer avec les AudioUnit "natifs" du Mac. Ce sont tous les effets marqués "AU...". Ce sont eux que tu peux intégrer dans ton graph et paramétrer en code. Essaie, et puis décide!  


     


    (Garage Band est gratuit sur le Mac Apple Store)


  • Désolé pour le retard, ce que je cherche a faire? Modifier le pitch d'un son en temps réel.
  • HerveHerve Membre
    septembre 2014 modifié #12

    Désolé pour le retard aussi. J'étais dans mon synthé iPad n°1...


     


    Cela s'appelle un pitch shifter. Le AudioUnit natif du Mac est bien. 


     


    Tu fais ton graph, et tu trouves les paramètres dans la doc (tous commencent par "kAudioUnitProperty_). Il y en a un aussi pour lire les fichiers audio. Encore une fois, essaie les dans Garage-Band pour voir si c'est ce que tu veux.


     


    Au niveau di GUI, souviens-toi que la partie graphique et la partie audio d'un soft de musique doivent fonctionner séparément. L'un doit pouvoir fonctionner sans l'autre. Les deux parties communiquent via des set/get de valeurs, ou des notifications, mais rien de plus, elles ne s'attendent jamais.


  • merci bien pour ces précisions.


  • Est-ce que ça marche?


Connectez-vous ou Inscrivez-vous pour répondre.