Bereits habe ich eine iPhone Anwendung zum Aufzeichnen erstellt. Es wird in der .caf-Datei aufgezeichnet.Wie man Stimme im .m4a Format aufzeichnet
Aber ich möchte im .m4a-Format aufnehmen.
Bitte helfen Sie mir, dies zu tun.
Danke.
Bereits habe ich eine iPhone Anwendung zum Aufzeichnen erstellt. Es wird in der .caf-Datei aufgezeichnet.Wie man Stimme im .m4a Format aufzeichnet
Aber ich möchte im .m4a-Format aufnehmen.
Bitte helfen Sie mir, dies zu tun.
Danke.
Hier ist ein alternatives Codebeispiel, das die Datei als AAC innerhalb eines m4a kodieren:
NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsDir = [dirPaths objectAtIndex:0];
NSURL *tmpFileUrl = [NSURL fileURLWithPath:[docsDir stringByAppendingPathComponent:@"tmp.m4a"]];
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,
[NSNumber numberWithFloat:16000.0], AVSampleRateKey,
[NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
nil];
NSError *error = nil;
AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:tmpFileUrl settings:recordSettings error:&error];
[recorder prepareToRecord];
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryRecord error:nil];
[session setActive:YES error:nil];
[recorder record];
Dann beenden die Aufnahme, die ich verwenden:
[recorder stop];
AVAudioSession *session = [AVAudioSession sharedInstance];
int flags = AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation;
[session setActive:NO withFlags:flags error:nil];
Dann wird die Datei auf 'tmpFileUrl'
sein kann benutzt.
Hier ist der funktionierende SWIFT-Code, um m4a Audiodateien aufzunehmen. Denken Sie daran, dass die richtigen Formatparameter, die in iOS brauchbare Audiodateien erzeugen, sehr mühsam zu finden sind. Ich habe diese Kombination nach vielem Versuch und Irrtum gefunden. Ich hoffe es spart dir Zeit, viel Spaß!
let recordSettings: [String : AnyObject] = [AVSampleRateKey : NSNumber(float: Float(16000)),
AVFormatIDKey : NSNumber(int: Int32(kAudioFormatMPEG4AAC)),
AVNumberOfChannelsKey : NSNumber(int: 1),
AVEncoderAudioQualityKey : NSNumber(int: Int32(AVAudioQuality.Low.rawValue))]
func initializeAudioSession(){
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
try audioRecorder = AVAudioRecorder(URL: self.directoryURL()!,
settings: recordSettings)
audioRecorder.delegate = self
audioRecorder.meteringEnabled = true
audioRecorder.prepareToRecord()
} catch let error as NSError{
print("ERROR Initializing the AudioRecorder - "+error.description)
}
}
func recordSpeechM4A(){
if !audioRecorder.recording {
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setActive(true)
audioRecorder.record()
print("RECORDING")
} catch {
}
}
}
func directoryURL() -> NSURL { //filename helper method
let fileManager = NSFileManager.defaultManager()
let urls = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
filepath = urls[0]
let documentDirectory = urls[0] as NSURL
print("STORAGE DIR: "+documentDirectory.description)
//print("---filepath: "+(filepath?.description)!)
let soundURL = documentDirectory.URLByAppendingPathComponent("recordedAudio.m4a") //.m4a
print("SAVING FILE: "+soundURL.description)
return soundURL
}
In welchem Format speichern Sie die Aufnahme? .caf? .m4a? Es ist unklar, aus Ihrem Snippet. – Josh
@Josh Das Snippet speichert im m4a-Format, das an 2 Stellen gesetzt ist: 1) im Parameter 'recordSettings' kAudioFormatMPEG4AAC und 2) als explizite .m4a-Erweiterung, die aus self.directoryURL() stammt. Ich habe den Code von directoryURL() zu der Antwort hinzugefügt, so dass Sie sehen können, wo es herkommt. Wichtig: Aus irgendeinem Grund stürzen die meisten Kombinationen von AVSampleRateKey- und AVFormatIDKey-RecordingSettings tatsächlich ab, sodass Sie auf diejenigen beschränkt sind, die funktionieren (ich habe es durch Versuch und Irrtum herausgefunden). – Josh
Sie können warten auf 'audioRecorderDidFinishRecording: erfolgreich:' zu wissen, ob die Datei gültig ist. – alltom
Großartig, das hat perfekt für die Aufnahme direkt in * m4a funktioniert, ohne später konvertieren zu müssen. Sie sollten AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation anstelle von AVAudioSessionSectiveFlags_NotifyOthersOnDeactivation verwenden, da es seit 4.0 veraltet ist (funktioniert immer noch, aber nur für den Fall). – DZenBot
Hat jemand eine Beispielanwendung, die ich ausführen kann, um diesen Code in Aktion zu sehen? Ich wollte es in die Beispiel-Recorder-App in den iOS-Dev-Center-Dokumenten stecken, aber das ist etwas komplex für mich. Vielen Dank! –