Search…

Giới Thiệu Audio trong Cocos2d-x 3.x.x

29/09/20204 min read
Các thao tác với audio trong game: play, stop, resume - một số chức năng cao cấp của Audio: setup, pre-loading, volume với Simple Audio Engine.

Âm thanh là 1 phần không thể thiếu trong 1 games, bài viết này hướng dẫn phát âm thanh với Simple Audio Engine trong Cocos2d-x 3.x.x.

Simple Audio Engine

Là 1 đối tượng singleton được Cocos2d-x xây dựng nhằm giúp những người lập trình game tạo ra âm thanh cũng như các hiệu ứng âm thanh trong trò chơi của họ, có thể gọi nó bất cứ nơi nào trong code, SimpleAudioEngine hỗ trợ 1 số định dạng bao gồm MP3 Core Audio Format.

Background music

Thường được dùng để làm nhạc nền cho trò chơi.

// Khởi tạo audio.
auto audio = SimpleAudioEngine::getInstance();

// Thiết lập play background music và được lặp đi lặp lại liên tục.
audio->playBackgroundMusic("stdio.mp3", true);

// Thiết lập play background music và hoạt động được 1 lần.
audio->playBackgroundMusic("stdio.mp3", false);

Phân tích

Có 2 tham số khi muốn sử dụng playBackGroundMusics():

  • Tên file nhạc: đoạn nhạc cần sử dụng, nế đoạn nhạc không lưu ở Resources thì cần thêm đường dẫn đầy đủ.
  • Vòng lặp: số lần chạy nhạc, giá trị mặc định là false (chạy 1 lần).

Sound effect

Thường được sử dụng khi trong games có một sự kiện

// Khởi tạo audio
auto audio = SimpleAudioEngine::getInstance();

// Thiết lập chạy effect music, và được chạy 1 lần.
audio->playEffect("stdioEffect.wav", false, 1.0f, 1.0f, 1.0f);

Ở đoạn code trên sẽ thấy 1 đoạn như sau: 1.0f, 1.0f, 1.0f.

  • 1.0f thứ 1: giá trị Pitch[0.5 tới 2.0], có thể hiểu như giá trị âm thanh của Audio như cho nốt cao hơn hay cho nốt thấp hơn, ở giá trị 1.0f thì giá trị này là giá trị của file audio gốc.
  • 1.0f thứ 2: giá trị Pan[-1.0 tới 1.0], hiệu ứng âm thanh Stereo.
  • 1.0f thứ 3: giá trị Gain[0.0 tới max],  âm lượng của Audio, với giá trị 1.0f là âm lượng ban đầu của file audio gốc.

Trong game, ngay sau khi bắt đầu chạy 1 background music hay effect music, tùy vào mục đích tại 1 thời điểm nào đó trong game cần phải pause (tạm dừng), stop (tắt), resume (bật lại). 

Pause

// Khởi tạo audio.
auto audio = SimpleAudioEngine::getInstance();

// pause background music.
audio->pauseBackgroundMusic();

// pause 1 sound effect.
audio->pauseEffect();

// pause tất cả sound effects.
audio->pauseAllEffects();

Stop

// Khởi tạo audio.
auto audio = SimpleAudioEngine::getInstance();

// stop background music.
audio->stopBackgroundMusic();

// stop 1 sound effect.
audio->stopEffect();

// stops tất cả sound effects.
audio->stopAllEffects();

Resume

// Khởi tạo audio.
auto audio = SimpleAudioEngine::getInstance();

// resume background music.
audio->resumeBackgroundMusic();

// resume 1 sound effect.
audio->resumeEffect();

// resume tất cả các sound effects.
audio->resumeAllEffects();

1 số chức năng Audio cao cấp khác

Setup

Nếu người chơi đang chơi game trên thiết bị di động bỗng có 1 cuộc gọi đến hoặc 1 tác vụ của điện thoại mà người chơi cần phải xử lý như thông báo sắp hết pin? Cocos2d-x khi có 1 tác vụ của thiết bị xảy ra có thể tạm dừng trò chơi.

// Tạm dừng trò chơi.
void AppDelegate::applicationDidEnterBackground() {
    Director::getInstance()->stopAnimation();

    // Nếu bạn có sử dụng SimpleAudioEngine bạn nên pause nó lại.
    // SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
}

// Gọi trò chơi của bạn trở lại khi bạn đã hoàn thành xong các tác vụ cần xử lý.
void AppDelegate::applicationWillEnterForeground() {
    Director::getInstance()->startAnimation();

    // Nếu bạn có sử dụng SimpleAudioEngine bạn nên resume nó hoạt động trở lại.
    // SimpleAudioEngine::getInstance()->resumeBackgroundMusic();
}

Với các dòng comment cho SimpleAudioEngine, nếu đang sử dụng background music hay sound effect, hãy bỏ nó đi để sử dụng.

Pre-Loading sound

Trước khi bắt đầu trò chơi, nên nạp trước các file audio vào bộ nhớ, điều này giúp trò chơi được liền mạch hơn, không bị gián đoạn do hiệu năng dành cho việc nạp audio.

// Khởi tạo audio.
auto audio = SimpleAudioEngine::getInstance();

// background music.
audio->preloadBackgroundMusic("stdioBackGroungMenuGame.mp3");
audio->preloadBackgroundMusic("stdioBackGroungGamePlay.mp3");

// sound effect.
audio->preloadEffect("stdioEffeectShot.wav");
audio->preloadEffect("stdioEffectCollision.wav");

// khi không cần sử dụng đoạn nhạc nào đó trong trò chơi.
audio->unloadEffect("stdioBackGroundMenuGame.mp3");

Volume

Nhằm thay đổi âm lượng của Audio, với 1 giá trị kiểu float, trên môi trường Win32 không thể thiết lập giá trị volume cho âm thanh được.

// Khởi tạo audio
auto audio = SimpleAudioEngine::getInstance();

// Thiết lập giá trị âm lượng cho audio của bạn với 1 giá trị kiểu float
audio->setEffectsVolume(0.5f); // với 0.0f là nhỏ nhất và 1.0f là lớn nhất.

Chú ý

Để sử dụng âm thâm trong Cocos2d-x, cần phải thêm thư viện và name space

#include <SimpleAudioEngine.h>

using namespace CocosDenshion;

Tổng kết

Với việc thêm âm thanh vào game sẽ tạo ra 1 diện mạo mới, hấp dẫn hơn cho game. Cần tránh sử dụng nhiều âm thanh nhất là sound effect để tránh gây loạn cho người chơi, có thể sử dụng các thâm thanh vui nhộn để tạo cảm giác thoải mái, kết hợp với button và slider để tùy chỉnh âm lượng trong trò chơi.

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024