2011-04-19 7 views
2

Je recodage un fichier ou j'ai un fichier audio Je veux changer la hauteur et lire le fichier audio. Comment puis-je définir la hauteur dans un programme iphone qui utilise objectif-c.Comment régler la hauteur d'un fichier audio ou d'un fichier audio enregistré dans iphone sdk?

Aidez-moi s'il vous plaît à m'en sortir.

Merci, Madan Mohan.

+0

bonjour, madan dans votre question ce que cela signifie pitch? – CNSivakumar

+0

@CNSivakumar: désolé pour clair, le pitch signifie changer le morceau pour d'autres caractères. –

+0

@MadanMohan Monsieur, je suis dans le même problème. Avez-vous trouvé la solution? Pouvez-vous m'aider à y aller? – hyd00

Répondre

0

L'approche naïve est de le jouer en utilisant une fréquence d'échantillonnage différente par rapport à la fréquence d'échantillonnage utilisée pour enregistrer le fichier. Par exemple, si le fichier a été enregistré avec Fs = 44100Hz, puis en le jouant avec Fs = 22050Hz, vous obtiendrez la moitié de la hauteur d'origine.

Bien sûr, cette approche naïve implique de modifier la durée du fichier et d'autres artefacts liés au son. Si vous avez besoin de quelque chose de moins naïf, vous devrez vous-même implémenter un algorithme de pitch-shifting, et c'est un sujet énorme --- je vous suggère de commencer par chercher pitch shift dans google.

0

Vous pouvez utiliser le soundtouch projet open source pour changer la hauteur

Voici le lien: http://www.surina.net/soundtouch/

Une fois que vous ajoutez soundtouch à votre projet, vous devez donner le chemin du fichier son entrée, fichier son de sortie le chemin et le changement de hauteur comme entrée.

Comme il faut plus de temps pour traiter votre son, il est préférable de modifier le son pour que, lorsque vous enregistrez la voix, donnez directement les données à traiter. Cela rendra votre application meilleure.

Références

Real-time Pitch Shifting on the iPhone

Create pitch changing code?

+0

Bon, ça change la tonalité, je veux dire Si on enregistre un son masculin, puis-je jouer un son féminin. –

+0

Je ne pense pas que ce soit fait sur mesure pour répondre à vos besoins. Vous devez le personnaliser en fonction de vos besoins – visakh7

0

vous pouvez jouer un son avec un pas modifié à l'aide AVAudioEngine, AVAudioPlayerNode.The exemple de code testé est donné ci-dessous.

@interface ViewController(){ 

    AVAudioEngine *engine; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self playAudio]; 
} 

-(void)playAudio{ 

    engine = [[AVAudioEngine alloc] init]; 
    NSString* path=[[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp3"]; 
    NSURL *soundUrl = [NSURL fileURLWithPath:path]; 
    AVAudioFile* File = [[AVAudioFile alloc] initForReading: soundUrl error: nil]; 
    AVAudioPlayerNode* node = [AVAudioPlayerNode new]; 

    [node stop]; 
    [engine stop]; 
    [engine reset]; 
    [engine attachNode: node]; 
    AVAudioUnitTimePitch* changeAudioUnitTime = [AVAudioUnitTimePitch new]; 


    //change this rate variable to play fast or slow .   
    changeAudioUnitTime.rate = 1; 

    //change pitch variable to according your requirement. 
    changeAudioUnitTime.pitch = 100; 
    [engine attachNode: changeAudioUnitTime]; 
    [engine connect:node to: changeAudioUnitTime format: nil]; 
    [engine connect:changeAudioUnitTime to: engine.outputNode format:nil]; 
    [node scheduleFile:File atTime: nil completionHandler: nil]; 
    [engine startAndReturnError: nil]; 
    [node play]; 


} 

Faire variable chemin sûr avoir le chemin du fichier valide

Remarque :: ce code est testé sur l'appareil réel et fonctionne bien dans mon project.don't oublier d'ajouter CoreAudio.framework, AVFoundation.framework.

Questions connexes