Sebenarnya, tidak ada contoh sama sekali. Ini kode kerja saya. Rekaman dipicu oleh pengguna menekan tombol di navBar. Rekaman menggunakan kualitas cd (44100 sampel), stereo (2 saluran) pcm linier. Hati-hati: jika Anda ingin menggunakan format yang berbeda, terutama yang disandikan, pastikan Anda sepenuhnya memahami cara mengatur pengaturan AVAudioRecorder (baca dengan cermat dokumentasi jenis audio), jika tidak, Anda tidak akan pernah dapat menginisialisasi dengan benar. Satu hal lagi. Dalam kode, saya tidak menunjukkan cara menangani data pengukuran, tetapi Anda dapat mengetahuinya dengan mudah. Akhirnya, perhatikan bahwa metode AVAudioRecorder deleteRecording pada saat penulisan ini membuat aplikasi Anda crash. Inilah sebabnya saya menghapus file yang direkam melalui File Manager. Ketika perekaman selesai, saya menyimpan audio yang direkam sebagai NSData di objek yang saat ini diedit menggunakan 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
}
Meskipun ini adalah pertanyaan yang dijawab (dan agak lama) saya telah memutuskan untuk memposting kode kerja penuh saya untuk orang lain yang merasa sulit untuk menemukan kerja yang baik (di luar kotak) bermain dan merekam contoh - termasuk dikodekan, pcm, bermain melalui speaker , tulis ke file di sini adalah:
AudioPlayerViewController.h:
AudioPlayerViewController.m:
Semoga ini bisa membantu beberapa dari kalian.
sumber
Saya telah mengunggah proyek sampel. Anda bisa melihatnya.
Perekam suara
sumber
Ini sangat membantu. Satu-satunya masalah yang saya miliki adalah ukuran file suara yang dibuat setelah perekaman. Saya perlu mengurangi ukuran file jadi saya melakukan beberapa perubahan pada pengaturan.
Ukuran file berkurang dari 360kb menjadi hanya 25kb (perekaman 2 detik).
sumber
Saya sudah mencoba untuk mendapatkan kode ini berfungsi selama 2 jam terakhir dan meskipun tidak menunjukkan kesalahan pada simulator, ada satu di perangkat.
Ternyata, setidaknya dalam kasus saya bahwa kesalahan berasal dari direktori yang digunakan (bundel):
Itu tidak bisa ditulisi atau sesuatu seperti ini ... Tidak ada kesalahan kecuali kenyataan bahwa preparToRecord gagal ...
Karena itu saya menggantinya dengan:
Sekarang Bekerja seperti Mantra.
Semoga ini bisa membantu orang lain.
sumber
Terima kasih banyak kepada @Massimo Cafaro dan Shaybc saya dapat mencapai tugas di bawah ini
di iOS 8:
1.Tambahkan "AVFoundation.framework" ke proyek Anda
dalam file .h
2.Tambahkan di bawah pernyataan impor 'AVFoundation / AVFoundation.h'.
3.Tentukan "AVAudioRecorderDelegate"
4.Buat tata letak dengan Rekam, tombol Play dan metode aksi mereka
5. Tentukan Perekam dan Player dll.
Berikut adalah contoh kode lengkap yang dapat membantu Anda.
Kemudian lakukan pekerjaan di
sumber
sumber
Di tautan berikut, Anda dapat menemukan info berguna tentang perekaman dengan AVAudioRecording. Di tautan ini di bagian pertama "MENGGUNAKAN Audio" ada jangkar bernama "Merekam dengan AVAudioRecorder Class." yang mengarahkan Anda ke contoh.
AudioVideo Conceptual MultimediaPG
sumber
Ok jadi jawaban yang saya dapat membantu saya ke arah yang benar dan saya sangat berterima kasih. Ini membantu saya mencari cara untuk benar-benar merekam di iPhone, tetapi saya pikir saya juga akan menyertakan beberapa kode bermanfaat yang saya dapatkan dari Perpustakaan Referensi iPhone:
Teknologi Audio dan Video
Saya menggunakan kode ini dan menambahkannya ke contoh avTouch dengan cukup mudah. Dengan contoh kode di atas dan sampel dari pustaka referensi, saya bisa membuatnya bekerja dengan cukup baik.
sumber
untuk format wav di bawah pengaturan audio
ref: http://objective-audio.jp/2010/09/avassetreaderavassetwriter.html
sumber
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]
MULAILAH
BERHENTI
sumber
sumber
Sesuai jawaban di atas, saya membuat beberapa perubahan dan saya mendapatkan hasil yang benar.
Langkah 1: Di bawah "inf.plist" tambahkan izin penggunaan Mikrofon ==>
Langkah 2:
Simpan rekaman file audio ke Direktori Dokumen Lokal
Putar / Hentikan rekaman
Ini kode sumbernya. Silakan melihat sekaligus dan menggunakannya.
ViewController.h
ViewController.m
sumber
-[NSUserDefaults synchronize]
. Dari dokumentasi Apple "metode ini tidak perlu dan tidak boleh digunakan."