signals and slots

C makes U hang yourself;
C++ even gives U a rope object to hang;
C# scourges U using a rope wrapper!

I rarely talk about programming unless it comes to some new idea or something fun. However, in this article, I’m going to summarize a part of experiences in my career, about important concepts that I’ve learned and used: signals and slots. First appear and remain as fundamental concepts in the Qt library (“Qt” pronounced “cute” – which is so cute as a cross-platform application framework), the concepts has been adapted and developed into some other libraries (such as boost) and are being proposed as next standards for C++ language.

Please note that we’re talking C/C++ here, although signals & slots has been brought to many other languages (Java, Python, Ruby, JavaScript, etc.) Every coin has two sides and C/C++ is no exception, it has its own advantages and disadvantages (depend on types of applications). But the thing I like about C/C++ is that its half – civilized nature made it a strong language: the balance between abstraction and comprehensiveness has always been considered as core factor.

Noone want to build general applications using Assembly, and noone want to write lengthy code just for some simple features. To adhere the doctrine, strong – abstraction concepts must be introduced to capture grammar of the language, and simple, clear syntax that would make the code concise and comprehensive.

I came to signals & slots as solution to problems I’ve met when leading the CMS project, a DVRs managing software (client & server) with complicated GUI: a few screens, each screen can have a dozen tabs, each tabs can have hundreds of controls. Events on one control can affect other controls on other tab or screen, events can be user inputs as well as various signals come from dozens of (managed) network client machines.

The overwhelmingly – complicated communications surpass every MPM (message passing method), then signals & slots appeared as a saviour solution. To be simple, signals & slots is a very efficient mean of interaction between objects within a process space. I personally think it would be the next metaphor extension added to C/C++ language. Structure of this post would be as follow:

1. Introduction to signals & slots, from raw to abstract concepts.

2. ISO C++ compliant and cross – compiler, cross – flatform problems (would discuss about delegate and how function pointer has evolved from C to C++).

3. Different implementations of signals & slots: Qt, boost, sigslot, libsigc++

1.   INTRODUCTION

Flow of code is no more than a series of function call, and to perform asynchronous function call, traditional C programming use callback. A callback is a pointer to a function, so if you want a processing function to notify you about some event, you pass a pointer to another function (the callback) to the processing function. Callbacks have two fundamental flaws: firstly, they are not type-safe, we can never be certain that the processing function will call the callback with the correct arguments. Secondly, the callback is strongly coupled to the processing function since the processing function must know which callback to call. In C, to define function pointer, you would write something like this:

float (*my_func_ptr)(int, char *);
typedef float (*MyFuncPtrType)(int, char *);
MyFuncPtrType my_func_ptr;

When move to C++, things are a bit more complicated (note the weird syntax ->* to call a member function through pointer).

float (SomeClass::*my_memfunc_ptr)(int, char *);
my_memfunc_ptr = &SomeClass::some_member_func;
SomeClass *x = new SomeClass;
(x->*my_memfunc_ptr)(6, "Another Arbitrary Parameter");

Though a very strong concept in C, function pointer add little to the language C++. The only two uses of member function pointer in C++ are:

  • Demonstrate the tricky syntax of the language.

  • Help in implementation of delegate.

Now, imagine slots as invisible communication channels, every object can register to listen to some channels by providing delegates (pointer to a member function). The delegate would be invoked when slot is “filled” with a signal. The signals and slots mechanism is type safe: signature of a signal must match signature of the receiving slot. Signals and slots are loosely coupled: a class which emits a signal neither knows nor cares which slots receive the signal. To summarize the benifits:

  • Syntactically neater: signals & slots make for very readable code: you define the signals, you define the slots, then you wire them up.

  • Inherently robust: when either end of a signal/slot connection is destroyed, the connection is automatically removed. It is therefore impossible to emit a signal and have it arrive at a class that has already been deleted. Best of all, you don’t need to write any cleanup code.

  • Easier code reuse: since the thing that has to type-agree is the signal and the slot, not the whole class interface, it is much easier to plug together disparate classes that had never initially been intended to work in that way.

2.   DELEGATE

To summarize section 1: pointer is the root of all evils. Function pointer is the physical of callback method traditionally used in C programming. When evolved to C++, the C++ standard committee failed to address how to define function pointer to a single C++ object. With common-sense knowledge, we know that it take two elements to represent the thing: first is the address of the object itself (the implicit pointer this), second is pointer to the object’s member functions. The undefined land leads to different implementations across various compilers.

Contrary to common belief, the actual physical storage of pointer differs between various compilers, and even differs between types of pointer, e.g: pointer to a single – inheritance object, an multiple – inheritance one or virtual inheritance. The table below shows how many bytes it take to store pointers on different compilers (just make use of the operator sizeof). Then to calculate the actual member function’s address, each compiler uses one kind or another of offset:

struct BorlandMFP
{
        CODEPTR m_func_address;
        int delta, vindex;
};
if (vindex==0) adjustedthis = this + delta;
else adjustedthis = *(this + vindex –1) + delta;
C++
compiler
void*
pointer
function
pointer
single
inheritance
multiple
inheritance
virtual
inheritance
MS VC++ 4 4 4 8 12
GNU G++ 4 4 8 8 8
Borland C++ 4 4 12 12 12

So, delegate is just the new name for pointer to (an object’s) member function. The hard part really is that: since each compiler stores different type of pointers differently, there’s need for a way to store delegate in a universal manner: cross compilers and cross flatforms. Various techniques have been proposed by excellent programmers. Please refer to the articles below for specific techniques. I personally would prefer the method of Quynh Nguyen, an engineer at Global Cybersoft (Vietnam) Ltd.

3.   IMPLEMENTATIONS

