En fait, il n'y a aucun exemple. Voici mon code de travail. L'enregistrement est déclenché par l'utilisateur qui appuie sur un bouton de la barre de navigation. L'enregistrement utilise une qualité cd (44100 échantillons), stéréo (2 canaux) pcm linéaire. Attention: si vous souhaitez utiliser un format différent, en particulier un format encodé, assurez-vous de bien comprendre comment définir les paramètres de l'AVAudioRecorder (lisez attentivement la documentation des types audio), sinon vous ne pourrez jamais l'initialiser correctement. Encore une chose. Dans le code, je ne montre pas comment gérer les données de mesure, mais vous pouvez le comprendre facilement. Enfin, notez que la méthode AVAudioRecorder deleteRecording à partir de cette écriture plante votre application. C'est pourquoi je supprime le fichier enregistré via le gestionnaire de fichiers. Lorsque l'enregistrement est terminé, j'enregistre l'audio enregistré sous NSData dans l'objet actuellement édité à l'aide de KVC.
#define DOCUMENTS_FOLDER [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]
- (void) startRecording{
UIBarButtonItem *stopButton = [[UIBarButtonItem alloc] initWithTitle:@"Stop" style:UIBarButtonItemStyleBordered target:self action:@selector(stopRecording)];
self.navigationItem.rightBarButtonItem = stopButton;
[stopButton release];
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *err = nil;
[audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err];
if(err){
NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
return;
}
[audioSession setActive:YES error:&err];
err = nil;
if(err){
NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
return;
}
recordSetting = [[NSMutableDictionary alloc] init];
[recordSetting setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
[recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
[recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];
[recordSetting setValue :[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
[recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];
[recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey];
// Create a new dated file
NSDate *now = [NSDate dateWithTimeIntervalSinceNow:0];
NSString *caldate = [now description];
recorderFilePath = [[NSString stringWithFormat:@"%@/%@.caf", DOCUMENTS_FOLDER, caldate] retain];
NSURL *url = [NSURL fileURLWithPath:recorderFilePath];
err = nil;
recorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&err];
if(!recorder){
NSLog(@"recorder: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
UIAlertView *alert =
[[UIAlertView alloc] initWithTitle: @"Warning"
message: [err localizedDescription]
delegate: nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
return;
}
//prepare to record
[recorder setDelegate:self];
[recorder prepareToRecord];
recorder.meteringEnabled = YES;
BOOL audioHWAvailable = audioSession.inputIsAvailable;
if (! audioHWAvailable) {
UIAlertView *cantRecordAlert =
[[UIAlertView alloc] initWithTitle: @"Warning"
message: @"Audio input hardware not available"
delegate: nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[cantRecordAlert show];
[cantRecordAlert release];
return;
}
// start recording
[recorder recordForDuration:(NSTimeInterval) 10];
}
- (void) stopRecording{
[recorder stop];
NSURL *url = [NSURL fileURLWithPath: recorderFilePath];
NSError *err = nil;
NSData *audioData = [NSData dataWithContentsOfFile:[url path] options: 0 error:&err];
if(!audioData)
NSLog(@"audio data: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
[editedObject setValue:[NSData dataWithContentsOfURL:url] forKey:editedFieldKey];
//[recorder deleteRecording];
NSFileManager *fm = [NSFileManager defaultManager];
err = nil;
[fm removeItemAtPath:[url path] error:&err];
if(err)
NSLog(@"File Manager: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
UIBarButtonItem *startButton = [[UIBarButtonItem alloc] initWithTitle:@"Record" style:UIBarButtonItemStyleBordered target:self action:@selector(startRecording)];
self.navigationItem.rightBarButtonItem = startButton;
[startButton release];
}
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *) aRecorder successfully:(BOOL)flag
{
NSLog (@"audioRecorderDidFinishRecording:successfully:");
// your actions here
}
Bien que ce soit une question avec réponse (et un peu ancienne), j'ai décidé de publier mon code de travail complet pour ceux qui avaient du mal à trouver un bon exemple de jeu et d'enregistrement fonctionnel (prêt à l'emploi) - y compris encodé, pcm, lecture via haut-parleur , écrivez dans le fichier ici c'est:
AudioPlayerViewController.h:
AudioPlayerViewController.m:
J'espère que cela aidera certains d'entre vous.
la source
J'ai téléchargé un exemple de projet. Vous pouvez jeter un oeil.
Enregistreur vocal
la source
C'est vraiment utile. Le seul problème que j'ai eu était la taille du fichier son créé après l'enregistrement. J'avais besoin de réduire la taille du fichier, j'ai donc fait quelques changements dans les paramètres.
Taille du fichier réduite de 360 Ko à seulement 25 Ko (enregistrement de 2 secondes).
la source
J'ai essayé de faire fonctionner ce code pendant les 2 dernières heures et bien qu'il n'ait montré aucune erreur sur le simulateur, il y en avait une sur l'appareil.
Il s'avère, au moins dans mon cas, que l'erreur provenait du répertoire utilisé (bundle):
Ce n'était pas inscriptible ou quelque chose comme ça ... Il n'y avait pas d'erreur sauf le fait que prepareToRecord a échoué ...
Je l'ai donc remplacé par:
Cela fonctionne maintenant comme un charme.
J'espère que cela aide les autres.
la source
Un grand merci à @Massimo Cafaro et Shaybc, j'ai pu accomplir les tâches ci-dessous
sous iOS 8:
1.Ajoutez "AVFoundation.framework" à votre projet
dans un fichier .h
2.Ajoutez ci-dessous la déclaration d'importation 'AVFoundation / AVFoundation.h'.
3.Définissez «AVAudioRecorderDelegate»
4.Créez une mise en page avec les boutons Enregistrer, Lire et leurs méthodes d'action
5.Définissez l'enregistreur et le lecteur, etc.
Voici l'exemple de code complet qui peut vous aider.
Alors fais le travail
la source
la source
Dans le lien suivant, vous trouverez des informations utiles sur l'enregistrement avec AVAudioRecording. Dans ce lien dans la première partie «Utilisation de l'audio», il y a une ancre nommée «Enregistrement avec la classe AVAudioRecorder». cela vous conduit à l'exemple.
AudioVideo Conceptuel MultimédiaPG
la source
Ok donc la réponse que j'ai obtenue m'a aidé dans la bonne direction et je suis très reconnaissant. Cela m'a aidé à comprendre comment enregistrer réellement sur l'iPhone, mais j'ai pensé que j'inclurais également du code utile que j'ai obtenu de la bibliothèque de référence iPhone:
Technologies audio et vidéo
J'ai utilisé ce code et l'ai ajouté assez facilement à l'exemple avTouch. Avec l'exemple de code ci-dessus et l'exemple de la bibliothèque de référence, j'ai pu le faire fonctionner assez bien.
la source
pour le format wav en dessous du réglage audio
réf: http://objective-audio.jp/2010/09/avassetreaderavassetwriter.html
la source
let recordSettings:[String:AnyObject] = [ AVFormatIDKey:Int(kAudioFormatLinearPCM), AVLinearPCMIsFloatKey:false, AVLinearPCMIsBigEndianKey:0, AVLinearPCMIsNonInterleaved:false, AVSampleRateKey:44100.0, AVNumberOfChannelsKey:2, AVEncoderBitRateKey:12800, AVLinearPCMBitDepthKey:16, AVEncoderAudioQualityKey:AVAudioQuality.Max.rawValue]
DÉBUT
ARRÊTEZ
la source
la source
Selon les réponses ci-dessus, j'ai apporté quelques modifications et j'ai obtenu la sortie correcte.
Étape 1: sous "inf.plist", ajoutez les autorisations d'utilisation du microphone ==>
Étape 2:
Enregistrer le fichier audio enregistré dans le répertoire de documents local
Lire / arrêter l'enregistrement
Voici le code source. Jetez-y un coup d'œil et utilisez-le.
ViewController.h
ViewController.m
la source
-[NSUserDefaults synchronize]
. D'après la documentation d'Apple, "cette méthode est inutile et ne doit pas être utilisée".