Cách lặp đi lặp lại bản ghi âm
Trang chủ Blog Hướng dẫn lập trình iOS thu âm-phát lại #1
Hướng dẫn lập trình iOS thu âm-phát lại #123 tháng 06, 2012 - 2633 lượt xem
Tutor Lập trình iOS công việc Lập trình Việc làm
Trong bài này, TechMaster sẽ hướng dẫn bạn lập trình ios tạo một ứng dụng đơn giản để thu âm (record) và phát lại (playback) dùng thư viện AVFoundation. Nếu chức năng đứng riêng, thì app quá đơn giản, khó mà bán được trên AppStore. Tuy nhiên nếu biết kết hợp, nhúng vào các ứng dụng khác như: bóp méo tiếng, phát lại tốc độ nhanh chậm và hoạt hình, chúng ta có thể tạo ra ứng dụng như Talking Tom, hay ghi nhật ký bằng lời, upload file âm thanh lên SoundCloud rồi chia xẻ link trên FaceBook, đọc truyện đêm khuya cho trẻ con, khi cần phát lại Đăng ký để tải về mã nguồn
Bước 1: Bước 2: Bổ xung thư viện AVFoundation của Apple để lập trình Audio Video. Ấn để xem rõ hơn. Trong thư viện AVFoundation, chúng ta sẽ sử dụng 2 class AVAudioRecorder để thu âm và AVAudioPlayer để phát lại Kéo thả các control để tạo giao diện trên StoryBoard. Ấn để xem rõ hình. Bước 4: Phần đầu ViewController.h cần import file header AVFoundation.h Bước 5: Lưu ý đoạn lệnh dưới đây sẽ khởi tạo đối tượng thu âm. Con trỏ error ban đầu không được khởi tạo mà trỏ vào nil. Ta chuyền vào địa chỉ của con trỏ error (&error) chứ không phải địa chỉ đối tượng mà con trỏ trỏ vào. Nếu có lỗi, đối tượng lỗi NSError được khởi tạo và con trỏ sẽ trỏ vào đó, lúc này nó không còn là nil nữa. Đây là cách mà Objective-C bắt lỗi các hàm trong thư viện Foundation NSError *error = nil; self.recorder = [[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recordSettings error:&error];Hứng sự kiện người dùng ấn nút ghi âm. Nếu không ghi âm, thì ghi âm và ngược lại. Các nút recordButton và playButton cũng được enable tương ứng. - (IBAction)recordAudio:(id)sender { if (!self.recorder.recording) { recordButton.selected = YES; playButton.enabled = NO; [self.recorder record]; } else { recordButton.selected = NO; playButton.enabled = YES; [self.recorder stop]; } }Để giao diện trực quan, thân thiện hơn, chúng ta cần lập trình để cập nhật thời gian kể từ lúc bắt đầu thu âm. Cuối cùng là hàm phát lại âm thanh vừa thu. Hàm sử dụng audioPlayer để phát lại và sử dụng đối tượng prgIndicator kiểu UIProgressView để hiển tiến độ phát lại. Đối tượng tmrCounter để cập nhật label hiển thị thời gian âm thanh đã phát lại trên tổng thời gian của đoạn âm thanh vừa thu âm. - (IBAction)playBack:(id)sender { { recordButton.enabled = NO; if (self.audioPlayer) self.audioPlayer = nil; NSError *error; self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:self.recorder.url error:&error]; audioPlayer.delegate = self; if (error) errorMessage.text = [NSString stringWithFormat:@"error: %@", [error localizedDescription]]; else { [audioPlayer prepareToPlay]; prgIndicator.hidden = NO; [audioPlayer play]; if (self.tmrCounter) { self.tmrCounter = nil; } self.tmrCounter = [NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(updateElapsedTime) userInfo:nil repeats:YES]; [prgIndicator setProgress:0.0]; } } }0
|