Na verdade, não há exemplos. Aqui está o meu código de trabalho. A gravação é acionada pelo usuário pressionando um botão na barra de navegação. A gravação utiliza qualidade de CD (44100 amostras), estéreo (2 canais) pcm linear. Cuidado: se você quiser usar um formato diferente, especialmente um codificado, certifique-se de entender completamente como definir as configurações do AVAudioRecorder (leia atentamente a documentação dos tipos de áudio); caso contrário, nunca será possível inicializá-lo corretamente. Mais uma coisa. No código, não estou mostrando como lidar com dados de medição, mas você pode descobrir isso facilmente. Por fim, observe que o método AVAudioRecorder deleteRecording no momento da redação deste documento trava seu aplicativo. É por isso que estou removendo o arquivo gravado através do Gerenciador de arquivos. Quando a gravação termina, eu salvo o áudio gravado como NSData no objeto atualmente editado usando o 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
}
Embora esta seja uma pergunta respondida (e meio antiga), decidi postar meu código de trabalho completo para outras pessoas que acharam difícil encontrar um bom trabalho (fora da caixa) tocando e gravando exemplo - incluindo codificado, pcm, reproduzir via alto-falante , escreva no arquivo aqui está:
AudioPlayerViewController.h:
AudioPlayerViewController.m:
Espero que isso ajude alguns de vocês.
fonte
Fiz upload de um projeto de amostra. Você pode dar uma olhada.
Gravador de voz
fonte
É realmente útil. O único problema que tive foi o tamanho do arquivo de som criado após a gravação. Eu precisava reduzir o tamanho do arquivo, então fiz algumas alterações nas configurações.
O tamanho do arquivo foi reduzido de 360kb para apenas 25kb (2 segundos de gravação).
fonte
Eu tenho tentado fazer com que esse código funcione nas últimas 2 horas e, embora não tenha mostrado nenhum erro no simulador, havia um no dispositivo.
Acontece que, pelo menos no meu caso, o erro veio do diretório usado (pacote):
Não era gravável ou algo assim ... Não havia nenhum erro, exceto o fato de o prepareToRecord falhar ...
Substituí-o, portanto:
Agora funciona como um encanto.
Espero que isso ajude os outros.
fonte
Muito obrigado a @Massimo Cafaro e Shaybc , consegui realizar as tarefas abaixo
no iOS 8:
1.Adicione "AVFoundation.framework" ao seu projeto
no arquivo .h
2.Adicione abaixo a declaração de importação 'AVFoundation / AVFoundation.h'.
3.Defina "AVAudioRecorderDelegate"
4.Crie um layout com os botões Record, Play e seus métodos de ação
5.Define o gravador e o reprodutor etc.
Aqui está o código de exemplo completo que pode ajudá-lo.
Então faça o trabalho em
fonte
fonte
No link a seguir, você pode encontrar informações úteis sobre a gravação com o AVAudioRecording. Neste link na primeira parte "USando o áudio", há uma âncora chamada "Gravando com a classe AVAudioRecorder". isso leva você ao exemplo.
Multimídia conceitual AudioVideoPG
fonte
Ok, então a resposta que recebi me ajudou na direção certa e estou muito agradecido. Isso me ajudou a descobrir como realmente gravar no iPhone, mas pensei em incluir também alguns códigos úteis que obtive da Biblioteca de Referência do iPhone:
AudioandVideoTechnologies
Usei esse código e o adicionei ao exemplo do avTouch com bastante facilidade. Com o exemplo de código acima e o exemplo da biblioteca de referência, consegui que isso funcionasse muito bem.
fonte
para o formato wav abaixo da configuração de áudio
ref: http://objective-audio.jp/2010/09/avassetreaderavassetwriter.html
fonte
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]
COMEÇAR
PARE
fonte
fonte
Conforme as respostas acima, fiz algumas alterações e obtive a saída correta.
Etapa 1: em "inf.plist", adicione as permissões de uso do microfone ==>
Passo 2:
Salve o arquivo de áudio gravado no Diretório local de documentos
Reproduzir / parar a gravação
Aqui está o código fonte. Por favor, dê uma olhada de uma vez e use-a.
ViewController.h
ViewController.m
fonte
-[NSUserDefaults synchronize]
. Na documentação da Apple "este método é desnecessário e não deve ser usado".