Wednesday, October 4, 2017

Giả tiếng ngáy

Để đọc file nhạc, ta sẽ làm một ứng dụng nhỏ vui vui. Đó là ứng dụng giả tiếng ngáy, trẻ em rất thích ứng dụng kiểu này.
Tạo một class hoặc project với tên tùy ý, ở ví dụ này class tên là ngay. Kéo các file nhạc vào cây thư mục bên trái, các ảnh icon để dùng. Bạn có thể vào trang http://www.freesound.org/ để tải các loại âm thanh miễn phí.


Nhập thư viện nghe nhạc vào.
import AVFoundation
Thêm dòng sau vào khai báo class.
AVAudioPlayerDelegate
Khai báo nút bấm, ảnh, các biến cần dùng lên trên viewDidLoad.
var player = AVAudioPlayer()
var bu1:UIButton!
var bu2:UIButton!
var bu3:UIButton!
var bu4:UIButton!
var bu5:UIButton!
var bu6:UIButton!
let im1 = UIImage(named: "nn");
let im2 = UIImage(named: "cb")
let im3 = UIImage(named: "bb");
let im4 = UIImage(named: "bc")
var ima1: UIImageView!
var ima2: UIImageView!
var po=0;
var po2=0;
var po3=0;
var dem=0
var dem2=0
var dem3=0

Vẽ các ảnh cùng nút bấm vào vị trí, set ảnh nền cho nút bấm, nhét vào view.
Copy xuống dưới viewDidLoad.
ima1 = UIImageView(frame: CGRect(x: 0, y: 10, width: 340, height: 340))
ima2 = UIImageView(frame: CGRect(x: 45, y: 420, width: 240, height: 40))
ima1.image = im1
ima2.image = im2
ima1.center = CGPoint(x: view.center.x, y:180)
ima2.center = CGPoint(x: view.center.x, y:390)
bu1 = UIButton(frame: CGRect(x:80, y: 440, width: 100, height: 42))
bu2 = UIButton(frame: CGRect(x:200, y: 440, width: 100, height: 42))
bu1.setBackgroundImage(im3, forState: .Normal)
bu2.setBackgroundImage(im4, forState: .Normal)
bu1.setTitle("Snore",forState: .Normal)
bu1.setTitleColor(UIColor.blueColor(), forState: .Normal)
bu2.setTitle("Pause",forState: .Normal)
bu2.setTitleColor(UIColor.blueColor(), forState: .Normal)

bu3 = UIButton(frame: CGRect(x:80, y: 500, width: 100, height: 42))
bu4 = UIButton(frame: CGRect(x:200, y: 500, width: 100, height: 42))
bu3.setTitle("Nút bấm",forState: .Normal)
bu4.setTitleColor(UIColor.blueColor(), forState: .Normal)
bu3.setTitle("Snore",forState: .Normal)

bu3.setTitleColor(UIColor.blueColor(), forState: .Normal)

bu5 = UIButton(frame: CGRect(x:80, y: 560, width: 100, height: 42))
bu6 = UIButton(frame: CGRect(x:200, y: 560, width: 100, height: 42))
bu4.setTitle("Pause",forState: .Normal)
bu6.setTitleColor(UIColor.blueColor(), forState: .Normal)
bu5.setTitle("Snore",forState: .Normal)
bu5.setTitleColor(UIColor.blueColor(), forState: .Normal)
bu6.setTitle("Pause",forState: .Normal)
bu3.setBackgroundImage(im3, forState: .Normal)
bu4.setBackgroundImage(im4, forState: .Normal)
bu5.setBackgroundImage(im3, forState: .Normal)
bu6.setBackgroundImage(im4, forState: .Normal)
view.backgroundColor = UIColor.whiteColor()
// Do any additional setup after loading the view.
view.addSubview(bu1)
view.addSubview(bu2)
view.addSubview(bu3)
view.addSubview(bu4)
view.addSubview(bu5)
view.addSubview(bu6)
view.addSubview(ima1)
view.addSubview(ima2)
Ứng dụng bây giờ trông như sau.
Copy hàm để play nhạc xuống trên ngoặc đóng dưới cùng.
func play(songPath: String){
let songUrl = NSURL.fileURLWithPath(songPath)
do {
tryplayer = AVAudioPlayer(contentsOfURL: songUrl)
player.delegate = self
player.prepareToPlay()
player.play()
player.numberOfLoops = -1
  } catch (let error asNSError) {
//print("audioPlayer error: \(error)")
 }
player.play()
}
Thêm hàm cho hai nút đầu tiên.
func nut1(sender: UIButton){
dem=1
dem2=0
dem3=0
po=0
let songPath = NSBundle.mainBundle().pathForResource("ac", ofType: "WAV")!
play(songPath)
    }
func nut2(sender: UIButton){
po=po+1
if(dem==1){
if(po%2==1){
player.pause()
        }
else{
player.play()
        }
        }
    }
Xem code một chút.
Tại nút 1 ta cho biến dem=1 tức đang play, sẽ dùng nó bên nút Pause, bật nhạc và set để po=0 tức không phải đang chờ. Các biến đếm khác = 0 tức không đang phát.
Sang nút Pause, ta cộng po lên rồi chia chẵn lẻ để nếu người dùng ấn một lần thì dừng, hai lần lại bật, cứ như vậy.
Dùng biến đếm bên nút Snore dem=1 tức là nếu đang phát thì mới Pause.
Các nút sau tương tự.
Copy thêm hàm cho các nút còn lại cùng hàm để ẩn thanh bar cột sóng.
func nut3(sender: UIButton){
dem2=1
dem=0
dem3=0
po2=0
let songPath = NSBundle.mainBundle().pathForResource("a", ofType: "wav")!
play(songPath)
    }
func nut4(sender: UIButton){
po2=po2+1
if(dem2==1){
if(po2%2==1){
player.pause()
            }
else{
player.play()
            }
        }
    }
func nut5(sender: UIButton){
dem3=1
dem=0
dem2=0
po3=0
let songPath = NSBundle.mainBundle().pathForResource("ab", ofType: "mp3")!
play(songPath)
    }
func nut6(sender: UIButton){
po3=po3+1
if(dem3==1){
if(po3%2==1){
player.pause()
            }
else{
player.play()
            }
        }
    }
overridefunc prefersStatusBarHidden() ->Bool {
returntrue
    }
Cuối cùng gắn các hàm vào các nút.
bu1.addTarget(self, action: #selector(ngay.nut1(_:)), forControlEvents: UIControlEvents.TouchUpInside)
bu2.addTarget(self, action: #selector(ngay.nut2(_:)), forControlEvents: UIControlEvents.TouchUpInside)
bu3.addTarget(self, action: #selector(ngay.nut3(_:)), forControlEvents: UIControlEvents.TouchUpInside)
bu4.addTarget(self, action: #selector(ngay.nut4(_:)), forControlEvents: UIControlEvents.TouchUpInside)
bu5.addTarget(self, action: #selector(ngay.nut5(_:)), forControlEvents: UIControlEvents.TouchUpInside)
bu6.addTarget(self, action: #selector(ngay.nut6(_:)), forControlEvents: UIControlEvents.TouchUpInside)
Chạy thử để thấy ứng dụng đã hoạt động, ấn các nút để kiểm tra, đang chạy nút này lại ấn nút kia xem có phát bình thường không.

Bạn có thể thêm nút Quit, trong đó để lệnh player.stop() để dừng phát khi người dùng thoát app.

No comments:

Post a Comment