Sử dụng FMOD trong trò chơi âm thanh. Phân tích định dạng: âm thanh trong một số game trên Unreal Engine

Văn hóa sửa đổi trò chơi có từ thời xa xưa. Tôi nhớ sớm nhất là Wolfenstein 3D (1992). Nếu tôi không nhầm, bạn có thể vẽ bản đồ của riêng mình và sau đó là kẻ thù mới, thay thế kết cấu và âm thanh. Trở ngại chính trong việc sửa đổi là phân tích cú pháp định dạng không xác định dữ liệu. Hãy để các khía cạnh đạo đức của hiện tượng này cho các nguồn khác và tập trung vào những khó khăn kỹ thuật có thể nảy sinh trong vấn đề khó khăn này.

Tôi đã tích lũy được khá nhiều câu chuyện thuộc loại này, từ những câu chuyện đơn giản nhất, chẳng hạn như phân tích một kho lưu trữ đơn giản nơi hàng nghìn tệp trò chơi được lưu trữ trong một tệp, đến thay thế mô hình 3D, nghiên cứu và viết codec âm thanh không chuẩn. Tôi sẽ kể cho bạn nghe một trong số đó, có độ phức tạp trung bình.

Giả sử bạn muốn thay thế một số cụm từ nhất định trong trò chơi hoặc thậm chí thử lồng tiếng đầy đủ bằng một số ngôn ngữ mà nhà phát triển không có đủ sức mạnh hoặc nguồn lực. Có vẻ như bạn chỉ cần ghi lại âm thanh, tìm vị trí của nó trong trò chơi và thay thế các tệp cần thiết. Nhưng điều này không phải lúc nào cũng dễ dàng, ví dụ như trong trò chơi mới nhất từ loạt phim Batman: Arkham sử dụng công cụ âm thanh wwise đã được tích hợp vào Công cụ không thực.

Tôi đã gặp UE hơn một lần, nhưng như bạn biết, các nhà phát triển thương mại có khả năng thay đổi hoàn toàn bất kỳ phần nào của mã công cụ, vì vậy hầu hết tất cả các trò chơi đều trở nên độc đáo về mặt cấu trúc dữ liệu và điều này luôn thú vị khám phá.

Đầu tiên, chúng ta hãy nhìn vào các tập tin âm thanh. Như thường lệ, chúng nằm trong thư mục âm thanh và được tập hợp thành một gói lớn, với phần mở rộng không mong muốn.WAD (xin chào DOOM). Nếu muốn, bạn thậm chí có thể trích xuất tất cả âm thanh từ nó, nhưng nó sẽ có hàng nghìn tệp không tên và việc tìm kiếm thứ gì đó trong số chúng sẽ rất khó khăn, trừ khi bạn “thủ công” nghe tất cả chúng. Tôi phải nói rằng nó thường đơn giản hơn. Các nhà phát triển, để thuận tiện cho họ, hãy để lại một tệp ở đâu đó có danh sách các cụm từ. Nhưng đây không phải là trường hợp.

Thật hợp lý khi cho rằng vì bản thân trò chơi bằng cách nào đó đã tìm thấy âm thanh và phụ đề cần thiết cho chúng, điều đó có nghĩa là thông tin này được chứa trong các tệp ở đâu đó, bạn chỉ cần tìm nó. Không tìm thấy văn bản ở bất kỳ đâu trong các thư mục bản địa hóa, có nghĩa là chúng nằm rải rác khắp nơi. cấp độ cá nhân trò chơi, như thường lệ xảy ra. Hãy lấy một trong các tệp .upk có tên tương tự với cấp độ làm ví dụ và giải nén nó. May mắn thay, có những công cụ cho việc này, ngay cả với văn bản nguồn.

Bên trong, các tệp thuộc loại .RDialogueEvent nhanh chóng được phát hiện, trong đó văn bản của các cụm từ trong 11 ngôn ngữ có thể nhìn thấy được bằng mắt thường.

Tên tập tin giống với tên của âm thanh gốc. Tuyệt vời, bây giờ tất cả những gì còn lại là tìm sự trùng khớp giữa chúng và các tệp âm thanh. Đây là nơi các vấn đề bắt đầu. Tất nhiên, có những mã nhận dạng trong gói âm thanh. Đây là hàm băm 30 bit luôn được sử dụng cho âm thanh, nhưng rất tiếc là chúng không thể tìm thấy ở bất kỳ đâu trong số các tệp hội thoại. Ở khắp mọi nơi chỉ có những con số khó hiểu, không có gì giống với ID âm thanh, chúng sẽ được chú ý ngay lập tức. Mặt khác, điều này cũng dễ hiểu vì động cơ không đơn giản như vậy và bạn không thể chỉ lấy và phát một tệp âm thanh trong trò chơi. Nó được chứa trong ngân hàng âm thanh, nó có nhiều đặc tính áp đặt các hiệu ứng khác nhau, v.v.

Và sau đó hóa ra là trong mỗi thư mục có đoạn hội thoại đều có một file.akbank - rõ ràng đây là ngân hàng âm thanh wwise.

Nó có rất nhiều mã nhận dạng bên trong và khi thử chúng một cách ngẫu nhiên, chúng tôi thấy rằng một trong số chúng (được đánh dấu bằng màu xanh lá cây) nằm trong gói âm thanh. Nếu chúng tôi trích xuất dữ liệu từ đó bằng mã định danh này, chúng tôi sẽ nhận được một đoạn nhất định gồm nhiều âm thanh được ghép lại với nhau. Hãy chuyển đổi những âm thanh này từ định dạng wwise nội bộ sang ogg thông thường. Vâng, thực sự, trong một trong số đó, Batman nói: “Tôi không có thời gian cho việc này,” và trong một tập tin khác, họ trả lời anh ấy và các cụm từ tương ứng chính xác với nội dung của cuộc đối thoại cụ thể này.

Không tệ rồi! Về nguyên tắc, chúng ta có thể dừng lại ở đó: tất cả các đoạn hội thoại được sắp xếp trong các thư mục, đối với mỗi đoạn hội thoại có một ngân hàng có liên kết đến đoạn âm thanh. Tất nhiên, chúng tôi không biết mỗi tệp ở đâu, nhưng chúng tôi có thể cắt một đoạn thành nhiều phần, nghe và đặt một số cụm từ vào vị trí của chúng (và thường chỉ có 3-4 cụm từ đó trong các đoạn hội thoại) theo cách thủ công.

Nhưng chúng tôi không tìm kiếm những cách dễ dàng. Hãy tìm ra nó cho đến cuối cùng. Hãy kiểm tra xem nếu âm thanh phát ra đúng thứ tự thì sao? Tất nhiên là không, họ đang bối rối. Dù người ta có thể nói gì thì ở đâu đó cũng phải có thông tin về mối liên hệ giữa các âm thanh trong đoạn và văn bản của đoạn hội thoại. Tôi đã dành khá nhiều thời gian để tìm hiểu nhiều tập tin khác nhau, hy vọng khám phá được điều gì đó, nhưng tất cả đều vô ích. Khỏe. Vì trường hợp này xảy ra nên hãy giải nén tất cả các gói trò chơi. Đây là vài gigabyte, à, không có gì, lần đầu tiên hay sao? Nhưng tìm kiếm toàn bộ dữ liệu trò chơi cũng không mang lại kết quả gì. Nơi duy nhất có bộ nhận dạng âm thanh là ngân hàng âm thanh. Hóa ra kết nối chỉ đi qua anh ta. Bạn không thể làm gì được, bạn sẽ phải leo vào bên trong và tìm hiểu xem nó hoạt động như thế nào.

Bây giờ, để chắc chắn, hãy tìm một số đoạn hội thoại trong trò chơi mà bạn có thể nhanh chóng kiểm tra. Sau màn giới thiệu hoành tráng với nữ phóng viên quyến rũ và màn trình diễn mặt nạ, Batman đã bị Hugo Strange bắt giữ. Anh ấy nói một vài cụm từ bắt đầu bằng “Tôi cảm thấy mình nên Cảm ơn", sau đó rời đi và trò chơi bắt đầu. Đây là nơi lưu đầu tiên xảy ra. Thời điểm này phù hợp với chúng ta.

Hãy tìm cụm từ của nhân vật phản diện trong hồ sơ. Nó kết thúc trong gói OW_E8_Ch1z_Anim. Vì vậy, bạn sẽ không đoán ngay được. Chỉ có một đoạn hội thoại bên trong chứa toàn bộ phần đầu của trò chơi. Đó là một con số khổng lồ gồm 24 cụm từ, nhưng có lẽ đó là một điều tốt; trong một mớ mã lộn xộn, việc tìm số 24 sẽ dễ dàng hơn 1 hoặc 2. Vì vậy, chúng ta sẽ nghiên cứu nội dung của .akBank

Định dạng của các ngân hàng wwise đã được khám phá một phần. Hãy hy vọng rằng thông tin này là đủ cho mục đích của chúng tôi. Đánh giá ở phần đầu của tệp .akbank, nó chứa 5 ngân hàng âm thanh cho 5 ngôn ngữ, đầu tiên là ngân hàng INT (tiếng Anh) - chúng ta sẽ xem xét nó.

