2010-12-08 80 views
3

Je me demandais simplement si quelqu'un pouvait m'expliquer comment je pourrais enregistrer l'audio, le modifier (pitch?) Et le restituer à l'utilisateur sur l'iPhone.Enregistrement, modification de la hauteur et lecture de l'audio en temps réel sur iOS

Je ne demande pas à quelqu'un de le faire pour moi, juste quelques conseils sur la façon dont je devrais y aller. en regardant à travers les documents, il semble que je devrais utiliser AVAudioSession, AVAudioRecorder et AVAudioPlayer (AVFoundation.Framework) pour les parties de lecture d'enregistrement. Ou devrais-je utiliser le CoreAudio.Framework? et puis il y a la question concernant la modification de l'audio. OpenAL est une bibliothèque qui prend en charge ce que vous recherchez.

Répondre

0

Et c'est très populaire sur l'iPhone, alors peut-être que vous devriez jeter un coup d'oeil à ceci. à savoir la hauteur d'un échantillon est facilement modifiable avec une seule commande:

alSourcef(source, AL_PITCH, pitch); 

Mais je ne suis pas sûr, si le changement de hauteur est le AVFoundation ou les classes CoreAudio possibles - jamais utilisés.

+0

Un grand merci @Constantin j'ai fini en effet à l'aide OpenAL. Quelques autres détails peuvent être vus à cette autre question: http://stackoverflow.com/questions/5137853/une autre-question-about-recording-modifying-and-playing-audio-on-iphone – bennythemink

0

Cela pourrait aider. DIRAC-mobile, une bibliothèque pour la manipulation en temps réel du tempo et du pitch des signaux audio polyphoniques. Ils ont également des exemples de codes que vous pouvez jeter un oeil une fois que vous téléchargez la bibliothèque.

+0

merci pour le lien Jinru. J'ai peur d'utiliser une bibliothèque commerciale n'est pas une option pour moi :( – bennythemink

2

AVAudioUnitTimePitch devrait faire l'affaire.

exemple de code d'udacity.com Intro to iOS App Development with Swift:

func playAudioWithVariablePitch(pitch: Float) { 
    audioEngine.stop() 
    audioEngine.reset() 

    let audioPlayerNode = AVAudioPlayerNode() 
    audioEngine.attachNode(audioPlayerNode) 

    let changePitchEffect = AVAudioUnitTimePitch() 
    changePitchEffect.pitch = pitch 
    audioEngine.attachNode(changePitchEffect) 

    audioEngine.connect(audioPlayerNode, to:changePitchEffect, format:nil) 
    audioEngine.connect(changePitchEffect, to:audioEngine.outputNode, format:nil) 

    audioPlayerNode.scheduleFile(audioFile, atTime:nil, completionHandler: nil) 
    try! audioEngine.start() 

    audioPlayerNode.play() 
}