(Post 05/10/2010) Engine Irrklang được phát
triển bởi Ambiera có hai phiên hệ, một miễn phí cho người dùng với mục
đích phi thương mại và một có phí đối với nhóm phát triển các sản phẩm
thương mại. Vào thời điểm thực hiện bài viết này Ambiera đã cho ra phiên
bản Irrklang 1.1.3c với nhiều tính năng mới và sửa nhiều lỗi trong các
phiên bản trước.
Đặc điểm
Irrklang là engine âm thanh 2D và 3D hỗ trợ nhiều hệ
điều hành khác nhau như Windows, Linux và MacOS. Được dùng nhiều trong
các trò chơi và các ứng dụng xử lý âm thanh.
Irrklang hỗ trợ các định dạng tệp tin âm thanh sau:
- RIFF WAVE (*.wav)
- OGG VORBIS (*.ogg)
- MPEG-1 Audio Layer 3 (*.mp3)
- AMIGA MODULES (*.mod)
- IMPULSE TRACKER (*.it)
- SCREAM TRACKER 3 (*.s3d)
- FAST TRACKER 2 (*.xm)
Bản thân engine ngoài việc hỗ trợ các thao tác thực thi
tệp tin âm thanh còn dựng sẵn bên trong các hàm xử lý hiệu ứng âm thanh
cao cấp như: Chorus, Compressor, Distorsion, Echo, Flanger Gargle, 3DL2Reverb,
ParamEQ và WaveReverb...
Bài viết này hướng dẫn lập trình với phân hệ miễn phí
dùng cho Windows. Để lập trình xử lý âm thanh với engine Irrklang, trước
hết bạn phải tải bộ thư viện Irrklang tại
đây
Sau khi giải nén chúng ta có bộ công cụ hỗ trợ lập trình
âm thanh gồm các tệp tin thư viện liên kết động (*.dll), hướng dẫn sử
dụng, các ví dụ cho Windows, và .NET.
Khởi động Engine
Sử dụng ngôn ngữ lập trình Visual C ++ 2005 Express.
Khuôn mẫu cho một chương trình sử dụng engine Irrklang như sau:
#include
using namespace irrklang;
#pragma comment(lib, "irrKlang.lib")
int main(int argc, const char** argv)
{
ISoundEngine* engine = createIrrKlangDevice();
if (!engine)
{
printf("Khong the khoi tao Engine \n");
return 0; // Lỗi khởi tạo engine
}
//Nạp và thực thi file âm thanh thông qua hàm play2d()
engine->play2D("nongnanhanoi.mp3", true);
engine->drop(); // Gỡ bỏ Engine khỏi bộ nhớ
return 0;
}
Diễn giải:
1. #include - Nạp file header irrklang.h
2. using namespace irrklang - Sử dụng
không gian tên irrklang làm không gian tên mặc định
3. pragma comment(lib, "irrKlang.lib")
- Dẫn hướng biên dịch để trình biên dịch nạp thư viện irrklang.lib
4. ISoundEngine* engine = createIrrKlangDevice();
- Khai báo một con trỏ thiết bị có kiểu ISoundEngine và khởi tạo Engine
với các tham số mặc định.
Có thể tách dòng lênh trên thành hai lệnh sau để mã chương
trình rõ ràng và dễ đọc hơn:
ISoundEngine* engine = 0;
engine = createIrrKlangDevice();
Đoạn lệnh sau kiểm tra việc nạp và khởi tạo Engine:
if (!engine)
{
printf("Khong the khoi tao Engine \n");
return 0; // Lỗi khởi tạo Engine
}
5. engine->play2D("nongnanhanoi.mp3",
true); - Thực thi file âm thanh sử dụng play2d(), đây là hàm thông dụng
để thực thi các tệp tin âm thanh khi sử dụng engine Irrklang, hàm này
có các tham số như sau:
- Tham số thứ nhất là đường dẫn và tên tệp tin âm thanh
- Tham số thứ hai qui định việc lặp lại.
6. engine->drop(); Khi kết thúc,
gọi hàm drop() để gỡ bỏ engine ra khỏi bộ nhớ.
Việc xử lý âm thanh đòi hỏi nhiều thao tác phức tạp,
trong khuôn khổ bài báo hạn chế nên không thể liệt kê hết ở đây. Chỉ xin
nêu một số chức năng mà engine Irrklang có hỗ trợ sẵn:
- stopAllsound(): Dừng việc thực thi các Tệp tin âm thanh
- setVolume(giatri): Đặt giá trị âm lượng
- setMinDistance(giatri): Đặt khoảng cách đến nguồn âm
- setPosition(vị trí): Đặt vị trí nguồn âm
Irrklang còn hỗ trợ việc điều khiển các tình huống âm
thanh:
- isFinished(): Dùng để kiểm tra việc đã thực thi xong tệp tin âm thanh
- isCurrentlyPlaying(): Kiểm tra tệp tin âm thanh đang được thực thi
Khi viết các ứng dụng xử lý âm thanh, chúng ta thường
muốn đưa vào các hiệu ứng cho âm thanh như: Chorus, Compressor, Distortion,
Echo, Flanger Gargle, 3DL2Reverb, ParamEq và WavesReverb,... Irrklang
xây dựng sẵn một số hàm chức năng để đáp ứng yêu cầu trên:
- enableEchoSoundEffect(): Bật chế độ nhại (vọng) âm
- enableChorusSoundEffect(): Bật chế độ hòa hợp âm
- disableAllEffects(): Tắt hết các hiệu ứng
Không thể bỏ qua một chức năng rất quan trọng đó là thực
thi các giá trị âm thanh được nạp trực tiếp vào bộ nhớ, đây là tính năng
cần thiết nhất đối với lập trình xử lý âm thanh, chúng ta có thể can thiệp
đến từng giá trị của âm thanh và xử lý nó trước khi cho thực thi.
- addSoundSourceFromMemory(): hàm dùng với quá trình xử lý âm thanh
trong bộ nhớ
- startRecordingBufferedAudio(): Bắt đầu thu âm
- stopRecordingAudio(): Dừng thu âm
- addSoundSourceFromRecordedAudio(): Nạp âm thanh đã thu vào con trỏ
nguồn âm để thực thi
Chú ý: Nếu trong quá trình thực hiện
bạn thấy chương trình không thực thi được một tệp tin *.mp3 thì có thể
khắc phục bằng cách copy tệp tin plugin ikpMp3.dll đi kèm theo với bộ
công cụ vào cùng thư mục chứa tệp tin chương trình của bạn.
Ths. Phạm Quang Vinh
(theo PC World VN) |