Eigentlich gibt es überhaupt keine Beispiele. Hier ist mein Arbeitscode. Die Aufnahme wird durch Drücken einer Taste auf der Navigationsleiste ausgelöst. Die Aufnahme verwendet CD-Qualität (44100 Samples), Stereo (2 Kanäle) linear pcm. Achtung: Wenn Sie ein anderes Format verwenden möchten, insbesondere ein codiertes, stellen Sie sicher, dass Sie die Einstellungen des AVAudioRecorder vollständig verstehen (lesen Sie die Dokumentation zu den Audiotypen sorgfältig durch), da Sie sie sonst niemals korrekt initialisieren können. Eine Sache noch. Im Code zeige ich nicht, wie man mit Messdaten umgeht, aber Sie können es leicht herausfinden. Beachten Sie schließlich, dass die AVAudioRecorder-Methode deleteRecording zum Zeitpunkt dieses Schreibens Ihre Anwendung zum Absturz bringt. Aus diesem Grund entferne ich die aufgezeichnete Datei über den Dateimanager. Wenn die Aufnahme abgeschlossen ist, speichere ich das aufgenommene Audio mit KVC als NSData im aktuell bearbeiteten Objekt.
#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
}
Obwohl dies eine beantwortete Frage ist (und irgendwie alt ist), habe ich mich entschlossen, meinen vollständigen Arbeitscode für andere zu veröffentlichen, die es schwierig fanden, ein gutes funktionierendes (sofort einsatzbereites) Spiel- und Aufnahmebeispiel zu finden - einschließlich codierter PCM-Wiedergabe über Lautsprecher , schreibe in die Datei hier ist es:
AudioPlayerViewController.h:
AudioPlayerViewController.m:
Hoffe das wird einigen von euch helfen.
quelle
Ich habe ein Beispielprojekt hochgeladen. Sie können einen Blick darauf werfen.
Diktiergerät
quelle
Es ist wirklich hilfreich. Das einzige Problem, das ich hatte, war die Größe der Sounddatei, die nach der Aufnahme erstellt wurde. Ich musste die Dateigröße reduzieren, damit ich einige Änderungen an den Einstellungen vornehmen konnte.
Die Dateigröße wurde von 360 KB auf nur 25 KB reduziert (2 Sekunden Aufnahme).
quelle
Ich habe in den letzten 2 Stunden versucht, diesen Code zum Laufen zu bringen, und obwohl im Simulator kein Fehler angezeigt wurde, war auf dem Gerät einer vorhanden.
Es stellt sich zumindest in meinem Fall heraus, dass der Fehler aus dem verwendeten Verzeichnis (Bundle) stammt:
Es war nicht beschreibbar oder so ... Es gab keinen Fehler außer der Tatsache, dass prepareToRecord fehlgeschlagen ist ...
Ich habe es daher ersetzt durch:
Es funktioniert jetzt wie ein Zauber.
Hoffe das hilft anderen.
quelle
Großartig Dank @Massimo Cafaro und Shaybc konnte ich die folgenden Aufgaben erfüllen
in iOS 8:
1. Fügen Sie Ihrem Projekt "AVFoundation.framework" hinzu
in der .h-Datei
2. Fügen Sie unter der Importanweisung 'AVFoundation / AVFoundation.h' hinzu.
3.Definieren Sie "AVAudioRecorderDelegate"
4.Erstellen Sie ein Layout mit den Schaltflächen Aufnehmen, Wiedergabe und deren Aktionsmethoden
5. Definieren Sie Rekorder und Player usw.
Hier ist der vollständige Beispielcode, der Ihnen helfen kann.
Dann mach den Job in
quelle
quelle
Unter dem folgenden Link finden Sie nützliche Informationen zur Aufnahme mit AVAudioRecording. In diesem Link im ersten Teil "USing Audio" befindet sich ein Anker mit dem Namen "Recording with the AVAudioRecorder Class". das führt Sie zum Beispiel.
AudioVideo Conceptual MultimediaPG
quelle
Ok, die Antwort hat mir in die richtige Richtung geholfen und ich bin sehr dankbar. Es half mir herauszufinden, wie man tatsächlich auf dem iPhone aufzeichnet, aber ich dachte, ich würde auch hilfreichen Code einfügen, den ich aus der iPhone-Referenzbibliothek erhalten habe:
Audio- und Videotechnologien
Ich habe diesen Code verwendet und ihn ziemlich einfach zum avTouch-Beispiel hinzugefügt. Mit dem obigen Codebeispiel und dem Beispiel aus der Referenzbibliothek konnte ich dafür sorgen, dass dies ziemlich gut funktioniert.
quelle
für WAV-Format unterhalb der Audioeinstellung
ref: http://objective-audio.jp/2010/09/avassetreaderavassetwriter.html
quelle
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]
ANFANG
HALT
quelle
quelle
Gemäß den obigen Antworten habe ich einige Änderungen vorgenommen und die richtige Ausgabe erhalten.
Schritt 1: Fügen Sie unter "inf.plist" die Mikrofon-Nutzungsberechtigungen hinzu ==>
Schritt 2:
Speichern Sie die Audioaufzeichnungsdatei im lokalen Dokumentverzeichnis
Aufnahme abspielen / stoppen
Hier ist der Quellcode. Bitte schauen Sie einmal und verwenden Sie es.
ViewController.h
ViewController.m
quelle
-[NSUserDefaults synchronize]
. Aus der Apple-Dokumentation geht hervor, dass diese Methode nicht erforderlich ist und nicht verwendet werden sollte.