Đầu tiên, có một bảng khó hiểu sau tiêu đề VKRK, sau đó là khá nhiều số 0 (có thể thấy điều này trong hình trước), sau đó là phân đoạn BKHD và sau đó là phân đoạn HIRC, dường như chứa mô tả của tất cả âm thanh các đối tượng. TRONG trong trường hợp này chúng tôi có 79 trong số chúng (0x4F được tô sáng màu xanh lục). Như mô tả nêu rõ, các đối tượng trong phân đoạn lần lượt xuất hiện, đối với mỗi loại được chỉ định (1 byte), sau đó là độ dài 32 bit và ID. Độ dài và nội dung của một đối tượng khác nhau tùy thuộc vào loại.

Đối tượng loại 2 là âm thanh thực tế. Loại được tô sáng màu đỏ, chiều dài - màu vàng. Mỗi trong số chúng cho biết ID của chính đối tượng (màu xanh lá cây) và ID của tệp âm thanh (màu tím) nơi chứa nó. Dưới đây bạn có thể thấy phần đầu của đối tượng tiếp theo cùng loại.

Đối tượng 3 - hành động âm thanh, có vẻ như mỗi đối tượng trong số chúng đều "phát âm thanh", với một số thông số mà chúng tôi không xác định được, nhưng mỗi đối tượng đều có ID riêng (màu xám) và ID của âm thanh thực sự cần phát (màu xanh lá cây) ).

Đối tượng 4 - sự kiện âm thanh. Các mục nhập rất ngắn chỉ chứa ID sự kiện (màu xanh lam) đồng thời cho biết rằng nó chỉ chứa một hành động và ID của chính hành động này (màu xám).

Chà, có vẻ như chúng ta có 24 chuỗi sự kiện như thế này:

Sự kiện -> hành động -> âm thanh

Chúng được liên kết bằng các mã định danh và kết thúc bằng các liên kết đến các tệp âm thanh. Làm thế nào để tìm thấy các tập tin cần thiết? Sau khi tìm kiếm các mã này, chúng tôi tìm thấy chúng trong cùng một bảng ở đầu ngân hàng. Rõ ràng đây là một bảng ghi lại vị trí của từng âm thanh trong một phân đoạn âm thanh. Và thực sự, nó chứa chính xác 24 phần tử và đối với mỗi tệp có cùng một ID mà chúng ta có trong đối tượng âm thanh, độ lệch so với phần đầu và độ dài được chỉ định. Chúc mừng! Bây giờ chúng tôi có một kết nối hoàn toàn có thể theo dõi được từ các sự kiện âm thanh trong ngân hàng đến các tệp âm thanh riêng lẻ:

Nghĩa là, với tư cách là đầu vào, chúng ta có ID của một số sự kiện, một ID cho mỗi cụm từ đối thoại và đối với mỗi sự kiện đó, chúng ta có thể tìm thấy một tệp âm thanh. Nhưng bây giờ làm thế nào chúng ta có thể kết nối chúng với chính cuộc đối thoại?

Chúng ta hãy thử tìm kiếm những định danh này ở đâu đó. Một lần nữa, chúng không có trong tập tin hội thoại. Ngoài ra còn có một số tệp .akevent rất ngắn trong thư mục - cũng có 24 tệp trong số đó. Rõ ràng đây là những tập tin sự kiện âm thanh. Bên trong có một số con số nhỏ, ai cũng như nhau, chẳng có tác dụng gì. Điều khác biệt duy nhất là id của các sự kiện âm thanh mà chúng tôi tìm thấy trong ngân hàng.

Một ngõ cụt khác: có những định danh cho tất cả các sự kiện, nhưng không có mối liên hệ nào giữa chúng và văn bản đối thoại! Để đề phòng, hãy làm một bài kiểm tra: thay đổi ID trong tệp được yêu cầu và khởi chạy trò chơi. Đúng vậy, Hugo mở miệng nhưng không nói gì. Điều này có nghĩa đây chính xác là dữ liệu mà trò chơi tìm thấy âm thanh đúng. Đồng thời, chúng tôi lưu ý rằng phụ đề vẫn được hiển thị. Điều này có nghĩa là văn bản của các cuộc đối thoại trong trường hợp của chúng tôi là chính và âm thanh đã phát ra từ chúng.

Và sau đó tôi nhớ rằng công cụ UE3 có thói quen đề cập đến các đối tượng đóng gói thông qua số thứ tự của chúng trong gói, tức là cách chúng được đóng gói bên trong nó. Hãy xem tệp xuất được tạo khi chúng tôi giải nén các gói:

Các số ở đây là số thập phân và bắt đầu từ 0, nhưng trong trò chơi chúng bắt đầu từ 1, vì vậy hóa ra các tệp sự kiện khi xuất được đánh số 0x35-0x4С. Hãy xem liệu chúng có ở đâu đó trong số các cuộc đối thoại không. Chúng tôi bắt đầu tìm kiếm - và ôi, ngay đầu tập tin có con số này!

Đây là liên kết còn thiếu cuối cùng. Đồng thời, chúng tôi tìm thấy 0x2C ở gần - đây là số tệp ngân hàng. Nếu đột nhiên có một số hộp thoại trong một thư mục, chúng cũng có thể được phân biệt. Bây giờ chúng ta đã biết đầy đủ cách tìm ra âm thanh tương ứng từ văn bản của đoạn hội thoại.

Cái này hóa ra đẹp mạch phức tạp tương tác. Có vẻ như các nhà phát triển đã quyết định không quan tâm đến sự tiện lợi mà chỉ dựa vào các cơ chế bên trong của động cơ, dẫn đến kết quả này trong trường hợp này. Và các trường hợp, như tôi đã nói, rất khác nhau. Cấu trúc của các tập tin và kết nối giữa chúng có thể hoàn toàn khác nhau. Ở đây chúng tôi đã có một liên kết đến âm thanh từ văn bản của đoạn hội thoại. Nhưng điều ngược lại lại xảy ra, âm thanh chính là âm thanh và văn bản được đặt bên cạnh nó theo mã định danh. Hoặc sự kiện kịch bản trò chơi là chính và từ đó có các liên kết đến cả âm thanh và văn bản. Điều xảy ra là các tệp được định vị không phải theo tên mà theo hàm băm. Nhưng trong mọi trường hợp, bằng cách nào đó chúng đều có mối liên hệ với nhau, tất cả những gì còn lại là tìm ra mối liên hệ này.

Cuối cùng, hãy thử kiểm tra kết quả của chúng tôi. Chúng ta hãy tìm file hội thoại chính xác từ cụm từ “Tôi cảm thấy tôi nên cảm ơn bạn” mà chúng ta cần và thay thế 4B bằng 4C trong đó. Chúng tôi bắt đầu trò chơi, và người bạn Hugo của chúng tôi, thay vì cụm từ này, nói một cách đầy ẩn ý: “Đó sẽ là di sản của tôi, một tượng đài cho sự thất bại của bạn và nếu bạn cố gắng ngăn cản tôi, tôi đảm bảo mọi người sẽ biết bí mật của bạn.”

Hãy để Batman ở đây, nghiên cứu có thể được coi là hoàn thành. Ở dạng viết, quá trình này có vẻ nhanh nhưng trên thực tế, mỗi giai đoạn có thể đi kèm với việc suy ngẫm lâu về các chữ số thập lục phân mà không có hy vọng rằng đến một lúc nào đó chúng sẽ tạo thành chuỗi có ý nghĩa và bạn sẽ hiểu ý nghĩa của chúng. Nhưng đôi khi điều này vẫn xảy ra.

Âm nhạc đã trở nên tích hợp một cách đáng kinh ngạc vào các hình thức nghệ thuật và hoạt động khác của con người. Ngày nay, không một bộ phim hay trò chơi nào hoàn chỉnh nếu không có nhạc nền, một chương trình radio không có tiếng leng keng và một đĩa đơn mới của ban nhạc bạn yêu thích (và ít yêu thích nhất) mà không phát hành video đi kèm. Điều cũng xảy ra là người nghe thích âm nhạc “tích hợp” hơn tác phẩm mà nó được lồng ghép vào. Trong trường hợp này, một câu hỏi hợp lý được đặt ra: có thực sự cần thiết phải mở một bộ phim hoặc khởi chạy một trò chơi có chứa bộ phim đó mỗi lần để nghe một bài hát hấp dẫn không? Chà, không, tốt hơn hết chúng ta nên rút bài hát này ra.