To make those obscured concepts above clearer, I would go into some detailed implementations of signals & slots with the emphasize on the sigslot library, for this is really a compact lib: everything is contained in just one header file. Suppose you have a server that would receive some signal from network (tcp socket), then parse the received data and trigger some processing (display on GUI, store to disk…). We would define the “network signal” as follow (please note any number of parameters can be defined, we use an int and a char* here just for the example):

// the temmplate ‘signal2’ denote for
// a signal with 2 parameters

signal2<int, char*>m_netSig;

Then, at the place you want to process that event, e.g some class CDisplayForm, you would need to provide a function to process the signal:

DisplayForm::OnNetSig (int cmd, char* data)
{
  // the delegate would be invoked
  // when the signal is recieved

}

Please note that multiple objects can register to a same signal slot (and vice versa), e.g some class CRecordThread would also need to log that event to database. Then the listening objects would just register with the signal slot using a connect function:

// we pass the function pointer
// here to be called later

m_netSig.connect (this, &CDisplayForm::OnNetSig);

When the network signal arrive, e.g in some class CAsyncSocket, we would fire the signal and get it populated to all connected objects:

// emit the signal with it’s data
m_netSig.emit (NETSIG_DATA_RECEIVE, xmlStr);

Then the CDisplayForm and CRecordThread object would both receive the signal. Please note that when either end of the communication channel go out of scope, the connection is automatically removed, you don’t have to write any cleanup code. Just define the signal, the slot and wire them up! Any unrelated classes can be wired up in this type-safe manner without any pre-defined relation within them.

Speaking as an ex-hardware designer, I’d like software components to have pins around their edges, like ICs, so they can be ‘wired up’, but otherwise should be well behaved… I don’t want to know how that pin is wired internally – I just want to know that it will work when I send a signal into it.
(Sarah Thompson – sigslot library)

lucky luke – 2

Bộ truyện tranh Lucky Luke thú vị trong từng chi tiết nhỏ: một lão thợ hớt tóc người Ý (thợ hớt tóc luôn phải là người Ý) mang cái tên Baldini (chẳng phải đã có câu thành ngữ: Never trust a bald barber đó sao), một tay tướng cướp lấy biệt hiệu là Po-8 (đọc như poet – nhà thơ)… Những nét cá tính và văn hoá Mỹ được mô tả một cách cô đặc, cường điệu và đầy tính hài hước.

Quá khiếp sợ vì 4 anh em nhà Dalton…

Và sáng kiến sửa chữa bánh xe độc đáo…

Ngay cả tiếng ngáy của những con người khác nhau cũng sẽ khác nhau.

Cuộc sống của những cao-bồi, lúc nào cũng canh chừng nhau thế này, ai đó hắt hơi thì sẽ có đổ máu.

Con sư tử mang tên đô đốc Nelson, và những chế giễu trên cái tên.

Thức uống của người và ngựa.

Lập trường nghề nghiệp của tay nhà đòn.

Đạo đức của người và ngựa.

Vận mệnh lớn lao của nước Mỹ qua việc treo cổ một người khác.

ôi những dòng sông nhỏ…

Một trong những bài hát hiếm hoi của Trịnh Công Sơn mà tôi thích, nhất là khi nghe không lời. Một trong số ít ỏi những bản nhạc của ông ăn sâu vào tâm hồn tôi như là kỷ niệm… Những trình bày khác nhau của bản nhạc, một hòa tấu piano, một độc tấu guitar (Võ Tá Hân), và một qua giọng hát khá thuyết phục của Trần Thu Hà (với guitar đệm thật đáng yêu). Một vài bìa nhạc Trịnh Công Sơn:

Tình xa - Piano (?) 
Tình xa - Guitar (Võ Tá Hân) 
Tình xa - Trần Thu Hà 

lucky luke – 1

Một bộ truyện tranh theo tôi là hay nhất trong tất cả những truyện tranh, Lucky Luke, hay hơn cả những truyện nổi tiếng khác như Asterix & Obelix hay Tintin. Truyện có không gian đa dạng, nhiều vị trí địa lý, nhiều thời điểm lịch sử, nhiều nhân vật của miền viễn Tây nước Mỹ thời gian đầu. Những tình huống được nhìn dưới các quan điểm khác nhau, đôi khi có vẻ “ngớ ngẩn”, nghề nghiệp và các nguyên tắc “bất di bất dịch” của nó… Những ẩn dụ trong Lucky Luke vẫn tiếp tục được trích dẫn rộng rãi trong nhiều tình huống của cuộc sống.

Tài bắn súng của Lucky Luke.

Trở ra từ phòng đánh bài.

Billy the Kid đi ăn cướp.

Anh em nhà Dalton, và thái độ khi bị gọi là “công dân lương thiện”.

Khi tàu sắp mắc cạn, thuyền trưởng không muốn bớt một chút nước nào từ dòng sông.

Thị trấn cờ bạc, nơi thị trưởng, con trai và cả con chó đều bị trét hắc ín và lông chim.

Trong tù, có được khẩu súng thật, Averell Dalton.. đi làm khẩu súng giả.

Mỗi thị trấn đều có một câu slogan và lòng hiếu khách khác nhau.

Về tính khí thất thường của con sông Mississipi.

Lão thợ sắp chữ nhà in và lời chào viết ngược theo đúng tác phong nghề nghiệp.

bang bang

Bang Bang (My baby shot me down) is quite a special song: written by Sonny Bono, performed by Cher (1966), covered by Nancy Sinatra (1967), and has been translated to various languages since then. Younger people would recognize the the music as main soundtrack in the film Kill Bill (2003).

Bang bang - Sheila 
Khi xưa ta bé - Mỹ Tâm 
My baby shot me down - Nancy Sinatra 

