J'ai déjà créé une application iPhone à enregistrer. Il va enregistrer dans le fichier .caf. Mais je veux enregistrer au format .m4a.Comment enregistrer la voix au format .m4a
S'il vous plaît aidez-moi à le faire.
Merci.
J'ai déjà créé une application iPhone à enregistrer. Il va enregistrer dans le fichier .caf. Mais je veux enregistrer au format .m4a.Comment enregistrer la voix au format .m4a
S'il vous plaît aidez-moi à le faire.
Merci.
Voici un exemple de code alternatif qui encoder le fichier en tant que AAC dans un m4a:
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];
Puis pour terminer l'enregistrement je:
[recorder stop];
AVAudioSession *session = [AVAudioSession sharedInstance];
int flags = AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation;
[session setActive:NO withFlags:flags error:nil];
ensuite le fichier à 'tmpFileUrl'
peut être utilisé.
Voici le code SWIFT de travail pour enregistrer les fichiers audio m4a. Gardez à l'esprit que frapper le bon format paframeters qui produisent des fichiers audio utilisables dans iOS est vraiment pénible à trouver. J'ai trouvé cette combinaison après beaucoup d'essais et d'erreurs. J'espère que cela vous fait gagner du temps, profitez-en!
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
}
Dans quel format sauvegardez-vous l'enregistrement? .caf? .m4a? ce n'est pas clair à partir de votre extrait. – Josh
@Josh Le snippet enregistre au format m4a, qui est défini à 2 endroits: 1) dans le paramètre kAudioFormatMPEG4AAC 'recordSettings' et 2) en tant qu'extension explicite .m4a qui provient de self.directoryURL(). J'ai ajouté le code de directoryURL() à la réponse pour que vous puissiez voir d'où il vient. Important: Pour une raison quelconque, la plupart des combinaisons de paramètres d'enregistrement AVSampleRateKey et AVFormatIDKey se bloquent, vous serez donc limité à ceux qui fonctionnent (j'ai découvert par essais et erreurs) – Josh
Vous pouvez attendre que 'audioRecorderDidFinishRecording: aboutit à:' pour savoir si le fichier est valide. – alltom
Génial, cela a fonctionné parfaitement pour l'enregistrement directement sur * m4a sans avoir à convertir plus tard. Vous devez utiliser AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation au lieu de AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation, car il est obsolète depuis la version 4.0 (fonctionne toujours, mais juste au cas où). – DZenBot
Quelqu'un at-il un exemple d'application que je peux exécuter pour voir ce code en action? J'allais le brancher dans l'exemple d'application Recorder dans les doc du centre de développement iOS, mais c'est un peu complexe pour moi. Merci! –