Cài đặt SoX trên CentOS 5.3
Đầu tiên, hãy cài repo RPMForge. Tạo file /etc/yum.repos.d/rpmforge.repo và chép đoạn mã này vào:
# Name: RPMforge RPM Repository for Red Hat Enterprise 5 – dag
# URL: http://rpmforge.net/
[rpmforge]
name = Red Hat Enterprise $releasever – RPMforge.net – dag
#baseurl = http://apt.sw.be/redhat/el5/en/$basearch/dag
mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
enabled = 1
protect = 0
gpgcheck =0
Sau đó cập nhật lại cấu hình của yum bằng lệnh:
yum makecache
Tiếp đấy, tải sox về:
wget http://sourceforge.net/projects/sox/files/sox/14.3.0/sox-14.3.0.tar.gz/download
tar xzvf sox-14.3.0.tar.gz
Cài đặt các gói cần thiết để biên dịch sox:
yum -y install amrnb-devel amrwb-devel speex-devel libid3tag-devel libmad-devel libvorbis-devel sox-devel lame-devel ladspa-devel faac-devel ffmpeg-devel faad2-devel wavpack-devel libsndfile-devel
Chạy các lệnh sau để cài SoX:
./configure
make -s && make install
OK, vậy là ta đã có SoX, công cụ hoàn hảo để xử lý tập tin âm thanh trên Linux rồi đó. Với SoX, ta có thể giải mã MP3, chuyển đổi nó sang các định dạng âm thanh khác. Xem thêm tại đây.
Xử lý tập tin âm thanh cho Asterisk
Trên Asterisk, ta có ứng dụng Record để ghi âm tập tin dưới dạng .raw. Đây là định dạng mặc định mà Asterisk sử dụng cho các ứng dụng Playback, Background hay Read.
Tuy nhiên rất hiếm khi ta sử dụng ứng dụng này để ghi âm : phải khai báo quá nhiều trong dialplan, rồi kết nối với SIP phone… Ngoài ra, Asterisk không phải là một chương trình xử lý âm thanh, nên file ghi âm ghi được tuy tương thích với Asterisk, nhưng khó xử lý (thêm hiệu ứng, tăng giảm volume cho phù hợp, lồng nhạc đệm…). Rõ ràng, với những file nhạc hay file lời chào phức tạp, sử dụng Adobe Audition, Jet Audio hay Audacity để xử lý sẽ dễ dàng hơn nhiều.
Đối với mạng điện thoại, dữ liệu truyền đi ở băng thông 0 – 8000 Hz. Tuy nhiên, băng thông thì là vậy, mà dữ liệu tiếng nói thực sự thì chỉ ở khoảng 300 – 3300 Hz (giọng nói của người). Vì vậy, nếu bạn đem một tập tin MP3 128Kbps cho Asterisk phát lại, bạn sẽ hoàn toàn thất vọng vì chất lượng âm thanh rất tệ. Nhiễu tần số thấp, nhiễu tần số cao, méo tiếng. Hơn nữa, MP3 là một định dạng có bản quyền, mà Asterisk lại là Open source. Nên âm thanh phát lại nghe bé tẹo (không thể mong chờ gì hơn – module hỗ trợ MP3 cho Asterisk được lấy từ gói asterisk-addons). Hãy làm một bài test nho nhỏ:
- Mở Audacity ra. Nó là Open source. Hỗ trợ MP3 (với gói liblame), WAV, ULAW và OGG.
- Dùng SHIFT+CTRL+I hoặc chọn File → Import → Audio. Chọn một tập tin MP3 bạn thích. Audacity nhập nó vào trong cửa sổ chính.
- Chọn Track → Stereo to Mono để chuyển chế độ âm thanh từ stereo sang mono.
- Chọn Effect → Normalize để tăng tối đa âm lượng cho dải âm thanh, đồng thời cân bằng biên độ âm.
- Trong ô Project Sample Rate ở phía dưới của cửa sổ Audacity, hãy chọn 8000 Hz.
- Chọn File → Export để xuất dự án ra tập tin âm thanh. Trong ô Save file, ở góc dưới bên phải, ta sẽ thấy ô Format. Hãy lặp lại bước này nhiều lần, để xuất tập tin ra dưới dạng .wav, .mp3 và .ogg
- Đóng Audacity. Đổi tên tập tin thành filename, và đưa vào thư mục có tên giống phần mở rộng của tập tin, trong sounds. Ví dụ, /var/lib/asterisk/sounds/testsounds/wav/filename.wav
- Chép các tập tin vừa tạo vào các thư mục khác nhau trên máy chủ Asterisk và thực hiện dialplan như sau:
;========= /etc/asterisk/extension.conf ==========
[testsoundfiles]
exten => 1000,1,Answer
exten => 1000,n,Wait(1)
exten => 1000,n,Playback(digits/1)
exten => 1000,n,Playback(testsounds/wav/filename)
exten => 1000,n,Wait(1)
exten => 1000,n,Playback(digits/2)
exten => 1000,n,Playback(testsounds/mp3/filename)
exten => 1000,n,Wait(1)
exten => 1000,n,Playback(digits/3)
exten => 1000,n,Playback(testsounds/ogg/filename)
exten => 1000,n,Hangup
Giờ ta khai 1 tài khoản SIP, hoặc IP Phone với context=testsoundfiles, bấm phím 1000. Đoạn mã trên sẽ phát lần lượt các file âm thanh xuất từ Audacity. Hãy nghe và so sánh chất lượng nhé. Bạn sẽ thấy file wav là tốt nhất.
Tôi đã làm thử với 8 định dạng khác nhau: mp3, wav, sln, gsm, alaw, ulaw, vox, ogg. Kết quả thật bất ngờ: vox là định dạng cho kết quả khả quan nhất. Tuy nhiên, để encode ra vox cũng không phải là chuyện dễ dàng gì…
OK, đi vào vấn đề chính. Làm sao để convert từ 1 tập tin MP3 hoặc WAV (hai định dạng phổ biến nhất hiện nay để lưu trữ các file ghi âm – đơn giản vì hơn 90% người dùng máy tính đều dùng Windows
( ). Trên Linux ta có 2 công cụ rất mạnh để làm việc này: FFMPEG và SoX.
Trên cửa sổ dòng lệnh của Asterisk, gõ lệnh
CLI> core show file formats
Format Name Extensions
------ ---- ----------
slin mp3 mp3
gsm wav49 WAV|wav49
slin wav wav
adpcm vox vox
slin16 sln16 sln16
slin sln sln|raw
g722 g722 g722
ulaw au au
alaw alaw alaw|al
ulaw pcm pcm|ulaw|ul|mu
slin ogg_vorbis ogg
ilbc iLBC ilbc
h264 h264 h264
h263 h263 h263
gsm gsm gsm
g729 g729 g729
g726 g726-16 g726-16
g726 g726-24 g726-24
g726 g726-32 g726-32
g726 g726-40 g726-40
g723 g723sf g723|g723sf
Những định dạng được tô đậm ở trên là những định dạng mà FFMPEG và SoX hỗ trợ để convert từ MPEG 3 sang.
Lưu ý là, trên CentOS, RHEL, và thậm chí cả Debian, SoX (có trong repository của RPMForge) không hỗ trợ đọc định dạng MP3. Vì vậy, ta chỉ có thể dùng FFMPEG (cũng trên RPM Forge) để convert từ MP3 sang WAV, sau đó từ WAV sang các định dạng khác bằng SoX. Nhưng FFMPEG lấy mẫu kém hơn nhiều, và không có các effect như SoX (ta sẽ nói về phần này sau).
Chỉ riêng trên Ubuntu, SoX được compile với liblame, nên hỗ trợ định dạng MP3 (bạn phải cài thêm gói libsox-fmt-all để thêm hỗ trợ mp3, gsm, flac, ogg, ao, oss và ffmpeg cho SoX). Tuy nhiên hiện giờ, Ubuntu Server chưa được sử dụng nhiều (vì Ubuntu là một distro hướng người dùng cuối?).
Để chuyển MP3 sang WAV với FFMPEG, ta dùng lệnh sau:
ffmpeg -i <filename>.mp3 -ac 1 -ar 8000 -ab 64000 -acodec [adpcm_ms|pcm_alaw|pcm_ulaw] <filename>.wav
Tuy nhiên, FFMPEG không có hiệu ứng resample, nên khi convert từ MP3 128Kbps sang WAV 8Kbps, chất lượng âm thanh bị giảm đáng kể, đồng thời nhiều chỗ bị méo tiếng. Tôi thực sự không khuyên bạn dùng cách này. Nếu chỉ có FFMPEG, bạn buộc phải làm theo cách này. Không còn gì khác.
Nhưng nếu bạn có cả FFMPEG và SoX thì sao? Hãy làm như sau:
- Convert từ MP3 sang WAV mono có cùng tần số lấy mẫu và định dạng bit để giữ nguyên chất lượng của file MP3. Nếu đã có WAV rồi thì bỏ qua bước này nhé:
ffmpeg -i <filename>.mp3 -ac 1 <filename>.wav - Convert tiếp file WAV vừa lấy được bằng SoX để tạo ra định dạng phù hợp, với tần số chuẩn và thêm các hiệu ứng cho tập tin. Bạn có thể chọn 1 trong các định dạng vox hay sln (chất lượng phù hợp nhất cho mạng PSTN), wav (dễ phát lại, tương thích tốt nhất với Windows), ogg hoặc gsm (phù hợp với dân Linux), ulaw, alaw (nếu bạn dùng codec này cho IP Phone hoặc Softphone của mình). Chọn câu lệnh phù hợp với nhu cầu của bạn:
VOX:sox <filename>.wav -r 8000 -s -w -c 1 <filename>.voxWAV:sox <filename>.wav -r 8000 -s -w -c 1 <filename>.wavSLN:sox <filename>.wav -r 8000 -s -w -c 1 <filename>.rawGSM:sox <filename>.wav -r 8000 -s -w -c 1 <filename>.gsmALAW:sox <filename>.wav -r 8000 -s -w -c 1 <filename>.alULAW:sox <filename>.wav -r 8000 -s -w -c 1 <filename>.auOGG:sox <filename>.wav -r 8000 -s -w -c 1 <filename>.ogg
Với SoX, ngoài việc thay đổi tần số mẫu, số kênh, ta còn có thể áp dụng một số hiệu ứng âm thanh để tinh chỉnh tập tin của mình. Nếu tập tin của bạn là một bài hát 128Kbps, hãy thêm vào cuối dòng lệnh sox ở trên chuỗi sau: resample -ql highpass 300 lowpass 3300. Câu lệnh này yêu cầu SoX loại bỏ các tần số âm thanh dưới 300 Hz và trên 3300 Hz, để phù hợp nhất với âm thoại. Ví dụ, với file .vox, câu lệnh đầy đủ sẽ là:
sox <filename>.wav -r 8000 -s -w -c 1 <filename>.vox resample -ql highpass 300 lowpass 3300
Và cuối cùng, để cài đặt SoX và FFMPEG trên server Linux, ta dùng các lệnh sau:
- CentOS và RHEL: Thêm repository RPM Forge vào. Chạy lệnh sau:
yum install ffmpeg sox- Red Hat Enterprise Linux 5 / i386:
rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm - Red Hat Enterprise Linux 5 / x86_64:
rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS//rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm - Red Hat Enterprise Linux 4 / i386:
rpm -Uhv http://apt.sw.be/redhat/el4/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el4.rf.i386.rpm - Red Hat Enterprise Linux 4 / x86_64:
rpm -Uhv http://apt.sw.be/redhat/el4/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el4.rf.x86_64.rpm - Red Hat Linux 9 / i386:
rpm -Uhv http://apt.sw.be/redhat/9/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.rh9.rf.i386.rpm - Red Hat Linux 7.3 / i386:
rpm -Uhv http://apt.sw.be/redhat/8.0/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.rh7.rf.i386.rpm
- Red Hat Enterprise Linux 5 / i386:
- Ubuntu và Debian: Thêm repository của HanoiLUG (http://virror.hanoilug.org) vào và chạy lệnh sau:
apt-get install ffmpeg sox- /etc/apt/sources.list cho Debian GNU/Linux “Etch” 4.0:
deb http://virror.hanoilug.org/debian/archive etch main contrib non-free
deb http://virror.hanoilug.org/debian/security etch/updates main contrib non-free
deb http://virror.hanoilug.org/debian/volatile etch/volatile main contrib non-free
deb http://virror.hanoilug.org/debian/backports etch main contrib non-free - /etc/apt/sources.list cho Debian GNU/Linux “Lenny” 5.0:
deb http://virror.hanoilug.org/debian/archive lenny main contrib non-free
deb http://virror.hanoilug.org/debian/security lenny/updates main contrib non-free
deb http://virror.hanoilug.org/debian/volatile lenny/volatile main contrib non-free
deb http://virror.hanoilug.org/debian/backports lenny main contrib non-free - /etc/apt/sources.list cho Ubuntu “Hardy Heron” 8.04.2 LTS :
deb http://virror.hanoilug.org/ubuntu/archive hardy main restricted universe multiverse
deb http://virror.hanoilug.org/ubuntu/archive hardy-updates main restricted universe multiverse
deb http://virror.hanoilug.org/ubuntu/archive hardy-backports main restricted universe multiverse
deb http://virror.hanoilug.org/ubuntu/security hardy-security main restricted universe multiverse
deb http://virror.hanoilug.org/ubuntu/medibuntu hardy free non-free
deb http://virror.hanoilug.org/ubuntu/canonical hardy partner
deb http://virror.hanoilug.org/ubuntu/hanoilug hardy contrib import
- /etc/apt/sources.list cho Debian GNU/Linux “Etch” 4.0:
leave a comment