I actually did thought it was a French song, until I listened to the gentle My baby shot me down, the original soundtrack is really simple, and moving, compared the glamourous French version.

ipix fish-eye camera


the dome camera and it’s Nikon fish-eye lens

Image above: Ipix’s raw format (spherical image). Click to try the Ipix static image viewer in a separate window, which helps to view a single Ipix’s frame, wrapping from raw format to normal rectangular format (not the video).

This is among the most interesting things I’ve ever worked on: Ipix’s CommandView™: fish-eye cameras which provide a 360° x 180° field of vision. This camera and it’s technology were very special and advanced at the time, about 3, 4 years ago, it were so new that the manufacturer could not survive the small market share and went bankruptcy. However, the technology has now revired at http://www.ipix.com. The camera came with some totally new concepts, patents and technologies. Some information on Ipix:

Ceiling or wall-mounted, with thick hard steel cover, the camera is designed to operate indoor or outdoor, and can withstand a temperature range from -40°C to 60°C. It costs about $2100 at the current time, and about $5000 when it first appeared. CommandView™ Dome is an IP camera, having a small Linux computer inside, once plugged onto LAN or WAN, the camera turns into a video server and can stream video in many protocols: http, ftp, rtp, or multicast. There’re 3 ways to control the camera: ssh to the Linux machine, access to it’s web-server or programatically use the XML-RPC interface. The product has a very matured and solid development flatform.

CommandView™ Dome is a mega-pixel camera (2 MB, 3 MB). The unique feature of this product is that it provides a 360° x 180° field of view with no moving parts. See the image beside (on the left – click to view a mega-pixel version), every details in the room is captured on a parabolic sphere (called wrapped image). To have a normal view, a region on the sphere is dewrapped (by software) into usual rectangular plane.

Since a whole 360° space is captured, PTZ (pan / tilt / zoom) is just a matter of dewrapping, there’s no need to motorize the camera for different sighting fields. This special camera has broadened the definition of ‘panorama’ and has many applications in security surveillance as well as photography. I myself found it very interesting to apply the concepts and softwares to demonstration and show-case purposes (search for ‘ipix’, the name has gone far beyond just a type of camera).

gió mùa xuân tới

Thời tiết càng năm càng lạ, mới giữa tháng 11 mà Sài Gòn đã có những sáng se se lạnh, còn Hà Nội đã phải mặc áo ấm. Sáng sáng ra đường có cảm giác như mùa xuân sắp về, phóng xe ào ào trên đường, tưởng đâu đây có mùi nhang khói. Trong lòng không khỏi có chút sảng khoái, nôn nao như lúc giao mùa. Ở mãi cái xứ phương Nam bốn mùa chẳng mấy khác biệt này, giao mùa là một đặc ân mà không phải lúc nào cũng cảm nhận được. Không gian, thời gian, tất cả bối cảnh xung quanh như nhắc thầm: hãy để những đổi thay nho nhỏ len vào tâm hồn, hãy cố cảm nhận chúng, tích cóp chúng, để tự làm mới mình trong mọi điều nhỏ nhoi như thế!

album: con tạo xoay vần


Chiều nao nơi bãi hoang, lại ghé thăm mộ nàng, nhặt đóa hoa rụng vàng, thế thôi ngủ ngon em nhé, một giấc mơ màng. Nhìn hàng cây liễu dương, chạy suốt muôn dặm đường, chạnh nhớ câu đoạn trường. Cố nhân vừa rũ áo, về với vô thường. Chiếc bóng khoác nón ra đi cuối nơi con đường.

Vốn dĩ tính không thích giải thích, nên chọn cách nói bằng nhạc. Hôm nay xem lại những post của mình, cảm giác: tệ! nói (viết) nhiều mà chẳng có nhiều điều mới! Nếu làm tư liệu thì đã có khối những web khác, nếu là tâm sự cá nhân thì hơi lang bang. Muốn diễn đạt điều gì mới (cho dù là trong những thứ cũ) nhưng sợ không có người đồng cảm.

Hoàng hạc tịch dương - Mai Hương 
Nguyên tác: Dolente immagine di Fille mia – Vincenzo Bellini.

Dạ hương thiên lý - Thái Hiền 
Nguyên tác: Memory (từ vở opera Cats) – Adrew Lloyd Webber.

Đặt lời Việt cho nhạc cổ điển không phải là điều gì mới, nhạc sĩ Phạm Duy và những nhạc sĩ khác đã đặt lời cho rất nhiều nhạc phẩm cổ điển: Dòng sông xanh, Sóng nước biếc, Vũ nữ thân gầy, Trở về Soriento, Khúc ban chiều .v.v.

Album Con tạo xoay vần sau đây thì thật sự mới lạ: đem ý Đường-thi phổ vào nhạc cổ điển phương Tây. Đem ý thơ của Lý Bạch, Bạch Cư Dị, Tiết Đào, Lý Hạ… phổ vào nhạc của Offenbach, Tchaikovsky, Bellini… đem tinh yếu của Đông và Tây hòa lẫn vào nhau. Hòa âm đơn giản, chỉ có một piano đệm, và các giọng hát được thu âm trực tiếp bằng kỹ thuật thu âm nổi, không qua xử lý bằng máy tính.

Album này theo tôi là hay và tinh tế hơn nhiều so với Chat với Mozart của Mỹ Linh. Trong album của Mỹ Linh, phần lời chưa ăn khớp được vào giai điệu và tiết tấu. Với album này, những giai điệu nhẹ nhàng được chọn từ các bản opera nổi tiếng, với lời nhạc lấy ý từ Đường-thi, tất cả tạo nên một loại âm nhạc vừa cao sang, vừa gần gũi. Kỹ thuật thu âm càng giúp cho hơi nhạc giản dị, tự nhiên đi vào lòng người.