Trích xuất âm thanh từ tệp video là một nhiệm vụ đơn giản và có thể được thực hiện theo nhiều cách. Để làm điều này, hầu hết người dùng, cố gắng thực hiện bằng các phương tiện ngẫu hứng, lấy ra nhạc phim tập tin bằng toàn bộ chuỗi chương trình: VirtualDub > mp3DirectCut > Lame/Wav2Mp3. Ngược lại, những người khác lại đặt vào dịp này biên tập viên chuyên nghiệp Adobe Audition, sử dụng chức năng duy nhất của nó - trích xuất âm thanh từ video. Vâng, và cắt tỉa theo thời gian. Phương pháp đầu tiên có thể được so sánh với việc rót nước uống từ chai vào ly bằng bộ lọc, máy chưng cất và phễu, và phương pháp thứ hai có thể được so sánh với việc đóng đinh trong sách giáo khoa bằng kính hiển vi. Vì vậy, bạn và tôi sẽ sử dụng cách thuận tiện nhất và lựa chọn đúng- Chương trình Easy Video To Audio Converter (xem CG số 33). Cài đặt nó và mở tập tin bạn cần. Sử dụng thanh tìm kiếm, cửa sổ xem trước và các nút Thời gian bắt đầu và Thời gian kết thúc, chọn đoạn video mà bạn muốn trích xuất âm thanh (ví dụ: một bài hát trong phim). Nhấp vào Cài đặt và chỉ định thư mục nơi tệp âm thanh cuối cùng sẽ được lưu và chất lượng xuất. Bạn có thể điền thẻ id3, mặc dù tên của tác phẩm (nếu chỉ có một) vẫn sẽ phải nhập sau. Được rồi, mọi chuyện đã kết thúc rồi. Bấm vào Convert và chờ kết quả. Phải nói rằng nếu bạn sử dụng phiên bản chưa đăng ký của chương trình thì kết quả này khó có thể làm bạn hài lòng: chương trình chỉ chuyển đổi một nửa phân đoạn bạn chỉ định.

Để trích xuất đoạn âm thanh của DVD, tốt nhất bạn nên sử dụng chương trình được thiết kế riêng cho mục đích số 1 này Âm thanh DVD Ripper (www.dvdtox.com/dvdaudioripper.htm, $29, 1,96 MB), rất giống với Trình chuyển đổi Video sang Âm thanh được mô tả ở trên. Vì vậy, hãy cài đặt và chạy chương trình, đưa đĩa vào ổ đĩa và nhấp vào Mở thư mục Tệp IFO được lưu trữ để mở tất cả thông tin âm thanh và video có trên đĩa hoặc Mở tệp IFO để chọn một tệp IFO cụ thể (hoặc nếu chính xác bản sao của DVD nằm trên ổ cứng của bạn). Bây giờ, bằng cách sử dụng bản xem trước, chúng tôi chọn và đánh dấu các bản nhạc chúng tôi cần. Nếu một nhóm chứa một số bản nhạc và bạn chỉ cần một số bản nhạc trong số đó, bạn cần bỏ chọn hộp bên cạnh chính nhóm đó - nếu không, trước tiên chương trình sẽ lấy toàn bộ bản nhạc đó vào một tệp và chỉ sau đó mới bắt đầu làm việc trên các bản nhạc bạn có đã chọn. Sử dụng nút Chỉnh sửa thời gian bắt đầu và kết thúc, bạn có thể chọn đoạn bản nhạc mà bạn quan tâm. Chỉ định định dạng xuất (wav, mp3, ogg hoặc wma), điền vào các thẻ nếu muốn và định cấu hình chất lượng của tệp đầu ra trong cửa sổ Cài đặt. Bây giờ bạn có thể nhấp vào Bắt đầu trích xuất một cách an toàn và chờ kết quả. Phiên bản chưa đăng ký #1 DVD Audio Ripper có một hạn chế về chiều dài tối đađoạn âm thanh đã lưu - không quá năm phút.

phim flash

Công cụ hiệu quả nhất để trích xuất giai điệu yêu thích (hoặc bất kỳ tài nguyên nào khác) từ video Flash có thể được coi là chương trình Sothink SWF Decompiler (www.sothink.com, $80, 3,2 MB). Sau khi cài đặt, chỉ cần chọn video mong muốn trong Explorer và chọn Sothink SWF Decomplier từ menu bật lên. Bạn có thể đạt được kết quả tương tự bằng cách khởi chạy ngay chương trình và tìm video trong bảng Explorer. Bảng Tài nguyên hiện hiển thị tất cả các tài nguyên có thể được lấy từ một clip. Nếu bạn chỉ quan tâm đến âm nhạc, hãy mở tab Âm thanh, nghe các mục trong đó và đánh dấu vào các hộp bên cạnh mục bạn muốn trích xuất. Nếu bạn muốn xóa một số thành phần khỏi video ngoài âm thanh, chỉ cần nghiên cứu nội dung của các tab khác. Khi hoàn tất, nhấp vào Xuất, chỉ định đường dẫn lưu và tận hưởng thành quả. Một cái khác tính năng hữu ích SWF Decomplier - xuất video SWF sang định dạng FLA gốc.

Trò chơi

Trích xuất âm thanh cũng như các tài nguyên khác từ trò chơi trên máy tính là một quá trình thường đòi hỏi sự kiên nhẫn. Các nhà phát triển khác nhau giải quyết vấn đề lưu trữ dữ liệu theo những cách khác nhau và do đó phương pháp phổ quát làm việc với trò chơi không tồn tại và không thể tồn tại: chúng tôi phải tìm ra cách tiếp cận của riêng mình đối với từng sản phẩm. Những cách tiếp cận này có thể là gì? Chà, ví dụ, nếu chúng ta đang nói về một trò chơi thực sự phổ biến, chẳng hạn như GTA: San Andreas hoặc NFS: Underground, thì có lẽ một tiện ích đặc biệt đã được tạo ra cho nó để giải nén các tệp nhạc. Hãy xem trang fansite của trò chơi và bạn có thể sẽ tìm thấy mọi thứ mình cần và hơn thế nữa. Ví dụ: tại gta.gameguru.ru/f_gta_sa_tools.htm, bạn có thể tải xuống trình giải nén GTA SA Music Extractor, với kích thước 50 KB, sẽ thay thế bản nhạc gốc tám đĩa của bạn bằng cách giải mã các tệp âm thanh trò chơi. Vì vậy, hãy kiên nhẫn, hãy mở Google - và lá cờ sẽ nằm trong tay bạn.

Không tìm thấy trình giải nén cho trò chơi mà bạn quan tâm? Trong trường hợp này, các chương trình sẽ hoạt động mục đích chung. Trước hết, hãy thử sử dụng tiện ích Gap (theo tên và tên viết tắt - Game Audio Player, www.ag.ru/files/software/9, 1,09 MB, phần mềm miễn phí) - vì, như bạn đã hiểu, nó được thiết kế đặc biệt cho trích xuất âm nhạc. Gap không có trình cài đặt (tổ tiên người Nga ảnh hưởng đến nó), vì vậy chỉ cần chọn thư mục tiện lợi và giải nén chương trình ở đó. Như bạn có thể hiểu bằng cách khởi chạy Game Audio Player, nó thực sự là một máy nghe nhạc, mặc dù không có nhiều chức năng: nỗ lực bật bộ cân bằng sẽ đưa chúng ta đến một tương lai tươi sáng không xác định theo trình tự thời gian nhưng chắc chắn và vị vua hiện tại của tất cả định dạng âm nhạc- mp3 - không được trình phát hỗ trợ. Nhưng rất nhiều định dạng khác được hỗ trợ, sự tồn tại của chúng mà hầu hết người chơi thậm chí không biết. Chúng tôi nhấp vào biểu tượng Danh sách phát và thấy rằng, mặc dù trình phát tích hợp còn thô sơ nhưng Gap khá chương trình linh hoạt.

Nếu tệp dữ liệu trò chơi thử nghiệm ở dạng rõ ràng nhưng người chơi của bạn không thể đọc được, hãy thử mở chúng tại đây: Tệp > Thêm (các) tệp hoặc Tệp > Thêm thư mục nếu bạn muốn thêm tất cả các tệp mà chương trình hiểu được trong một định dạng nhất định. thư mục vào danh sách phát. Nếu âm thanh bạn đang tìm kiếm được đóng gói vào một hoặc nhiều kho lưu trữ lớn, hãy sử dụng lệnh Tệp > Quét (các) tệp. Nếu bạn không biết nhạc được lưu trữ ở tập tin nào, hãy kiểm tra toàn bộ thư mục trò chơi bằng mục Quét thư mục. Tùy chọn Thư mục con lặp lại ảnh hưởng đến việc các thư mục con có được quét hay không khi quét thư mục đã chọn. Rất có thể bạn sẽ cần phải kích hoạt nó. Vì vậy, nếu bạn may mắn, sau khi quét xong, Gap sẽ cung cấp cho bạn danh sách các đồ vật được tìm thấy. Để nghe một tập tin, bấm đúp vào nó. Bây giờ hãy chọn các tệp bạn muốn lưu và sử dụng lệnh Tệp > Lưu (các) tệp. Nếu định dạng âm thanh trò chơi trở nên xa lạ đối với trình phát của bạn, bạn sẽ thấy khả năng tích hợp sẵn của chương trình để chuyển đổi bất kỳ tệp âm thanh nào sang WAV hữu ích: Tệp > Chuyển đổi (các) tệp. Là Định dạng WAV, bạn có thể chọn PCM (để sau này nén thành mp3) hoặc đã nén các codec như OggVorbis và Windows Media Audio.

