MỤC LỤC
Âm sắc là một đặc tính sinh lý của âm và nó được cấu thành trên cơ sở các đặc tính vật lý của âm là tần số và biên độ. Nên, mặc dù có cùng tần số f1 của âm cơ bản nhưng đường biểu diễn không còn là một đường hình sin đơn thuần mà là một đường phức tạp có chu kỳ.
Lỗi này có thể được kiểm soát bằng cách thay đổi khuôn dạng chi tiết của dạng biểu diễn âm thanh, nhưng không thể loại bỏ được hoàn toàn. Và các hệ số khác như kích thước dữ liệu hay tần số xử lý yêu cầu ta phải chấp nhận một sai số lớn hơn từ một số nguồn để có thể giảm hơn nữa các sai số khác.
Chính vì vậy, tuỳ theo ứng dụng ta sẽ phải chấp nhận một số lỗi nhất định.
Trong thực tế, các bộ chuyển đổi DAC và ADC thường xuyên sử dụng dạng PAM (Pulse Amplitude Modulation) như một khuôn dạng trung gian, trong đó âm thanh được coi như một chuỗi các xung, và biên độ của mỗi xung (độ cao) biểu diễn độ mạnh của âm thanh tại điểm đó. Ngoài ra, ta còn dạng biểu diễn khác là PWM (Pulse Width Modulation), cũng giống như PAM, đây là dạng biểu diễn mỗi mẫu như một xung, nhưng nó sử dụng độ rộng hay khoảng kéo dài của xung (thay cho biên độ) để biểu diễn độ mạnh của âm thanh.
Tuy nhiên, không khó khăn để có thể khắc phục điều này, ví dụ như ta có thể xây dựng các mã theo một dạng riêng để không có mã nào chứa 3 số 1 liên tiếp (111) và sau đó chèn 111 vào tín hiệu tại điểm bắt đầu của mỗi mã. Một khi đã nén, chương trình xử lý sẽ phải giải nén mỗi khi sử dụng, và với bất cứ lưu đồ (giải thuật) nén nào cũng đều gây nguy hiểm tới chất lượng âm thanh, không kể đến thời gian dùng để giải nén.
Trong quá trình tính toán phổ, tín hiệu thời gian thường cũng chứa cả phần nửa dữ liệu thứ hai được chứa trong phần tín hiệu thời gian liền trước đó. Với mục đích làm giảm các búp sóng phụ của cửa sổ chữ nhật WR(f), ta chọn một dạng cửa sổ khác dạng tam giác cân gọi là cửa sổ tam giác (Triangle hay Bartlett). Khi trong quá trình thực hiện sự phân tích động hệ thống, hàm chuyền đạt hệ thống (system transfer function) được gọi phải được truy nhập.
Tuy nhiên, cửa sổ Kaiser rất hiếm khi được sử dụng do nó yêu cầu sự tính toán của hàm Bessel của dạng đầu tiên. Hàm này không được biết rộng rãi như các hàm được yêu cầu trong sự tính toán của các cửa sổ Hanning, Hamming, hay Black man. Chúng ta cũng thấy rằng dạng cửa sổ này có sự rò rỉ ít hơn so với cửa sổ chữ nhật và nhiều hơn so với cửa sổ Hanning.
Trong bước lặp đầu tiên, đọc n mẫu từ âm vào, thực hiện FFT, xử lý, và IFFT, sau giữ lại dữ liệu theo thời gian nhận được trong bộ nhớ đệm thứ 2. Thực hiện phép tăng tuyến tính trên nửa đầu của bộ nhớ đệm ra mới (đi một cách tuyến tính từ 0 tới 1), sau đó cộng 2 nửa lại với nhau để nhận được một đầu ra với sự chuyển tiếp mịn. Đặc điểm của homomorphic là sự biến đổi đại số tuyến tính mà nhờ đó có thể tách hai tín hiệu không cộng nhờ thuật toán phi tuyến trên cơ sở lọc tuyến tính.
Cần chú ý rằng, nếu có 2 kênh thì giá trị đầu tiên trong mỗi cặp là của kênh trái, và giá trị thứ hai là của kênh phải. Tham số này thực sự quan trọng khi ta cần xử lý âm dựa trên các giá trị thời gian thực biểu diễn theo giây, hay cần thể hiện thông tin về tần số theo Hz (như khi sử dụng FFT). Do đó, cần lưu giá trị tần số lấy mẫu này vào một biến (Fs) để có thể áp dụng cho quá trình phân tích tín hiệu sau đó.
Nếu có nhiều hơn một kênh, thì mọi mẫu cho chỉ số đầu tiên được đưa trước, quá trình lặp lại qua các kênh. Do đó, ta có thể coi kênh trái như Channel 0, và kênh phải như Channel 1. Và một định lượng quan trọng khác là tần số lấy mẫu (số mẫu/giây hay Hz - nSp: NumSamplesPerSecond).
Dữ liệu được đọc từ tệp và gán vào một mảng kiểu nguyên (integer) (do các tệp có lưu dữ liệu theo byte), và sau đó biểu diễn tín hiệu theo dạng thời gian.
Nên, nếu F là tham số tệp gốc, và Fsave là tham số của tệp âm mới được lưu sau một số thao tác soạn thảo, và header có dạng WaveHeaderFile (trong chương trình mới chỉ áp dụng soạn thảo trên tệp Wave, tuy nhiên muốn soạn thảo trên khuôn dạng khác ta có thể chuyển đổi khuôn dạng về dạng Wave, hay nói chung cơ sở của thuật toán trên các khuôn dạng khác cũng tương tự như vậy). Theo cách nhìn trực quan cũng như xét theo khía cạnh về sự thay đổi của sóng âm gốc, thì thay đổi do các phép cắt, xoá tạo ra là như nhau: phần dữ liệu lựa chọn bị xoá mất, và khi lưu tạo tệp mới thì các mẫu dữ liệu phía sau sẽ dồn lên chiếm chỗ các mẫu dữ liệu đã mất. Sau đó, khi muốn ghi tệp âm đó sang một tệp mới ta sẽ chép toàn bộ các mẫu trong tệp gốc sang tệp mới, tức là các mẫu trong khoảng từ mẫu thứ nhất, tới vị trí mẫu liền trước vị trí mẫu đầu tiên được đọc ra; và các mẫu từ vị trí liền sau mẫu cuối cùng được đọc ra tới cuối tệp.
Chương trình có thể ứng dụng cho cả dạng âm thanh (Wave file) và dạng hình ảnh video (Midi file). Delphi hỗ trợ rất nhiều trong việc tích hợp hoạt ảnh và âm thanh vào các ứng dụng. Thông thường có 2 cách:. a) Sử dụng các chức năng riêng biệt trong Win32 API. Như vậy, ta cần tải âm thanh vào bộ nhớ, sau đó dùng một con trỏ để chỉ tới dữ liệu âm thanh, và dùng cờ SND_MEMOIRY để báo cho PlaySound API rằng ta đang sử dụng định vị bộ nhớ thay vì tên tệp. PlaySound(PointDat, 0, SND_ASYNC or SND_MEMORY);. Trong đó, PointDat là con trỏ chỉ tới mảng dữ liệu âm thanh ArrSample có kích thước là MaxSize. b) Sử dụng các thành phần để thực hiện các chức năng về multimedia.
Với Hamming, tớnh tuần hoàn của tớn hiệu là rất rừ ràng, phổ tương ứng với tần số cơ bản và tính hài hoà hiện ra giống như các đỉnh hẹp tại các tần số được khoảng cách hoá một cách đều nhau trong biến đổi Fourier thời gian ngắn. Hiệu ứng này xuất hiện là do "side lobes" dẫn tới việc các hàm điều hòa lân cận tương tác với nhau trong khoảng trống giữa các hàm điều hoà - đôi khi tăng cường, nhưng đôi khi huỷ bỏ - theo cách đó tạo ra sự thay đổi xuất hiện ngẫu nhiên giữa các hàm điều hoà (harmonics). Một nét đặc trưng chung cho phần lớn các tín hiệu rung mang ý nghĩa liên quan tới cuộn trôi qua là tồn tại một vài loại của nhóm các hàm điều hoà mà chúng không đồng bộ một cách trực tiếp với tốc độ thay đổi của dạng phổ.
Bao gồm các chức năng mở tệp âm thanh, ghi tạo tệp âm thanh mới, ghi ảnh tín hiệu. Gồm các chức năng soạn thảo: sao chép, cắt, dán, thu phóng, chọn mầu vẽ. Gồm các chức năng xử lý tín hiệu: các phép lọc, giới hạn qua hàm cửa sổ, tính FFT hay Cepstrum.
Do thời gian và khả năng có hạn, hơn nữa với khuôn khổ của một đồ án tốt nghiệp nên chương trình em thiết kế không thể xử lý hết được những vấn đề cần thiết trong lĩnh vực âm thanh rộng lớn. Tuy nhiên, chương trình đã giải quyết được những vấn đề cơ bản: tìm hiểu về các khuôn dạng lưu trữ dữ liệu âm thanh, các cách định dạng dữ liệu để từ đó có thể thao tác với dữ liệu giúp cho việc hiểu rừ cấu trỳc cỏc tệp õm thanh. Ngoài ra, quy trình thực hiện các chức năng của chương trình có thể chưa được hợp lý, các chức năng phụ thuộc nhiều vào nhau, nhưng mặc dự vậy chương trỡnh cú cấu trỳc cỏc thủ tục rừ ràng, dễ hiểu với ngôn ngữ lập trình Delphi.
Hơn nữa, chương trình mang tính chất hoàn chỉnh: bắt đầu quá trình thu thanh tạo tệp âm thanh từ micro, qua quá trình xử lý và phân tích dữ liệu âm, sau đó có thể phát âm thanh ra loa. Nhưng đây là hai khuôn dạng lưu trữ âm thanh thông dụng nhất nên cũng cần hiểu rừ trước hết, và từ hai khuụn dạng cơ bản này giỳp ta dễ dàng thao tỏc với các khuôn dạng khác. Và, một nhược điểm khác là tốc độ xử lý của chương trình còn chậm, nhất là khi thực hiện các chức năng soạn thảo với một số lớn các mẫu tín hiệu của một tệp âm thanh có kích thước lớn.