abba – the piper – remixed

Tìm thấy bài rất yêu thích này trong một remixed – collection của ABBA, 2006. Rất mê bài này không chỉ vì phần nhạc mà còn vì phần lời: rất hiểu và cũng chẳng hiểu gì cả về phần lời đầy ẩn dụ, nhiều người đã bàn cãi nhưng vẫn không làm rõ được lời hát ám chỉ điều gì.

The piper - Remixed version 
The piper - Original version 

Bài hát sử dụng một thành ngữ Latin: sub luna saltamus – nhảy múa dưới ánh trăng; Chúng ta đều đi theo theo những giai điệu lạ kỳ, chúng ta đều bị hiệu triệu bởi một âm điệu nào đó, chúng ta đi theo người thổi sáo, rồi chúng ta nhảy múa dưới ánh trăng. Tuy chưa hiểu The piper ám chỉ điều gì, nhưng chính bài hát đã là một The piper, nó đã seduce rất nhiều người nghe.

Trên tầng nghĩa đơn giản nhất, lời bài hát cũng đã có một sức diễn tả mạnh: chúng ta ai cũng đi theo một giai điệu lạ kỳ nào đó mà ngay cả chúng ta cũng không hiểu nổi, đuổi theo những fantasies thoáng qua trong cuộc đời để rồi trong một phút tĩnh tại nào đó của tâm hồn, dừng lại để nghĩ về đời mình, vẫn thấy mình tự do và không có gì để hối tiếc…

hà thanh – chim họa mi xứ huế

Không như những gì viết trên wiki: Hà Thanh sinh ra trong một gia đình gia giáo chỉ có một mình bà đi theo nghiệp âm nhạc, mẹ tôi (lúc còn học ở trường Đồng Khánh có chơi với một số chị em trong gia đình này) cho biết gia đình Hà Thanh là một gia đình có truyền thống cổ nhạc, tuy không ai đi theo con đường âm nhạc chuyên nghiệp nhưng đờn ca hát xướng đã là môi trường từ nhỏ trong gia đình. Hà Thanh đến với âm nhạc từ rất sớm, tham gia hát cho đài phát thanh Huế từ những năm 50. Bà tham gia cuộc thi tuyển lựa ca sĩ do đài tổ chức (giống như cuộc thi Tiếng hát Truyền hình bây giờ) và dành giải nhất với ca khúc Dòng sông xanh (Johann Strauss).

Ai lên xứ hoa đào - Hà Thanh 
Các anh đi - Hà Thanh 

Những năm 60, bà gia nhập làng văn nghệ Sài-gòn, trở nên nổi tiếng và thường xuyên xuất hiện trên sóng phát thanh cũng như trong các chương trình Đại nhạc hội. Hà Thanh có giọng hát rất đặc biệt, cao sang, trong mà mềm mại. Nghe bà hát, ta mới cảm thấy những luyến láy nhấn nhá đặc trưng của một giọng hát cũ. Hơn thế nữa, giọng Hà Thanh rất Huế, một giọng Huế sang trọng và tinh tế. Mời các bạn thưởng thức giọng ca Hà Thanh qua hai ca khúc: Ai lên xứ hoa đào (Hoàng Nguyên) và Các anh đi (Văn Phụng).

avt chúc xuân

Sau đây là tiết mục chúc xuân của ban AVT tái lập tại hải ngoại. Thành phần cũ của ban chỉ còn duy nhất nhạc sĩ Lữ Liên, bổ sung thêm hai thành viên mới Trường Huy & Hoàng Long nhưng vẫn giữ cái tên AVT cũ. Hai thành viên cũ ở lại VN sau 75: Tuấn Đăng thì biệt tích, còn Vân Sơn nhảy xuống kênh Thị Nghè tự tử, nghệ sĩ hài kịch không chịu đựng nổi những bi kịch cuộc sống. Xin post ở đây tiết mục Chúc xuân, có thể xem video trên youtube hay nghe file âm thanh rời.

AVT Chúc xuân 
Lữ Liên, Trường Huy, Hoàng Long

Nghe AVT thích thú nhất là ở chỗ ban nhạc sử dụng nhuần nhuyễn các làn điệu dân ca Bắc và Trung bộ (tuy vậy lại không có dân ca Nam bộ), diễn tấu thành thục các nhạc cụ dân tộc (đàn nhị, tỳ bà, đàn đoản…), cũng như sự kết hợp phong phú giữa nói, nói lối, ngâm thơ và hát… Ba người trên sân khấu thường giả giọng nói của ba miền Bắc, Trung, Nam, rất giống, rất thật, lại là loại giọng cũ chỉ còn nghe thấy được ở lớp người già cả.

Bản Chúc xuân này là bài bản cũ, có customize lại chút xíu, tuy vậy chẳng mấy chốc cũng đã lạc hậu so với cuộc sống nơi trời Tây, may ra đem về VN thì vẫn còn nhiều giá trị. Mới tháng 10 nhưng nghe AVT xong cảm giác như Tết sắp đến: năm mới, cuộc đời phây phây, năm mới gặp thời gặp may, năm mới bạc triệu tới tay, năm mới không phải kéo cày, năm mới cuộc đời lên hương, năm mới tràn đầy yêu thương, năm mới thần tài giúp ta, năm mới năm đẹp Thái Hòa…

khát vọng

渴望

悠悠岁月欲说当
年好困惑亦真亦
幻难取舍悲欢离
合都曾经有过这
样执着究竟为什
么漫漫人生路上
下求索心中渴望
真诚的生活谁能
告诉我是对还是
错问询南来北往
的客恩怨忘却留
下真情从头说相
伴人间万家灯火
故事未来共斟酌