Chà, nếu Game Audio Player không giúp được bạn, hãy chuyển sang điểm tiếp theo của kế hoạch. Chương trình Magic Extractor (magicteam.ag.ru/files.html, 943 KB, phần mềm miễn phí) không chỉ nhằm mục đích trích xuất âm thanh mà nhằm mục đích giải nén toàn bộ tệp trò chơi. Magic Extractor hỗ trợ khá nhiều định dạng và tổng cộng có thể sử dụng thành công trong gần 200 trò chơi. Ở bên trái cửa sổ chương trình, bạn có thể thiết lập đường dẫn đến thư mục chứa game và chọn các file bạn quan tâm (nếu mở thư mục mà không thấy file nào để chọn thì có nghĩa là bạn đang lại gặp may và trò chơi của bạn không nằm trong số những trò chơi được hỗ trợ). Nếu mọi thứ suôn sẻ, danh sách các đối tượng được đóng gói với chế độ xem danh mục sẽ xuất hiện ở bên phải cửa sổ. Bằng cách nhấp vào tập tin cần thiết, gọi mục "Trích xuất đối tượng đã chọn" từ menu bật lên. Đúng, khi giải nén một số loại kho lưu trữ - ví dụ: MPQ của Blizzard - bạn sẽ không thấy các danh mục hoặc thậm chí cả phần mở rộng của tệp mà chúng chứa. Bạn sẽ phải lấy mọi thứ ra và mò kim đáy bể. Mặt khác, Gap được mô tả ở trên đối phó hoàn hảo với cùng một MPQ - bạn chỉ cần cung cấp cho nó một danh sách các tệp lưu trữ và những danh sách này đối với hầu hết các tệp. trò chơi nổi tiếng, lưu trữ dữ liệu trong MPQ, được bao gồm trong bản phân phối.

Đừng tuyệt vọng trong bất kỳ trường hợp nào nếu thất bại cũng xảy đến với bạn ở đây. Bạn có thể thử sử dụng một "phổ quát", tức là không dành cho một trò chơi hoặc trò chơi cụ thể, trình giải nén, chẳng hạn như FMV Extractor (trang web, 537 KB, phần mềm miễn phí). Chương trình hỗ trợ 12 định dạng phương tiện chơi game phổ biến nhất - chẳng hạn như Bink và Smacker Video, JPEG, WAV, v.v. Lựa chọn tập tin gốc(Chọn Tệp Nguồn) và bắt đầu quét (Bắt đầu Phân tích). Xem lại danh sách kết quả, đánh dấu các đối tượng bạn cần và nhấp vào Lưu các clip đã chọn. Lưu ý: việc tìm kiếm các tệp mp3 trong FMV Extractor đang ở giai đoạn thử nghiệm, chủ yếu là do thuật toán hiện tại để nhận dạng chúng đòi hỏi, nói một cách nhẹ nhàng, rất nhiều thời gian. Chế độ tìm kiếm mp3 được bật như thế này: BETA > Chế độ MP3. Các tập tin có định dạng khác sẽ không được nhận dạng ở chế độ này. Để tìm kiếm tài nguyên trong các trò chơi cũ, tiện ích Ripper, được viết từ lâu bởi một người Đức yêu thích giải trí tương tác, có thể hữu ích: trang web (56 KB). Chương trình biết khoảng 60 định dạng khác nhau các tệp, nhiều tệp trong số đó không được sử dụng trong các trò chơi hiện đại và không được công nhận bởi các phát triển tương tự được phát hành sau này. Đúng, giống như tất cả các trình giải nén phổ biến, các tệp được mã hóa trở thành trở ngại cho Ripper, và "vịt", tức là các đoạn bị lấy nhầm thành tệp, cũng không phải là hiếm khi sử dụng nó. Bạn có thể tìm thấy hai công cụ giải nén phổ dụng tốt khác tại đây: multiex.xentax.com và www.geocities.com/TimesSquare/8271. Việc sử dụng cả hai chương trình khá minh bạch, vì vậy chúng tôi sẽ không tập trung vào nó.

Ngay cả khi tất cả những phương tiện này không đưa bạn đến kết quả mong muốn, đừng buồn. Truy cập trang web www.extractor.ru, trang này hoàn toàn dành riêng cho việc trích xuất dữ liệu từ trò chơi. Có rất nhiều tiện ích phổ biến và đặc biệt có thể giải quyết được vấn đề của bạn. Chà, những người không quan tâm đến giao thông, thời gian hay tiền bạc không cần phải cố gắng tự mình xóa nhạc khỏi trò chơi. Giờ đây, bạn có thể đặt mua OST (nhạc gốc) cho nhiều trò chơi trên trang web chính thức của nhà phát triển hoặc trong các cửa hàng âm nhạc nổi tiếng, tải xuống qua mạng ngang hàng hoặc chẳng hạn như tại đây: www.game-ost.ru.

Ghi trực tiếp

Nếu các phương pháp được mô tả ở trên không giúp bạn đạt được mục tiêu hoặc nhiệm vụ cụ thể chỉ đơn giản là không được giám sát (giả sử bạn muốn ghi lại một chương trình phát thanh trực tuyến trên Internet), sau đó nó vẫn giữ nguyên phương pháp cuối cùng, mà bạn có thể sử dụng. Nó bao gồm việc ghi âm nhanh chóng khi nó được phát lại. Phương pháp này có thể được coi là cực đoan vì thứ nhất, âm thanh bị nén hai lần (nếu âm thanh nguồn đã được nén và bạn lưu lại dưới dạng mp3 hoặc ogg) và do đó làm giảm chất lượng, và thứ hai, Bản thân bạn hiểu rằng nếu bạn ghi chương trình nửa giờ theo cách này, bạn sẽ cần nửa giờ để thực hiện. Để ghi trực tiếp, bạn có thể sử dụng FairStars Recorder (www.fairstars.com, $25, 1,8 MB) hoặc Total Recorder (www.highcriteria.com, $18, 2,3 MB). Đầu tiên, chuẩn bị âm thanh để ghi (khởi động radio; mở DVD bằng chương trình duy nhất có thể đọc được phần nhạc nền kỳ lạ của nó; tắt các hiệu ứng trong trò chơi, đặt nhạc ở mức tối đa và nhấn tạm dừng). Chọn Aux của card âm thanh làm nguồn ghi và bắt đầu ghi.

lời khuyên
1. Cách dễ nhất để nén tệp WAV thành mp3 là tải xuống (nếu bạn không có, hãy kiểm tra) bộ mã hóa Lame miễn phí từ www.free-codecs.com/Lame_Encode_download.htm (600 KB) và sử dụng nó. Nếu bạn hài lòng với chất lượng mp3 mặc định (128 Kbps 44.100 Hz), chỉ cần kéo và thả bản nhạc WAV vào tệp thực thi lame.exe. Nếu không, hãy gọi bộ mã hóa từ dòng lệnh với các tham số cần thiết (danh sách có thể được lấy như thế này: khập khiễng - trợ giúp).
2. Nếu trò chơi mà bạn quan tâm lưu trữ các tập tin ở dạng văn bản rõ ràng nhưng sử dụng một số định dạng lạ mà ngay cả Winamp cũng không nhận ra, hãy thử chương trình chuyên nghiệp đắt tiền Awave Studio (www.fmjsoft.com/awmain.shtml, $140, 1,6 MB) là một công cụ mạnh mẽ có thể chuyển đổi hầu hết các định dạng âm thanh.

Chúc bạn may mắn!

Mikhail Fedotov Cũng được biết đến với cái tên $ky$pe@R, [email được bảo vệ], Minsk, 2006

Chúng ta sẽ nói về thư viện phần mềmđể làm việc với âm thanh, được gọi là FMOD. Nhà phát triển này sản phẩm phần mềm là Firelight Technologies Pty, Ltd. Tại thời điểm viết bài, bản phát hành FMOD mới nhất là phiên bản 3.74. Bạn có thể tìm thấy tình trạng hiện tại và các phiên bản mới, nếu chúng đã xuất hiện trên trang web www.FMOD.org. Trên cùng một trang, bạn có thể nhận được các phiên bản FMOD cho nhiều hệ điều hành khác nhau. Các liên kết trực tiếp đến bản phân phối FMOD được đặt

Thư viện hàm FMOD là một triển khai API cấp cao nhất, bao gồm nhiều chức năng để làm việc với các tệp âm thanh ở nhiều định dạng khác nhau, xử lý dữ liệu âm thanh và phát âm thanh qua hệ thống âm thanh của máy tính hoặc trình điều khiển game. Để nói về tất cả các khả năng của API này, sẽ cần đến hơn chục trang web. Ngoài ra, chủ đề chính của chúng tôi là phát triển các trò chơi âm thanh, trong đó mối quan tâm chính là các chức năng làm việc với âm thanh vòm (3D). Chúng tôi sẽ giới hạn việc giới thiệu các chức năng này. Cần lưu ý rằng ấn phẩm này không phải hướng dẫn đầy đủ Theo FMOD, do đó, khi phân tích các ví dụ dưới đây, bạn không nên bỏ qua các tài liệu chính thức. Tất cả các ví dụ trong bài viết đều được viết bằng ngôn ngữ lập trình C.