Khát vọng: những ai thuộc thế hệ 7x có thể sẽ nhớ phim này, chiếu trên truyền hình VN đầu những năm 90. Không nằm trong số những phim TQ thành công nhất, nhưng 50 tập phim mang lại những tình tiết cảm động của những cảnh đời thời cách mạng văn hoá. Dù ở TQ hay VN, dù ít hay nhiều, chúng ta đã sống qua những tháng ngày như thế, những đày đoạ và thăng trầm, những điên rồ của lịch sử, và những hậu quả dai dẳng của nó… hãy nhớ để đừng bao giờ quên chúng! Cố sự bất đa, uyển như bình thường nhất đoạn ca: chuyện cũ chẳng nhiều, cũng bình thường như một khúc ca… Đã trải qua rồi, phải như thế nào đó mới nói được một lời như thế! Truyền hình VN thực hiện việc thuyết minh đã chuyển ngữ lời nhạc thành một đoản khúc thơ lục bát thật khó quên:

hoàng trọng

Lòng càng thổn thức, quên hết bao mối hận mà đi.
Yêu đương say đắm mà chi, xa xôi đem thú biệt ly.
Sầu nhớ đau thương làm chi!

(Khúc nhạc ly hương)

Từ nhỏ tôi đã nghe nhiều nhạc của Hoàng Trọng mà chưa hề biết tác giả là ai. Những ca khúc Khúc nhạc ly hương, Ngàn thu áo tím, Nhạc sầu tương tư, Gió mùa xuân tới, Tiến bước sang ngang, Đẹp giấc mơ hoa… đã gieo vào hồn tôi những dáng nhạc độc đáo, riêng biệt. Sau này, càng tìm hiểu, tôi càng được biết nhiều hơn về con người lao động nghệ thuật cần mẫn, nghiêm nhặt này.

Nghìn thu áo tím - Thái Thanh 
Dừng bước giang hồ - Khánh Ly 

Học nhạc, sáng tác và làm ban nhạc từ rất sớm, Hoàng Trọng là người có khả năng tổ chức, ông đã làm phòng trà Thiên Thai ở Nam Định từ rất sớm (1945). Trong chiến tranh, ông là trưởng ban quân nhạc Bảo Chính Đoàn (quân đội Pháp), đến năm 1954 thì di cư vào Nam. Ở Sài gòn, ông thành lập nhiều ban nhạc chơi cho các Đài phát thanh Sài gòn, Đài phát thanh Quân đội, Đài Truyền hình… nổi tiếng nhất là ban hợp xướng Tiếng tơ đồng (1967).

Ông sáng tác khoảng chừng 200 tác phẩm, phần nhiều là theo điệu tango, và nhiều nhạc cho phim ảnh. Hoàng Trọng còn nổi tiếng với tư cách là người chỉ huy dàn nhạc và người soạn nhiều phần hòa âm giá trị. Tuy đã rao là Hoàng Trọng – vua nhạc tango Việt Nam nhưng ở đây, mời các bạn nhớ lại người cố nhạc sĩ tài hoa này qua hai tác phẩm của ông, một theo điệu valse: Nghìn thu áo tím và một theo điệu pasodoble: Dừng bước giang hồ.

Một vài bìa nhạc Hoàng Trọng:

ngọc cẩm & nguyễn hữu thiết

Kể về tình hình Tân nhạc tại miền Nam trước 1975 mà bỏ qua cặp vợ chồng song ca Ngọc Cẩm & Nguyễn Hữu Thiết thì quả là một thiếu sót. Người miền Nam bấy giờ rất mê nhạc, cải lương thì có Thanh Nga, tuồng cổ thì có Phùng Há, vọng cổ thì có cậu Út Trà Ôn… Tuy vậy lớp trẻ lại thích Tân nhạc hơn. Chính quái kiệt Trần văn Trạch là người cải tiến các show diễn. Ông đề nghị thêm phần biểu diễn Tân nhạc vào trước các buổi chiếu phim, về sau lại tổ chức các chương trình Đại nhạc hội. Cũng chính ông là người giới thiệu cặp “danh ca miền Trung” Ngọc Cẩm & Nguyễn Hữu Thiết trước công chúng Sài-gòn. Cặp danh ca này nổi tiếng với khán thính giả miền Nam từ đó, với các bản dân ca hay tình ca, trên các sân khấu nhạc hội hay qua làn sóng phát thanh. Những đĩa nhạc của họ bán chạy như tôm tươi và có sức lan tỏa rộng trong quần chúng nghe nhạc.

Gạo trắng trăng thanh 
Ai đi ngoài sương gió 

Với thế hệ cha mẹ tôi, nhạc và giọng ca Ngọc Cẩm & Nguyễn Hữu Thiết là điều gì gần gũi, rất “Vietnamese – native” như những món cơm hến, bún bò Huế. Thêm một chi tiết nữa là Ngọc Cẩm & Nguyễn Hữu Thiết chính là song thân của ca sĩ nổi tiếng Hồng Hạnh sau này. Mời các bạn thưởng thức hai giọng ca dân dã, tự nhiên mà truyền cảm này qua một bản “dân ca” Gạo trắng trăng thanh và một bản tình ca Ai đi ngoài sương gió (hai bài trong băng nhạc 18 tình khúc quê hương yêu dấu). Nhất là Gạo trắng trăng thanh là bản nhạc có mức độ phổ biến sâu rộng trong quần chúng thính giả, đến mức nó có một bản lời “chế” như sau: Ai đi qua trên cầu Bông, té xuống sông ướt cái quần nilông…

Một vài bìa nhạc Ngọc Cẩm & Nguyễn Hữu Thiết:

quái kiệt trần văn trạch

Năm thế hệ nhà họ Trần: ông sơ Trần Quang Thọ là nhạc sĩ cung đình Huế, ông cố Trần Quang Diệm được gởi đi Huế học đàn tỳ bà và sau đó nổi tiếng khắp miền Nam với ngón đàn này, ông nội Trần Quang Triều nổi tiếng trong giới cổ nhạc với ngón đàn kìm. Phía bên ngoại thì có ông cậu 5 Nguyễn Tri Khương (cháu nội Nguyễn Tri Phương) chuyên về sáo, và cậu 4 là nhạc sĩ Nguyễn Mỹ Ca. Đến thế hệ thứ 4 thì có anh cả GS Trần văn Khê, người không cần phải nhắc đến thì ai cũng biết là ai, người con thứ là Trần văn Trạch, một quái kiệt độc nhất vô nhị của Tân nhạc Việt Nam.

Cái đồng hồ tay 
Tai nạn tê-lê-phôn 
Chiều mưa biên giới 

Thế hệ thứ 5 của gia tộc này là TS âm nhạc Trần Quang Hải, người vẫn tiếp nối ông cha đóng góp cho nền cổ nhạc nước nhà. Trần văn Trạch được xem là hiện tượng độc nhất vô nhị trong làng Tân nhạc, chuyên sáng tác và biểu diễn nhạc hài, là nghệ sĩ hài “trí thức” duy nhất đương thời, hát tân nhạc, cổ nhạc, làm kịch, làm phim, tổ chức các chương trình Đại nhạc hội (bao gồm đầy đủ ca, vũ, nhạc, kịch, hài, tạp kỹ… trong một chương trình văn nghệ).

Lần đầu nghe Trần văn Trạch ca, tôi lập tức thích cái giọng ông, một giọng nói đặc sệt Nam bộ, tự nhiên, bình dân, không kiểu cách. Nó làm tôi nhớ đến “một thời đã xa”, khi mà những gì sáng tạo, mới mẻ đều khởi phát từ những gì tự nhiên bình thường nhất, không cần phải đi qua những lăng kính méo mó như thực trạng văn hóa, văn nghệ hiện tại. Bao nhiêu năm xây dựng XHCN đã làm suy đồi con người cũng như các nền tảng văn hóa nghệ thuật… Xin giới thiệu đến các bạn hai tác phẩm hài do nghệ sĩ Trần văn Trạch sáng tác và trình bày. Chúc các bạn những trận cười sảng khoái!

Tôi thường có cảm giác rằng những người hiểu sâu về sắc điệu thì không vướng chấp vào cái vỏ âm thanh bên ngoài và dể tiếp cận đến tầng âm nhạc. Đa số các ca sĩ hiện nay đều có những chất giọng vay mượn, không ai bằng lòng với cái âm sắc cha sinh mẹ đẻ của mình. Mời các bạn nghe Trần văn Trạch hát Chiều mưa biên giới, một ca khúc phổ biến trong giới bình dân ở miền Nam trước 1975, nghe để thấy được rằng giọng nói chúng ta bất kể nguồn gốc thế nào, tự nó đã là vốn thiên phú của chúng ta rồi, không cần phải học đòi gượng ép.

ban kích-động-nhạc avt

Lẳng lặng mà nghe họ chúc nhau,
Chúc nhau mạnh mẽ khỏe như trâu.
Chúc nhau tiền của giàu như nước,
Chúc đẻ vừa xong lại… có bầu.

(Chúc xuân – Lữ Liên – ban AVT)

Trong các ban nhạc chơi theo trào lưu mới (nhạc Mỹ) ở miền Nam trước 75, có một ban rất đáng lưu ý gồm 3 thành viên: Anh Linh, Vân Sơn, Tuấn Đăng, do đó mà có cái tên AVT. AVT thường xuất hiện trong trang phục áo dài khăn đóng, chơi nhạc cụ Tây phương (guitar, trống…) hay nhạc cụ cổ truyền (đàn nhị, tỳ bà, đàn đoản…).

Được biết đến ban đầu với cái tên ban kích-động-nhạc AVT, về sau đổi thành Tam ca trào phúng AVT, AVT đã thu những đĩa riêng, và từ khi ở miền Nam bắt đầu có vô tuyến truyền hình, AVT thường xuất hiện trên các chương trình chúc xuân đầu năm.

Em tập vespa 
Ba bà mẹ chồng 

Nhạc của AVT rất đặc biệt, vừa rất mới, vừa rất cũ: mới vì hòa âm “rặt” Mỹ, cũ vì phần nội dung rất chi Lý Toét và Xã Xệ. Không như các ban kích-động-nhạc đương thời đều làm nhạc Trẻ, AVT là ban nhạc duy nhất có chủ đề, nội dung rất chi đại chúng: trào phúng, khôi hài, mà với trình độ âm nhạc cao.

Mời các bạn điểm qua 2 tác phẩm tiêu biểu của AVT, chắc rằng ai cũng sẽ có những trận cười no nê với Ba bà mẹ chồng kể chuyện ba bà mẹ Bắc, Trung, Nam ngồi nói xấu những nàng dâu và Em tập Vespa, kể chuyện một anh chàng kèm một em “tập đi xe Vespa”. Chúc các bạn những trận cười thoải mái!

Lẳng lặng mà nghe nó chúc nhau,
Chúc nhau đầu trước đón đầu sau.
Phen này nhiều kẻ xây cao ốc,
Thiên hạ bao nhiêu đứa nhảy lầu.
(TKXuyen’s version)

mal

Lúc chúng ta rĩ rã nhạc Pháp thì Christophe làm album có bài Mal này với tựa đề Anh