Để tạo nguồn âm thanh 3D và tính toán hình ảnh âm thanh ba chiều, FMOD (phiên bản dành cho Windows) sử dụng bất kỳ hệ thống âm thanh nào sau đây làm cơ sở: WMM (Windows Multimedia), DirectSound3D (hệ thống con âm thanh Microsoft DirectX) và A3D. FMOD giao tiếp với các hệ thống âm thanh này theo cách mà việc chuyển từ hệ thống này sang hệ thống khác yêu cầu những thay đổi tối thiểu đối với mã chương trình (và thường không có thay đổi nào cả). Khi làm việc với hệ thống âm thanh DirectSound3D cơ bản, các chức năng FMOD giúp điều khiển các nguồn âm thanh vòm dễ dàng hơn nhiều, đơn giản hóa việc khởi tạo, phát lại và định vị chúng. Việc lập trình FMOD dễ dàng (so với lập trình hệ thống âm thanh cơ bản) là một ưu điểm quan trọng của API này (bạn có thể đọc trực tiếp về lập trình DirectSound3D trong bài Lập trình âm thanh vòm trong DirectSound3D).

Một ưu điểm khác của FMOD là dễ cài đặt - chỉ cần đặt nó vào thư mục hệ thống hoặc trong thư mục mà ứng dụng được khởi chạy, thư viện dllđể cung cấp các chức năng FMOD. Trong phiên bản 3.74, ngoài dll 32-bit thông thường dành cho Windows, thư viện FMOD 64-bit cũng được cung cấp.

FMOD chứa tài liệu và ví dụ chi tiết (cùng với các tệp tiêu đề và tiện ích khác) cho VisualC, BorlandC, Watcom C, Borland Delphi và VisualBasic. Đối với các ứng dụng phi thương mại, thư viện FMOD được cung cấp miễn phí.

Nhược điểm của FMOD bao gồm thiếu các tính năng như vậy (được triển khai trong DirectSound3D) như tạo nguồn âm thanh định hướng và tạo nguồn âm thanh phụ thuộc (ít nhất, bộ chức năng FMOD không bao gồm các chức năng đặt các tham số này cho âm thanh không gian xử lý).

Mô hình không gian trong FMOD

Mô hình không gian (hệ tọa độ) được sử dụng để đặt nguồn âm thanh 3D tương tự như mô hình không gian trong DirectSound3D. Ở đây, hệ tọa độ Descartes thuận tay trái được sử dụng, bao gồm ba trục tọa độ trực giao. Trục X(x) hướng về bên phải; Trục Y (Y) hướng lên trên; Trục Z (zet) hướng về phía trước (nghĩa là hướng vào màn hình nếu bạn ngồi đối diện với nó). Khoảng cách được đo bằng mét, nhưng bạn có thể đặt đơn vị độ dài khác bằng cách đặt tỷ lệ giữa đồng hồ đo và đơn vị đo mới. Bất kỳ điểm nào trong không gian đều được xác định bởi tọa độ của nó, được viết theo chuỗi X, Y, Z. Tọa độ có thể mang cả giá trị dương và giá trị âm. Bộ ba tọa độ XYZ, đặc trưng cho vị trí của một điểm trong không gian, có thể được coi là một vectơ có gốc tọa độ, nghĩa là tại một điểm có tọa độ (0, 0, 0) và điểm cuối có tọa độ (XYZ). Ngoài vectơ vị trí, FMOD còn sử dụng vectơ vận tốc để tính toán độ dịch chuyển Doppler trong phổ âm thanh của các nguồn chuyển động. Vectơ vận tốc được xác định bởi ba tọa độ điểm cuối của nó (điểm bắt đầu của vectơ vận tốc được coi là điểm (0, 0, 0)). Cần lưu ý rằng FMOD (như DirectSound3D) không tính toán tọa độ của vật thể chuyển động. Nhiệm vụ này phải được lập trình viên giải quyết bằng cách chuyển dữ liệu cần thiết để mô phỏng riêng hình ảnh âm thanh tại một điểm cụ thể trong không gian và tại một thời điểm cụ thể tới các chức năng FMOD. Tức là, về bản chất, FMOD (như DirectSound3D) tính toán hình ảnh âm thanh tĩnh mà người lập trình có thể tạo ra động cho người nghe (người chơi), thường xuyên thay đổi vị trí của nguồn âm thanh.

Trong các hàm FMOD mà vectơ phải được truyền dưới dạng tham số, một con trỏ tới cấu trúc bao gồm ba số thực (float) hoặc tới một mảng bao gồm ba số thực (float) được sử dụng. Nghĩa là, hai cấu trúc sau đây sẽ được các hàm FMOD diễn giải như nhau:

/* mảng */ float pos = (10.0f, 2.0f, 4.2f); /* cấu trúc */ struct VECTOR ( float X; float Y; float Z; ); VECTOR pos = (10.0f, 2.0f, 4.2f);

Mô hình không gian trong FMOD bao gồm một số tham số môi trường khác ảnh hưởng đến sự truyền sóng âm. Sử dụng các chức năng FMOD, bạn có thể đặt mức độ suy giảm âm thanh và mức độ nghiêm trọng của hiệu ứng Doppler.

Đối tượng Soundscape trong FMOD

Trong FMOD, có hai loại đối tượng trong không gian âm thanh ba chiều: nguồn âm thanh và người nghe. Không giống như DirectSound3D, FMOD hỗ trợ mô hình nhiều người nghe. Trong tất cả các khía cạnh khác, cả hai hệ thống đều tương tự nhau.

Nguồn âm thanh trong FMOD chỉ có thể là điểm và không định hướng, nghĩa là nguồn không có kích thước riêng và việc truyền âm thanh từ nguồn này là đa hướng. Ngược lại, vị trí nghe mang tính định hướng. Để làm điều này, hướng của hai vectơ trực giao có kích thước đơn vị được chỉ định. Vectơ đầu tiên định hướng hướng của khuôn mặt, nghĩa là cho biết người nghe đang nhìn vào đâu. Vectơ thứ hai luôn hướng lên trên từ đỉnh đầu, tức là nó chỉ hướng trục thẳng đứng của người nghe. Mô đun của mỗi vectơ này bằng một các phép đo chiều dài, do đó chúng được gọi là đơn vị (mô đun của vectơ được tính bằng căn bậc hai của tổng bình phương độ dài hình chiếu của nó trên trục tọa độ).

Các chức năng làm việc với âm thanh 3D

Để đơn giản cho việc trình bày, bên dưới không chỉ có các hàm FMOD chịu trách nhiệm trực tiếp tạo ra âm thanh vòm mà còn có tất cả các hàm mà lập trình viên cần sử dụng để làm việc với thư viện FMOD. Hơn nữa, trong danh sách, các hàm được sắp xếp theo trình tự gần đúng mà chúng sẽ được gọi trong chương trình tương tác với FMOD. Trong tài liệu đi kèm với FMOD, tất cả các chức năng được liệt kê bên dưới đều được đặt trong phần "Tham khảo API FSOUND".

  • FSOUND_GetVersion() - trả về phiên bản của thư viện FMOD được cài đặt trên máy tính. Giá trị trả về phải được so sánh với hằng số FMOD_VERSION, hằng số này lưu trữ số phiên bản của FMOD mà chương trình đã được biên dịch.
  • FSOUND_SetOutput () / FSOUND_GetOutput () - chọn/lấy hệ thống âm thanh cơ bản (Windows Multimedia, DirectSound, A3D, v.v.). Sự lựa chọn hệ thống cơ bản phải được thực hiện trước khi gọi hàm FSOUND_Init().
  • FSOUND_SetDriver() / FSOUND_GetDriver() - chọn/lấy số thiết bị đầu ra (card âm thanh). Việc lựa chọn thiết bị phải được thực hiện trước khi gọi hàm FSOUND_Init().
  • FSOUND_SetMixer() /FSOUND_GetMixer() - chọn/lấy loại bộ trộn kỹ thuật số. Việc lựa chọn bộ trộn phải được thực hiện trước khi gọi hàm FSOUND_Init(). Việc xác định loại máy trộn là không cần thiết vì FMOD sẽ tự động xác định tùy chọn khả dụng tốt nhất.
  • FSOUND_Init() - khởi tạo hệ thống âm thanh FMOD.
  • FSOUND_Sample_Load() - tải vào bộ nhớ và giải mã tệp âm thanh (.wav, .mp2, .mp3, .ogg, .raw, v.v. được hỗ trợ).
  • FSOUND_3D_SetDistanceFactor() - cho phép bạn đặt các đơn vị độ dài khác ngoài mét.
  • FSOUND_3D_SetDopplerFactor() - cho phép bạn đặt độ lệch Doppler. Giá trị cơ bản (1.0) tương ứng với tốc độ âm thanh 340 m/s.
  • FSOUND_3D_SetRolloffFactor () - cho phép bạn đặt mức độ mất năng lượng sóng âm (suy giảm). Giá trị cơ bản (1.0) tương ứng với điều kiện bình thường.
  • FSOUND_PlaySoundEx() - phát tệp âm thanh được tải vào bộ nhớ thông qua kênh âm thanh.
  • FSOUND_3D_SetAttribut() / FSOUND_3D_GetAttribut() - đặt/lấy vectơ vị trí và vectơ vận tốc của nguồn âm thanh.
  • FSOUND_3D_SetMinMaxDistance() / FSOUND_3D_GetMinMaxDistance() đặt/lấy khoảng cách nghe tối thiểu và tối đa của nguồn âm thanh. Khoảng cách tối thiểu là khoảng cách từ nguồn âm thanh đến người nghe, khi giảm âm lượng âm thanh không còn tăng nữa mà giữ nguyên giá trị đạt được ở khoảng cách tối thiểu. Bằng cách đặt các khoảng cách tối thiểu khác nhau, chẳng hạn như đối với máy bay và ong vò vẽ, bạn có thể làm cho tai chúng dễ nhận thấy như nhau, mặc dù thực tế là tiếng vo ve của động cơ sẽ được coi là âm thanh mạnh hơn. Khoảng cách tối đa là khoảng cách từ nguồn âm đến người nghe, từ đó âm lượng không còn giảm nữa mà vẫn giữ nguyên ở mức đạt được ở khoảng cách tối đa. Điều này có nghĩa là dù nguồn âm thanh có ở xa đến đâu thì vẫn có thể nghe thấy được.
  • FSOUND_SetPaused() - Tạm dừng/tiếp tục phát lại âm thanh trong một kênh.
  • FSOUND_3D_Listener_SetAttribut () / FSOUND_3D_Listener_GetAttribut () - đặt/lấy vectơ vị trí, vectơ vận tốc và vectơ định hướng của người nghe.
  • FSOUND_Update () - cập nhật trạng thái của bộ trộn âm thanh, nghĩa là cập nhật trạng thái của toàn cảnh âm thanh, sau đó mọi thay đổi về vị trí của người nghe hoặc nguồn âm thanh sẽ có hiệu lực.
  • FSOUND_Sample_Free() - Giải phóng bộ nhớ khỏi dữ liệu âm thanh được tải bởi hàm FSOUND_Sample_Load().
  • FSOUND_Close() - Gỡ bỏ hệ thống âm thanh FMOD.