Nhớ lúc nhỏ, lũ nhóc cấp 2 chúng tôi luôn nghĩ ra những trò tiêu khiển giết thời gian thú vị. Tôi còn nhớ một trong những trò đó là ngồi tìm ra những từ tiếng Việt gốc Pháp, chẳng hạn như cái ba-ri-e (barrière) là cái rào chắn, hay ra-đi-a-tơ (radiateur) là bộ phận tản nhiệt của xe máy… Mặc dù chưa hề biết tiếng Pháp, lũ nhóc chúng tôi vẫn cãi nhau, lục tìm từ điển để minh chứng cho những ví dụ của mình. Bạn cu Bông (Quang Khải) hẳn còn nhớ trò chơi này.

Mal - Christophe 
Cơn đau tình ái - Elvis Phương 

Bây giờ thì tôi tìm ra một từ khác: Mal, như trong tiếng Việt, khi người ta nói: cái thằng đó hơi bị man man. Vốn gốc chỉ có nghĩa là đau, bệnh, qua tiếng Việt từ đó đã phái sinh một nghĩa mới: đau bệnh theo kiểu thần kinh. Ảnh hưởng của văn hóa Pháp lên văn hóa Việt thật sâu đậm, tìm thấy khắp trong ngôn ngữ, ca từ, ca khúc! Đôi lúc lại có cảm giác rằng chúng ta tiếp thu văn hóa nước ngoài không hẳn là thiếu chọn lọc, nhưng vẫn quá ư dễ dãi. Đến tận những năm 70, khi văn hóa Mỹ đã lan tràn khắp miền Nam Việt Nam, các phòng trà Sài-gòn vẫn rỉ rả những ca khúc Pháp. Trong trào lưu hát nhạc Pháp lời Việt này, nhạc sĩ Phạm Duy đã đặt lời cho hàng loạt ca khúc Pháp, mà bài này là một đơn cử.

Rồi những ban nhạc rock đầu tiên của Sài-gòn (lúc ấy không gọi là nhạc rock mà gọi là kích-động-nhạc) vẫn tiếp tục lấy những cái tên Pháp, đặt lời theo kiểu Pháp nhưng làm nhạc theo lối Mỹ. Đúng là một loại tranh collage sinh động. Tôi sẽ còn trở lại với chủ đề những ban “kích-động-nhạc” đầu tiên của Sài-gòn trong một bài khác, những Elvis Phương, Lê Hựu Hà, Tuấn Ngọc, những Trần văn Trạch (em ruột Trần văn Khê), Lữ Liên (ban kích-động-nhạc AVT)… những cậu ấm Sài-gòn gốc “Bắc cầy” đã tiếp tục làm nên những trào lưu nhạc mới. Điều đáng lưu ý là trong những trào lưu này dần xuất hiện những loại nhạc giải trí, nhạc tuýt, lần đầu tiên văn nghệ ở VN bước ra khỏi “tháp ngà hàn lâm” để mang hơi thở đời thường của cuộc sống.

Mal, bài hát này thích đã lâu, lúc này lại đúng là lúc để hát: Mal, au fond du coeur, oui j’ai mal (Đau! Từ đáy trái tim ta buồn đau!). Bài gốc có phần hòa âm thật hay, đúng tông yêu thích của tôi, còn bài lời Việt chỉ để nghe tham khảo!

chanson de solveig

Vốn âm nhạc cổ điển chẳng có được mấy bài, chỉ biết và thích được một đôi bài ngăn ngắn, đại loại như một số serenade, polonaise, nocture, overture… Nhưng đặc biệt thích Chanson de Solveig này, từ nhỏ đã nghe qua tiếng hát Lê Dung, mà không biết rằng từ trước ở miền Nam, nhạc sĩ Phạm Duy đã có đặt một lời Việt khác hay đến như vậy: Một lần người đưa tiễn nhau, như vẫn cầu lời hứa năm nào, đằm thắm cho vui lòng nhau… Cuộc đời từ trong chiếc nôi, đã quay về cùng với gió bụi, về chốn không tên xa xôi. Càng thêm yêu bản nhạc vì cái lời đẹp vậy.

Khúc hát nàng Solveig - Lê Dung 
Chanson de Solveig - Edward Grieg 
Solveig's song - Sarah Brightman 

Thường cần nghe nhạc không lời, dể nắm được dáng nhạc, xong rồi thì hát lời Phạm Duy vậy. Lời tiếng Anh, hát đến líu lưỡi mà vẫn không ăn được cách ngắt câu nhả chữ của nó! Cái giai điệu đẹp một cách giản đơn, như muốn tự giới hạn mình trong một cảm xúc hẹp và cô đọng, nghe như tiếng gió Bắc phương thổi qua những fiord buồn bã của xứ Scandinavi. Những tình khúc đẹp thế này vẫn thường được dùng làm bài ca vĩnh biệt, như cái ám danh tiếng Pháp của nó (Chanson de l’adieu) đã chỉ rõ!

trường ca Hòn vọng phu, 1

Đồng-đăng có phố Kỳ-lừa,
Có nàng Tô-thị họ vừa nung vôi.

(nhại ca dao)

Núi đá vôi “Hòn vọng phu” – Đồng-đăng, Kỳ-lừa, giống hệt một thiếu phụ ôm con đứng chờ chồng về. Ảnh lấy từ trang web phamduy.com

Từ lâu đã nhắc đến Trường ca Hòn vọng phu của nhạc sĩ Lê Thương nhưng chưa post bản nhạc này một cách đầy đủ bao giờ. Đây là trường ca đầu tiên, báo hiệu bước trưởng thành của Tân nhạc. Bản nhạc được chia thành 3 phần. Phần 1: ngày ra đi: lệnh vua hành quân trống kêu dồn, quan với quân lên đường, đoàn ngựa xe cuối cùng, vừa ruổi theo lối sông… Phần 2: tâm tình người vợ ôm con chờ chồng về: trời đổ mưa trong tiết tháng ba, suốt năm nước nguồn tuôn đổ xuống Bà, hình hài người bế con nước chảy chan hòa… Phần 3: ngày người chinh phu trở về: chờ người con, chờ vợ đón, bao ước mong nét xưa hãy còn… Ba bài ca Hòn vọng phu là một ẩn dụ về những tâm tình biệt ly, đoàn tụ, về công cuộc Nam tiến của dân tộc Việt từ ngàn xưa cho đến tận bây giờ.

Trường ca Hòn vọng phu (1, 2, 3) 
Thái Thanh và ban Thăng Long

Công cuộc Nam tiến ấy bắt đầu với việc gã Huyền Trần công chúa cho Chế Mân để đổi lấy châu Ô, châu Rí, với việc chúa Nguyễn vào Nam và gầy dựng nên đất Quảng-nam, rồi Sài-gòn, Gia-định, Đồng-nai, Hà-tiên… là những cuộc chiến tranh để thống nhất đất nước… Và cho đến tận bây giờ, công cuộc Nam tiến ấy vẫn chưa kết thúc, lớp lớp người miền Bắc, miền Trung chúng ta vẫn đổ vào Nam, sinh sống, lập nghiệp, gầy dựng nên kinh tế phía Nam giàu mạnh.

Hòn vọng phu là trường ca đầu tiên tóm tắt nên tâm sự, nỗi niềm của lớp lớp bao người dân Việt, đã khái quát cả một chiều dài lịch sử dựng nước và giữ nước, một bài trường ca của xiết bao u hoài xen lẫn tự hào: tâm sự của người vợ ôm con chờ chồng đi mở mang bờ cõi đã bao năm chưa thấy về, và tâm sự của người chinh phu ra đi, bên thì nợ nước chưa đền, bên thì nợ tình thâm chưa trả.

phạm duy, 9

Khi còn bé, Mẹ bảo:
lớn lên đi lính, con sẽ làm tướng,
lớn lên đi tu, con sẽ làm giáo chủ.
Ông đã soạn nhạc và trở thành Phạm Duy!

(phỏng theo Picasso)

Kết thúc sêri 9 bài viết về nhạc sĩ PD này, có lẽ không thừa nếu nhắc lại rằng PD xứng đáng là nhạc sĩ vĩ đại nhất trong nền âm nhạc Việt Nam từ cổ chí kim, mà chưa một nhạc sĩ theo sau nào bén gót được. Không thừa khi hiện tại chỉ có khoảng vài chục ca khúc của ông là có trong danh sách những bản nhạc được phép lưu hành. Trong tình hình âm nhạc đã khá nghèo nàn hiện tại, việc cấm không phổ biến những ca khúc của ông là một tổn thất lớn cho công chúng yêu nhạc, khi họ chỉ được biết một Văn Cao chỉ với mười mấy ca khúc nổi bật, một Trịnh Công Sơn với rất nhiều ca khúc đáng yêu về ngôn từ nhưng không mấy phong phú về nhạc.

PD, tác giả một gia tài tạm gọi với cái tên Ngàn lời ca, là khoảng 1000 tác phẩm phong phú về âm nhạc, tân kỳ về ngôn từ, mang nhiều phong cách, nhiều mảng nội dung đa dạng khác nhau. Ngàn lời ca, đặc sắc nhất phải kể đến những bài “dân ca mới”, đem lại sự hồi sinh cho dân nhạc Việt Nam, không phải là những thứ “nhại dân ca” hay “tân cổ cưỡng duyên” như chúng ta có hiện nay. Đó là những bài nhạc hùng trong kháng chiến 9 năm, những bài tình ca quê hương tuyệt đẹp. Tiếp đến nữa là những bản nhạc tình bất hũ, nhiều bài chúng ta, vì đã nghe quá nhiều, quá quen tai: Cây đàn bỏ quên, Em bé quê… mà không biết đó là của ông, không biết chúng có giá trị như thế nào chăng? Đó là những bản du ca, tâm ca, tâm phẫn ca, đạo ca, rong ca, thiền ca, và những “bé ca”, những bài ca viết cho tuổi nhỏ… Đó là hai trường ca: Con đường cái quanMẹ Việt Nam, về sau tác giả còn có thêm một trường ca Hàn Mặc Tử. Đó là những tác phẩm Minh họa Kiều, Hương ca… sáng tác sau này.

Nhạc PD, với tôi không phải chỉ là những kỷ niệm âm nhạc lúc nhỏ, đó còn là một mảng khuất trong nền ca khúc VN không nhiều người biết đến giá trị. Nhạc PD là nơi tôi bắt đầu biết cách lắng nghe những giai điệu ngũ cung, những cái chính là bản chất con người Á Đông mình. Nhạc PD là ẩn dụ về những gia tài VN bị đánh mất, bị quên lãng vì những lý do chiến tranh, chính trị, xã hội… những lý do không đứng vững trước giá trị nghệ thuật trường cửu. Nhạc PD là ẩn dụ khác biệt, dằn vặt về những nghèo nàn và phong phú, tầm thường và sáng tạo, bao đồng và tinh tế…, cùng một lúc, trong tất cả những gì gọi là chúng ta, con người VN.

Cành hoa trắng - Thái Thanh 

Để kết lại sêri viết về nhạc sĩ PD, mời các bạn nghe một ẩn dụ bằng âm nhạc khác, ca khúc Cành hoa trắng, ca khúc kể chuyện nàng tiên vì tình yêu, làm huyên náo Thiên đường mà bị đầy xuống trần gian lạnh lẽo.