Danh sách này là tối thiểu cần thiết và không bao gồm một số chức năng cho phép bạn nhận Thông tin thêm về card âm thanh, các thuật toán xử lý âm thanh được hỗ trợ, v.v. cũng như quản lý một số thông số phát lại âm thanh.

Thuật toán sử dụng FMOD trong chương trình game

Trọng tâm của chúng tôi sẽ là các trò chơi sử dụng âm thanh vòm (3D). Theo quy định, trong trò chơi có một vòng lặp trò chơi chính, trong đó các đối tượng trò chơi di chuyển trong không gian. Chuyển động như vậy có thể do hành động của người chơi gây ra (ví dụ: trong trò chơi mô phỏng ô tô, người chơi có thể xoay vô lăng sang phải hoặc trái) hoặc do thay đổi tình huống trò chơi (ví dụ: trong trò chơi hành động, một con quái vật có thể tiếp cận) . Sau khi tính toán tọa độ mới của các vật thể, vị trí của các nguồn âm thanh cũng cần được thay đổi sao cho tương ứng với vị trí mới của các vật thể trong không gian trò chơi.

Theo quy định, chu kỳ trò chơi được bắt đầu bằng phần chương trình trong đó các biến được khởi tạo cũng như tải các thư viện và tài nguyên cần thiết. Tại sử dụng FMOD, phần này phải chứa các hàm sau: FSOUND_SetOutput, FSOUND_SetDriver và FSOUND_SetMixer. Bạn có thể chuyển -1 (0FFFFFFFFh) làm tham số để tự động xác định hệ thống âm thanh cơ bản cho hàm FSOUND_SetOutput.

Sau khi khởi chạy FMOD thành công, cần đặt dữ liệu âm thanh vào bộ nhớ theo kịch bản trò chơi. Hàm FSOUND_Sample_Load chịu trách nhiệm cho quá trình này hỗ trợ một số định dạng âm thanh và việc tải một tệp .mp3 theo quan điểm của một lập trình viên không khác gì việc tải một tệp ở định dạng wav. Đây là lúc các ưu điểm của thư viện FMOD phát huy hết tác dụng, cho phép bạn đơn giản hóa quy trình tẻ nhạt trong việc tạo bộ đệm âm thanh và tải dữ liệu vào chúng, đặc trưng của DirectSound. Kết quả của FSOUND_Sample_Load sẽ là một con trỏ tới mẫu âm thanh nằm trong bộ nhớ. Nếu chúng ta chuyển sang thuật ngữ DirectSound, đây sẽ là một dạng tương tự của bộ đệm âm thanh thứ cấp. Mẫu âm thanh được chỉ định có thể được sử dụng để tạo nhiều nguồn âm thanh 3D mà không cần tạo thêm bản sao của mẫu này.

Bây giờ dữ liệu cần thiết đã được tải, bạn có thể bắt đầu tạo hình ảnh âm thanh ba chiều. Cần phải nhớ rằng việc thay đổi vectơ vị trí và vectơ vận tốc, cũng như nhiều đặc điểm khác của nguồn âm thanh, chỉ có thể thực hiện trực tiếp trong quá trình phát lại âm thanh bằng các hàm FSOUND_PlaySound và FSOUND_PlaySoundEx, trước khi đặt nguồn âm thanh tại bất kỳ điểm nào trong không gian. , bạn phải bắt đầu phát âm thanh này . Tuy nhiên, khi gọi các chức năng này, âm thanh sẽ được phát tại điểm người nghe đang ở, điều này có thể làm gián đoạn bối cảnh trò chơi (ví dụ: một con quái vật lẽ ra đang tiếp cận từ góc xa nhất lại đột nhiên gầm gừ dưới tai người chơi). Để tránh sự cố như vậy, hàm FSOUND_PlaySoundEx() cung cấp tham số đặc biệt, âm thanh sẽ ngay lập tức tạm dừng. Một nguồn im lặng có thể được đặt ở vị trí mong muốn mà không có nguy cơ làm ảnh hưởng đến khung cảnh trò chơi và tiếp tục phát âm thanh. Để những thay đổi về hình ảnh âm thanh có hiệu lực, bạn phải gọi hàm FSOUND_Update.

Cần phải nói rằng theo thuật ngữ FMOD, việc phát lại âm thanh xảy ra thông qua một kênh, do đó, bất kỳ điều gì người lập trình muốn thực hiện với nguồn âm thanh 3D đều phải được thực hiện bằng cách sử dụng các chức năng hoạt động với kênh đó. Tham số đầu tiên trong các hàm như vậy là số kênh.

Cú pháp gọi hàm FSOUND_PlaySoundEx như sau:

Int F_API FSOUND_PlaySoundEx(int ​​​​kênh, FSOUND_SAMPLE *sptr, FSOUND_DSPUNIT *dspunit, ký tự đã ký startpaused);

Là tham số, chức năng này nhận số kênh mà âm thanh sẽ được phát qua đó; một con trỏ (bộ mô tả sptr) tới mẫu âm thanh nằm trong bộ nhớ; một con trỏ (điều khiển dspunit) tới khối kênh mà kênh mới được tạo sẽ tham gia (tham số này có thể có giá trị NULL); cờ tạm dừng, cờ này phải TRUE để tạm dừng phát lại âm thanh ngay lập tức.

Nếu cần tạo kênh mới thì hằng số FSOUND_FREE sẽ được truyền vào tham số kênh. Nếu cần phát âm thanh ở tất cả các kênh hiện có thì hằng số FSOUND_ALL sẽ được chuyển đến kênh.

Hàm trả về số (bộ mô tả) của kênh mà âm thanh được phát qua đó. Nếu xảy ra lỗi, hàm trả về -1 (0FFFFFFFFH). Cần có số kênh (bộ mô tả) để hoạt động với các chức năng của lớp liên kết, ví dụ: FSOUND_3D_SetAttribution.

Do đó, việc tạo và định vị nguồn âm thanh có thể được triển khai theo chương trình như sau:

FSOUND_SAMPLE *samp1 = NULL; int kênh1 = -1; /* kiểm tra phiên bản FMOD */ if (FSOUND_GetVersion()

Cần nhớ rằng các hàm FSOUND_PlaySound và FSOUND_PlaySoundEx đặt nguồn âm thanh ở vị trí người nghe hiện tại, do đó, nếu tham số kênh của các hàm này chỉ định số (bộ mô tả) của kênh hiện có thì mặc dù thực tế là đối với kênh này, vị trí khác với vị trí người nghe thì nguồn âm vẫn di chuyển đến vị trí người nghe. Để tránh làm biến dạng hình ảnh âm thanh, trước khi gọi FSOUND_PlaySoundEx, cần lưu vị trí và tốc độ của nguồn âm thanh trong các biến đặc biệt, lấy các giá trị này bằng hàm FSOUND_3D_GetAttribut. Sau đó gọi FSOUND_PlaySoundEx để tạm dừng phát lại; sau đó chuyển nguồn sang điểm mong muốn, sử dụng các giá trị đã lưu và chỉ sau đó mới tiếp tục phát lại. Chuỗi hành động được chỉ định, trong số những thứ khác, áp dụng trực tiếp cho âm thanh được phát một lần (nghĩa là đối với các nguồn không phát ra âm thanh liên tục mà chỉ phát ra âm thanh khi một sự kiện nhất định xảy ra trong trò chơi).

Để thay đổi vị trí, tốc độ và hướng của người nghe trong không gian, hãy sử dụng hàm FSOUND_3D_Listener_SetAttribut. Đây là cú pháp của nó:

Vô hiệu F_API FSOUND_3D_Listener_SetAttribution(const F_FLOAT_API *pos, const F_FLOAT_API *vel, F_FLOAT_API fx, F_FLOAT_API fy, F_FLOAT_API fz, F_FLOAT_API tx, F_FLOAT_API ty, F_FLOAT_API tz);

Là tham số, hàm này nhận một con trỏ tới bộ ba tọa độ vị trí (pos), một con trỏ tới các thành phần vectơ vận tốc (vel), X, Y và Z của vectơ đơn vị xác định hướng phía trước của đầu người nghe (fx, fy , fz); Các thành phần X, Y và Z của vectơ đơn vị xác định hướng thẳng đứng của đầu người nghe (tx, ty, tz). Mặc dù có loại void, nhưng theo tài liệu chính thức, hàm này sẽ trả về TRUE nếu việc thực thi thành công và FALSE trong trường hợp có lỗi.

Không giống như DirectSound3D, FMOD có thể có nhiều người nghe. Điều này được tạo ra cho bảng điều khiển trò chơi, trong đó một thiết bị chơi game có thể được nhiều người chơi sử dụng cùng một lúc. Trình nghe hiện tại được chọn bằng hàm FSOUND_3D_Listener_SetCurrent.

Khi trò chơi hoàn thành và tài nguyên được giải phóng ở đoạn cuối của mã chương trình, bận rộn với chương trình, bạn phải sử dụng các hàm FSOUND_Sample_Free, được truyền một con trỏ (bộ mô tả) tới một đoạn dữ liệu âm thanh trong bộ nhớ dưới dạng tham số và FSOUND_Close, được gọi không có tham số và hủy tải hệ thống âm thanh FMOD.

FSOUND_Sample_Free(samp1); FSOUND_Close();

Xử lý lỗi

Hầu hết các hàm FMOD, trừ khi có quy định khác trong tài liệu, sẽ trả về TRUE nếu thành công. Nếu xảy ra lỗi trong hàm, hàm sẽ trả về FALSE. Để có thêm thông tin về lỗi, hãy sử dụng hàm FSOUND_GetError và FMOD_ErrorString. Chức năng cuối cùng là macro nên bạn cần kích hoạt tập tin tiêu đề FMOD_errors.h.

Hàm FSOUND_GetError không yêu cầu tham số và trả về mã lỗi xảy ra khi thực thi hàm FMOD. Macro FMOD_ErrorString lấy mã này làm tham số và trả về mô tả văn bản lỗi. Đây là một ví dụ về cách gọi các hàm này:

/* in thông báo lỗi trong chế độ bảng điều khiển */ printf("Error: %s\n", FMOD_ErrorString(FSOUND_GetError()));

Quản lý tài nguyên và card âm thanh cấp thấp

Ngày nay, có nhiều card âm thanh có hiệu suất và khả năng khác nhau. Một số trong số chúng có khả năng hỗ trợ tới 100 kênh phần cứng để phát lại âm thanh 3D, một số khác - không quá bốn. Sẽ là thiển cận nếu tập trung vào card âm thanh “yếu” khi phát triển game. Tuy nhiên, lỗi có thể xảy ra khi thiếu kênh phần cứng trong trò chơi có số lượng nguồn âm thanh lớn có thể khiến trò chơi hoàn toàn không thể hoạt động trên nhóm card âm thanh được chỉ định. Để thoát khỏi tình huống này, FMOD đề xuất sử dụng hàm FSOUND_SetMinHardwareChannels.

Hàm này được gọi một lần trước khi gọi FSOUND_Init và đặt số kênh phần cứng tối thiểu phải được card âm thanh hỗ trợ. Sau đó, tất cả số lượng kênh được chỉ định khi gọi FSOUND_SetMinHardwareChannels sẽ được phát bằng các kênh phần cứng hoặc hỗ trợ phần cứng sẽ không được sử dụng và việc trộn các kênh sẽ xảy ra trong phần mềm. Nói cách khác, ví dụ, nếu bạn có 16 âm thanh và thẻ có cùng hoặc số lớn hơn các kênh phần cứng thì quá trình phát lại sẽ đi qua các kênh này. Nếu thẻ chỉ có 4 kênh thì việc trộn tất cả âm thanh sẽ được thực hiện trong phần mềm.

Hỗ trợ ưu tiên

FMOD thực hiện một hệ thống ưu tiên. Nếu muốn phát nhiều nguồn âm thanh số lượng giới hạn kênh, một số có thể quan trọng hơn những kênh khác. Ví dụ: nếu nhân vật chính trong trò chơi là một game bắn súng, thì việc tái tạo âm thanh của tiếng súng có lẽ là điều quan trọng nhất. Vì vậy nguồn âm thanh (shot) này nên để ở mức cao nhất ưu tiên cao thông qua FSOUND_SetPriority. Những âm thanh ít quan trọng hơn sẽ không được phát nếu tất cả các kênh có sẵn đã bị chiếm dụng.

Phần kết luận

Tài liệu được trình bày ở trên là cần thiết để làm quen với các khả năng của FMOD trong lĩnh vực làm việc với âm thanh vòm và bắt đầu sử dụng thư viện này trong các chương trình của bạn. Nhưng chỉ bài viết này thôi thì chưa đủ để tìm hiểu về tất cả các khả năng của thư viện FMOD. Bước tiếp theo có thể là nghiên cứu các ví dụ có trong gói phân phối FMOD.

trang web giới thiệu với bạn tài liệu thứ hai trong loạt bài dành riêng cho âm thanh trong các trò chơi hiện đại của chúng tôi. Lần này chúng ta sẽ xem xét kỹ hơn về nghề của một nhà thiết kế âm thanh và quá trình tạo ra môi trường âm thanh.

Nghề thiết kế âm thanh

Trò chơi hiện đại chứa hàng ngàn âm thanh. Một số trong số chúng gần như không được chú ý, một số khác dường như là điều hiển nhiên, một số khác làm kinh ngạc trí tưởng tượng và khiến chúng ta tin vào những gì đang diễn ra trên màn hình. Đằng sau tất cả những điều này là một nhà thiết kế âm thanh - một chuyên gia về thiết kế âm thanh và tiếng ồn của trò chơi điện tử.

Nghề thiết kế âm thanh đến với ngành game từ thế giới điện ảnh. Năm 1979, đạo diễn Francis Ford Coppola lần đầu tiên đặt tên cho Watler Murch theo cách này vì thành tích xuất sắc của ông trong việc dàn dựng bộ phim chiến tranh Apocalypse Now. Về mặt tư tưởng, nguồn gốc của thiết kế âm thanh có từ xa xưa hơn nhiều: hiệu ứng âm thanh sân khấu đã được sử dụng trong sân khấu cổ.

Nhiệm vụ của người thiết kế âm thanh trò chơi rất đa dạng: chúng bao gồm duy trì cơ chế trò chơi, tạo ra bầu không khí và hình ảnh cảm xúc, cung cấp thông tin và tạo ra nhận xét. Dù vay mượn công nghệ chủ chốt, thiết kế âm thanh trò chơi rất khác với thiết kế âm thanh điện ảnh. Bộ phim tuyến tính và không có tính tương tác. Bản âm thanh của nó được hình thành một lần và không thay đổi sau mỗi lần xem mới. Trong trò chơi, mọi thứ hoàn toàn khác: đệm âm thanhđược lắp ráp nhanh chóng tùy thuộc vào hành động của người chơi và các âm thanh giống nhau có thể được lặp lại nhiều lần, lặp lại và phát trong các môi trường âm thanh khác nhau. Vì vậy, các nhà thiết kế âm thanh trò chơi phải liên tục theo dõi khả năng tương thích của các âm thanh với nhau và tính đến tất cả các phương án có thể có để tái tạo chúng.

Quá trình

Công việc về âm thanh bắt đầu bằng việc viết một lời giải thích - kế hoạch chi tiết, bao gồm tất cả các khía cạnh có thể có của việc ghi bàn trong một trận đấu trong tương lai. Tài liệu này có thể dài vài chục trang và dùng làm tài liệu hướng dẫn cho toàn bộ nhóm âm thanh. Phần giải thích chứa mô tả về âm thanh trò chơi, thông tin về bản chất, định dạng âm thanh, công nghệ ưu tiên, tính năng nền tảng và công cụ.

Sau đó là giai đoạn thực tế đầu tiên trong công việc của các nhà thiết kế âm thanh - ghi lại các âm thanh và tiếng động riêng lẻ. Một số có thể được thu âm trong phòng thu, một số khác yêu cầu đội ngũ âm thanh đến hiện trường.

Kỹ thuật chấm điểm foley xứng đáng được nhắc đến đặc biệt - một trong nhiều di sản của ngành điện ảnh. Trong âm thanh chơi game, bản chất của nó là mô phỏng một số âm thanh gây thiệt hại cho những âm thanh khác dễ thu được hơn. Ví dụ, các trận đánh nhau trong lịch sử được thể hiện bằng cách đấm vào một quả dưa hấu hoặc một miếng thịt, và tiếng kêu lạo xạo của xương khi bẻ gãy một củ cà rốt hoặc nghiền nát một chiếc cốc nhựa. Phương pháp thu được âm thanh hoàn toàn phụ thuộc vào trí tưởng tượng của người thiết kế âm thanh. Một số người ghi lại âm thanh lạo xạo của xương khi dùng búa đập vào xác gà.

Giai đoạn tiếp theo là mô hình hóa những âm thanh độc đáo. Tiếng súng plasma phát ra như thế nào? Nhân vật nghe thấy gì khi đắm mình trong nguồn năng lượng ma thuật? Sinh vật ngoài hành tinh sáu chân sẽ có giọng nói gì? Trò chơi điện tử thực sự có rất nhiều đồ vật không có gì tương tự trong thế giới thực. Mỗi trong số chúng phải có âm thanh chân thực và độc đáo, điều đó có nghĩa là việc ghi âm đơn giản là không còn đủ. Âm thanh trung thực sẽ phải được tăng tốc và giảm tốc độ, “mở ra” ngược lại, kết hợp nhiều lần với nhau, kết hợp với âm sắc tổng hợp và xử lý bằng chuỗi hiệu ứng phức tạp. Ở đây chỉ tưởng tượng thôi là chưa đủ - bạn sẽ phải sử dụng khả năng quan sát tự nhiên. Bạn cần tưởng tượng âm thanh này hoặc âm thanh kia có thể bao gồm những yếu tố nào, bộ phận nào của đồ vật có thể tạo ra nó và âm thanh này cần truyền tải ấn tượng gì đến người chơi.

Vì vậy, cách tiếp cận của một người khổng lồ robot hình người sẽ bao gồm tiếng động cơ kêu cót két, tiếng kim loại va chạm và tiếng dậm mạnh, làm rung chuyển tất cả các vật thể xung quanh.

Không phải tất cả âm thanh đều cần được ghi lại - thường không có đủ thời gian và ngân sách cho việc này. Nhiều thư viện với lượng tài liệu âm thanh khổng lồ hỗ trợ nhà thiết kế âm thanh. Việc sử dụng âm thanh “thư viện” trong thể tinh khiết trong môi trường chuyên nghiệp nó được coi là cách cư xử xấu. Vì vậy, hầu hết các nhà thiết kế âm thanh đều cố gắng làm cho chúng trở nên độc đáo bằng cách kết hợp chúng với nhau và áp dụng các phương pháp xử lý khác nhau.

Tiếp theo là giai đoạn tích hợp âm thanh vào Mã chương trình trò chơi là một quá trình có thể chiếm tới 70% thời gian làm việc của người thiết kế âm thanh. Ở giai đoạn này, âm thanh được gán cho các đối tượng trò chơi và các quy tắc tái tạo và tương tác của chúng được đặt ra.

Ví dụ: chúng tôi có một đối tượng trò chơi "ô tô" có thể phát nổ. Trong trường hợp nào âm thanh vụ nổ của nó sẽ được tái tạo? Nó sẽ được nghe bao xa? Nó quan trọng thế nào với người chơi? Bao lâu thì ô tô sẽ phát nổ trong trò chơi? Liệu nó có át đi lời nói của các nhân vật trong game không? Liệu nó có to hơn tiếng súng không, và nó sẽ phù hợp như thế nào với chúng?

Đây chỉ là một phần nhỏ trong số các vấn đề có thể giải quyết được trong quá trình tích hợp một trong hàng nghìn âm thanh. Trong thời gian gần đây, tình hình còn phức tạp hơn do để thay thế mọi âm thanh trong trò chơi phải nhờ đến các lập trình viên. Phương tiện hiện đại như Audiokinetic Wwise và FMOD Designer giải quyết vấn đề này bằng cách cho phép các nhà soạn nhạc và nhà thiết kế âm thanh tự nhúng bất kỳ tệp âm thanh nào và tự động xử lý chúng.

Lời từ các chuyên gia

Peter Comley là nhà thiết kế âm thanh tại Microsoft Studios. Qua nhiều năm làm việc tại công ty, anh đã tham gia vào nhiều dự án AAA, bao gồm loạt phim Fable, Gears of War và Halo.

“Tôi thường được hỏi nhà thiết kế âm thanh làm gì trong ngành game. Chúng ta hãy thử tưởng tượng một món đồ chơi trẻ em rẻ tiền phát ra âm thanh khi chúng ta nhấn nút. Âm thanh có thể thay đổi tùy theo lực nhấn nhưng nhìn chung cái này không làm được gì khác. Công việc của một nhà thiết kế âm thanh là sử dụng mọi thứ quỹ sẵn có(kỹ năng âm thanh, thiết kế nút bấm, hệ điều hành đồ chơi, thông số kỹ thuật của loa và thậm chí cả thiết kế sản xuất) để người dùng muốn chơi càng lâu càng tốt. Bạn giống như một nhà thiết kế trò chơi, nhưng tất cả những gì bạn có trong tay chỉ là âm thanh. Hơn nữa, bạn cần làm cho trò chơi không chỉ thú vị mà còn gây nghiện. Không biết điều này là tốt hay xấu, nhưng “gây nghiện” là lời khen ngợi cao nhất mà bất kỳ trò chơi nào cũng có thể nhận được.


Tất nhiên, đây không phải là ví dụ thực tế nhất: những trò chơi đơn giản như vậy có lẽ không tồn tại. Nhưng bản chất công việc của một nhà thiết kế âm thanh vẫn như cũ. Hãy lấy tình huống này, nhân độ phức tạp của nó lên hàng nghìn tỷ lần, thêm đủ loại chi tiết trang trí và tưởng tượng rằng các nhiệm vụ liên tục thay đổi. Bây giờ bạn đã có ý tưởng sơ bộ về việc thiết kế âm thanh cho một trò chơi điện tử hiện đại lớn sẽ như thế nào.”

Sam Cooper - Nhà thiết kế âm thanh chính hội sáng tạo. Anh ấy đã làm việc về âm thanh và đã giành được Giải thưởng BAFTA cho Thành tựu trong Âm thanh trò chơi. Ngoài ra, Sam còn tham gia lồng tiếng cho một số game trong series Total War.

“Đôi khi giai điệu của một sự kiện trong trò chơi được thiết lập bằng âm thanh giao diện đơn giản dài nửa giây. Hoặc bạn có thể tác động đến người chơi một cách tiềm thức bằng những tiếng ồn trong khí quyển từ môi trường. Chúng tôi, những nhà thiết kế âm thanh trò chơi, luôn tự hỏi: “Người chơi nên cảm thấy thế nào vào lúc này?”, “Chúng ta có thể hỗ trợ những cảm xúc này như thế nào?”.

Tại Creative Assembly, chúng tôi muốn tự mình ghi lại mọi thứ âm thanh có thể. Nó luôn thú vị - không quan trọng chúng ta có làm việc trong điều kiện hiện trường, hoặc trong studio. Điều tôi thích nhất là ghi lại những tiếng nổ và âm thanh hủy diệt: nó rất thú vị. Nó cũng có thể rất thú vị trong studio. Ví dụ: khi chúng tôi ghi lại âm thanh phân mảnh cho Alien: Isolation, chúng tôi có một bộ micro và một loạt các loại trái cây và rau quả. Chúng tôi dành cả ngày để tiêu diệt chúng, tạo ra đủ loại âm thanh kinh tởm - lúc đó chúng tôi rất bẩn thỉu.


Thiết kế âm thanh trò chơi khác với các lĩnh vực khác của ngành âm thanh ở chỗ chúng tôi phải liên tục nghĩ đến tính tương tác. Điều này ảnh hưởng đến mọi khía cạnh công việc của chúng tôi. Chúng ta không thể chỉ tạo ra một âm thanh hoàn hảo trong một thời điểm nhất định: âm thanh phải đáp ứng toàn bộ dòng những sự kiện có thể xảy ra. Ví dụ, một vụ nổ cần được ghi lại có tính đến vật liệu bị phá hủy và kích thước của căn phòng. Đồng thời, một số tùy chọn được ghi lại cho từng tình huống, vì việc lặp lại cùng một âm thanh sẽ khiến người chơi mệt mỏi.”

Trong bài viết tiếp theo, chúng ta sẽ xem xét khía cạnh thú vị nhất của âm thanh trò chơi đối với nhiều người - âm nhạc. Thực hiện theo các cập nhật trên trang web của chúng tôi. Bạn có thể tìm thấy phần đầu tiên của loạt bài của chúng tôi.