Phân tích định dạng: âm thanh trong một số game trên Unreal Engine. Trích xuất nhạc từ video và trò chơi

Các dạng nhạc trong game
Shiru (A.Semenov) mailto:shiru và mail dot ru

Trong quá trình phát triển trò chơi, sớm hay muộn câu hỏi cũng được đặt ra - sử dụng định dạng nào để lưu trữ dữ liệu trò chơi. Mục đích của bài đánh giá này là xem xét các tính năng, ưu điểm và nhược điểm của các định dạng phổ biến cho âm nhạc trong trò chơi, để dựa trên thông tin nhận được, bạn có thể đưa ra lựa chọn thông minh trong dự án của mình. Các sắc thái kỹ thuật của việc tái tạo (làm thế nào, với cái gì) các định dạng được đề cập ở đây nằm ngoài phạm vi của bài viết và do đó không được thảo luận ở đây.

Thông thường, chúng ta có thể chia các định dạng được sử dụng để lưu trữ nhạc thành hai nhóm: âm thanh phát trực tuyến, chứa bản âm thanh cuối cùng (tức là chỉ âm thanh), có thể được nén để giảm kích thước của nó; và bản thân các định dạng âm nhạc, lưu trữ một bộ hướng dẫn về thời điểm và nốt nào sẽ phát, cùng với các âm thanh (mẫu) mà các nốt này sẽ được chơi. Đầu tiên, chúng ta hãy xem xét các tính năng của hai nhóm này.

Truyền phát âm thanh

Nó không thực sự là một định dạng âm nhạc - đó là âm thanh vốn có, được ghi trong một tệp. Nhưng âm thanh đó rất có thể là âm nhạc, vì vậy, theo mục đích của bài viết này, âm thanh phát trực tuyến cũng là một định dạng âm nhạc. Nó được gọi là phát trực tuyến vì tệp không cần phải hiện diện toàn bộ trong bộ nhớ - chỉ cần đọc các đoạn nhỏ từ phương tiện, giải mã nó (nếu cần) và gửi nó để phát lại là đủ. Truyền phát âm thanh có hoặc không có nén.

Định dạng truyền phát âm thanh không nén, chúng thường không được sử dụng để lưu trữ nhạc trong trò chơi do kích thước khổng lồ: một giây âm thanh nổi chất lượng CD (44100hz, 16bit) chiếm 172 kilobyte. Ngoại lệ trước đây là CD-DA, định dạng CD âm thanh. Nhưng những trò chơi có âm nhạc ở định dạng này thì những năm trước không được quan sát - luôn có thứ gì đó để lấp đầy một số ít, theo tiêu chuẩn hiện đại, megabyte đĩa CD/DVD.

Phù hợp hơn cho ứng dụng chơi game là các định dạng âm thanh nén. Có những thuật toán để nén âm thanh mà không làm giảm chất lượng (được gọi là thuật toán lossyless), nhưng mức tăng âm lượng là cực kỳ không đáng kể, do đó, các định dạng nén phổ biến nhất có chất lượng bị giảm (thuật toán lossy). Các thuật toán nén phổ biến mang lại mức tăng lớn về khối lượng tập tin cuối cùng, hãy sử dụng ý tưởng “mã hóa âm thanh tâm lý” - loại trừ động các tần số khỏi tín hiệu mà thính giác của con người cảm nhận kém. Thông thường, mức suy hao được chọn mà tai hầu như không nhận thấy được. Các thuật toán nén âm thanh thường hoạt động với tỷ lệ nén cố định, đối với trò chơi, tỷ lệ này thường là khoảng 11:1...7:1 (luồng dữ liệu 128...192kb/s). Có rất nhiều định dạng nén âm thanh, nhưng nổi tiếng và được sử dụng nhiều nhất trong số đó là MP3, WMA, OGG.

MP3 là định dạng lâu đời nhất và rất phổ biến. Ban đầu xuất hiện dưới dạng định dạng nén Track âm thanh dành cho phim video ở định dạng VideoCD (tên đầy đủ MP3 - MPEG Audio Layer III), nhưng khá nhanh chóng bắt đầu được sử dụng riêng. MP3 bây giờ là tiêu chuẩn công nghiệp. Việc sử dụng tệp âm thanh nén MP3 trong các dự án trò chơi thương mại có số lượng phát hành hơn 5.000 bản sẽ phải trả phí - 2.500 USD cho mỗi sản phẩm (giấy phép trò chơi, để biết thêm thông tin về cấp phép, hãy xem các liên kết ở cuối bài viết). Ngày nay MP3 không cung cấp hiệu suất tốt nhất về tỷ lệ kích thước/chất lượng. Các phiên bản cải tiến của định dạng MP3 - ví dụ như MP3pro - với các chỉ số tương tự như WMA/OGG, chưa được phổ biến nhiều.

WMA - Windows Media Audio, một định dạng được chính Microsoft quảng bá như một giải pháp thay thế nâng cao hơn cho MP3, có khả năng gần giống với định dạng OGG. Việc sử dụng nó trong các sản phẩm phần mềm để lưu trữ nội dung âm thanh không cần phải có giấy phép.

OGG - tương đối Hình thức mới nén âm thanh được các nhà phát triển trò chơi quan tâm nhất. Nó không yêu cầu bất kỳ giấy phép nào và hoàn toàn hợp pháp để sử dụng miễn phí; đồng thời nó cung cấp thêm chất lượng caoâm thanh có cùng kích thước với MP3 hoặc kích thước nhỏ hơn với cùng chất lượng âm thanh. Đúng, việc giải mã OGG yêu cầu nhiều tài nguyên máy tính hơn một chút so với MP3/WMA. Bộ mã hóa và giải mã phần mềm từ người tạo định dạng (Vorbis) được phân phối dưới dạng nguồn mở.

Ưu điểm của việc sử dụng âm thanh phát trực tuyến để lưu trữ nhạc:

  • Bạn có thể lưu trữ âm nhạc của bất kỳ ai trình độ kỹ thuật. Về vấn đề này định dạng này linh hoạt và có khả năng (đặc biệt là với khả năng nén tổn thất thấp) có khả năng cung cấp chất lượng âm thanh tốt nhất
  • Các nhạc sĩ của bạn không bị giới hạn bởi khả năng của định dạng và có thể sử dụng các công cụ tạo nhạc thuận tiện cho họ (tức là sẽ dễ dàng tìm được một nhạc sĩ phù hợp)
  • Không yêu cầu nhiều bộ nhớ truy cập tạm thời trong khi phát lại (luồng dữ liệu được đọc từ phương tiện theo từng phần nhỏ)
Nhược điểm:
  • Đối với một số ứng dụng, kích thước của âm thanh nén thậm chí có thể quá lớn - một tác phẩm có độ dài trung bình với chất lượng tốt sẽ mất 3-5 megabyte (khi sử dụng định dạng nén)
  • Việc giảm kích thước chỉ có thể được thực hiện bằng cách giảm đáng kể chất lượng (tăng tổn thất nén) và giảm độ dài của bố cục
  • Thời lượng của một bản nhạc trực tiếp phụ thuộc vào kích thước tệp của nó.
  • Giải mã âm thanh nén yêu cầu tài nguyên CPU tương đối lớn và có thể không thực hiện được trên nền tảng năng lượng thấp nếu không có bộ giải mã phần cứng (trong thời gian thực)

Định dạng nhạc

Bản thân các định dạng âm nhạc là các định dạng không chứa âm thanh cuối cùng mà chỉ chứa thông tin về cách lấy được âm thanh đó. Nghĩa là, thông tin về thời điểm và nốt nào sẽ chơi với âm thanh nào (và - tùy chọn - chính những âm thanh này). Do đó, có thể đạt được mức tăng đáng kể về lượng thông tin được lưu trữ (kích thước tệp). Âm thanh cuối cùng (mà người chơi sẽ nghe thấy) được thu trực tiếp trong quá trình phát nhạc. Việc này chiếm một số tài nguyên máy tính, nhưng nhìn chung tải không lớn hơn khi giải mã âm thanh truyền phát nén và thường thậm chí còn ít hơn (việc phát các định dạng nhạc có thể được tăng tốc phần cứng; ví dụ: trên PC, hỗ trợ phần cứng bắt buộc phổ biến hơn nhiều hơn sự hỗ trợ phần cứng cần thiết để giải mã âm thanh nén).

Các định dạng âm nhạc áp đặt một số hạn chế đối với quyền tự do sáng tạo của một nhạc sĩ - chẳng hạn, một phần giọng hát hoặc nhạc cụ dài được ghi trực tiếp không thể được chèn vào - chính xác hơn là nó sẽ không có lợi, bởi vì sẽ dẫn đến tăng kích thước tệp và sẽ thuận tiện hơn khi sử dụng âm thanh phát trực tuyến. Đối với nhạc “sống động” (dàn nhạc giao hưởng, ban nhạc rock, v.v.), bạn chắc chắn cần sử dụng âm thanh phát trực tuyến. Các định dạng âm nhạc chỉ phù hợp với sự bắt chước nhạc sống (đối với trường hợp âm thanh bắt chước trở nên chấp nhận được do kích thước tệp tăng đáng kể) hoặc đối với nhạc điện tử. Hầu như không thể đạt được sự tương đồng tuyệt đối về âm thanh của một tác phẩm ở định dạng âm nhạc với nhạc sống, chỉ có thể đạt được các mức độ gần đúng khác nhau. Như thực tế cho thấy, hạn chế này không phải là một nhược điểm nghiêm trọng.

Các định dạng âm nhạc được sử dụng trong trò chơi có thể được chia thành hai nhóm nhỏ: MIDI và nhóm định dạng trình theo dõi (được gọi là mô-đun theo dõi, đôi khi còn được gọi đơn giản là mô-đun). Sự khác biệt chính giữa hai nhóm con này là các tệp MIDI tiêu chuẩn chỉ chứa các nốt, trong khi các mô-đun theo dõi, ngoài các nốt, còn lưu trữ các mẫu được sử dụng để phát âm các nốt này. Những khác biệt còn lại chủ yếu liên quan đến một số hạn chế áp đặt những đặc điểm riêng của họ khi viết nhạc.

Một điểm quan trọng: cả định dạng MIDI và trình theo dõi đều không yêu cầu cấp phép để sử dụng trong sản phẩm thương mại.

Định dạng nhạc: MIDI

MIDI (Giao diện kỹ thuật số nhạc cụ) là giao diện phần cứng, đồng thời là tiêu chuẩn mô tả quá trình trao đổi dữ liệu âm nhạc giữa các nhạc cụ điện tử. Dữ liệu âm nhạc không phải là âm thanh, nói một cách đơn giản, nó chỉ là thông tin về các phím tổng hợp được nhấn/nhả. MIDI cũng là tiêu chuẩn để lưu trữ thông tin này trong các tệp (các tùy chọn phổ biến nhất là .mid, .midi). MIDI có thể, theo một cách gần đúng, được gọi là “định dạng nhạc phát trực tuyến”, bởi vì... để phát nó, không cần phải có toàn bộ tệp trong bộ nhớ - bạn có thể đọc từng phần một, như trường hợp của âm thanh phát trực tuyến. Nhưng đây là điểm tương đồng duy nhất giữa các định dạng này.

Nhiều người dùng PC khi nghe thấy từ “midi” sẽ nói một cách khinh thường những câu như “ồ, đây là những tệp nhỏ với âm nhạc khủng khiếp” (đặc biệt là những người vẫn còn hiếm card âm thanh không có bộ tổng hợp WaveTable chất lượng cao). Điều quan trọng là phải hiểu rằng âm thanh của một tác phẩm được ghi trong tệp MIDI là âm thanh của bộ tổng hợp trong máy tính của bạn, qua đó nội dung của tệp được phát; chất lượng âm thanh phụ thuộc trực tiếp vào chất lượng của bộ tổng hợp. Ít người biết rằng MIDI được sử dụng rộng rãi trong việc tạo ra âm nhạc điện tử chuyên nghiệp (bao gồm cả việc tạo nhạc cho trò chơi, để ghi âm sau đó ở định dạng âm thanh).

Hiện tại, nguyên tắc hoạt động duy nhất được sử dụng cho bộ tổng hợp MIDI trên PC được gọi là nguyên tắc hoạt động duy nhất. Tổng hợp WaveTable. Tức là có một bộ (ngân hàng) âm thanh của các nhạc cụ khác nhau (được mô tả theo tiêu chuẩn, ít nhất 128 nhạc cụ và 64 âm trống), bộ tổng hợp sẽ tái tạo các nốt bằng những âm thanh này. Âm thanh của các nhạc cụ không được lưu trữ trong tệp MIDI và dàn nhạc cụ từ các nhà sản xuất card âm thanh khác nhau có thể khác nhau (không phải ở thành phần của nhạc cụ mà ở đặc điểm âm thanh của chúng). Do đó, với các nhóm nhạc cụ khác nhau, âm thanh của cùng một tệp MIDI sẽ thay đổi đôi chút, điều này đôi khi tạo ra một số vấn đề nhất định. Một sáng tác được viết cho một ngân hàng có thể nghe tệ với một ngân hàng khác (ví dụ: do sự cân bằng âm lượng nhạc cụ khác nhau). Điều này cũng đặt ra một hạn chế đối với quyền tự do sáng tạo của nhạc sĩ - anh ta chỉ bị giới hạn bởi những âm sắc (nhạc cụ) mà tiêu chuẩn mô tả. Mặt khác, việc thiếu các mẫu nhạc cụ trong tệp MIDI làm giảm đáng kể kích thước của nó - một tác phẩm khổng lồ có thể chỉ nặng 50-100 kilobyte, đồng thời được nén hoàn hảo nhiều lần bằng ZIP thông thường.

Có một số tiêu chuẩn MIDI tương thích ngược - tiêu chuẩn chính, General Midi (GM); phần mở rộng từ Roland (GS); phần mở rộng nâng cao hơn từ Yamaha (XG). Các định dạng mở rộng có số lượng lớn nhạc cụ trong tiêu chuẩn (tối thiểu 226 cho GS, tối thiểu 480 cho XG - không tính trống) và Tính năng bổ sungđiều khiển tổng hợp âm thanh, qua đó bạn có thể đa dạng hóa và cải thiện chất lượng âm thanh.

Để phát MIDI, bạn cần có bộ tổng hợp MIDI trong hệ thống - trên PC, đó có thể là card âm thanh có bộ tổng hợp WaveTable phần cứng (GM/GS/XG, với dãy âm thanh riêng) hoặc một card âm thanh đơn giản (chẳng hạn như AC"97) với bộ tổng hợp phần mềm (ngốn một phần hiệu suất hệ thống; bộ tổng hợp phần mềm GS với dàn âm thanh tiêu chuẩn được bao gồm trong DirectX). Trên các thiết bị như điện thoại di động, đây có thể là một bộ tổng hợp phần cứng đơn giản (dành cho nguồn điện phần mềm). tổng hợp chưa có cái nào), và không phải WaveTable, mà là một trong những cách thay thế tổng hợp (thường là tổng hợp FM), mô phỏng rất gần âm thanh của nhạc cụ.

Nếu không có bộ tổng hợp phần cứng trong hệ thống và không có đủ tài nguyên bộ xử lý/bộ nhớ để tổng hợp phần mềm thì không thể phát MIDI trên thiết bị đó.

Ưu điểm:

  • Rất kích thước nhỏ các tập tin
  • sử dụng tổng hợp tốt Với ngân hàng tốt mẫu - chất lượng âm thanh cao
  • Nếu bạn có bộ tổng hợp phần cứng, CPU sẽ tải rất nhỏ (trình phát chỉ gửi lệnh đến bộ tổng hợp)
  • Sẽ không khó để tìm được một nhạc sĩ biết làm việc với MIDI
Nhược điểm:
  • Sự phụ thuộc của chất lượng âm thanh vào bộ tổng hợp được sử dụng
  • Âm thanh khác nhau của các nhạc cụ trên các bộ tổng hợp khác nhau (âm nhạc nghe hay trên một bộ tổng hợp có thể nghe tệ trên một bộ tổng hợp khác, ngay cả khi các bộ tổng hợp này có cùng chất lượng cao)
  • Một số sự đơn điệu trong âm thanh của bất kỳ bản nhạc nào trên cùng một bộ tổng hợp (do thực tế là ngân hàng mẫu cho các tác phẩm khác nhau thường không thay đổi)

Định dạng nhạc: nhạc theo dõi

Âm nhạc ở định dạng này còn được gọi là "mô-đun". Giống như trong MIDI, tệp lưu trữ dữ liệu về các nốt, nhưng ngoài chúng, nó còn lưu trữ các mẫu sẽ được sử dụng để phát âm các nốt khi chơi. Đây là nơi kết thúc những điểm tương đồng - về mặt kỹ thuật, có nhiều điểm khác biệt hơn là điểm tương đồng giữa nhạc MIDI và nhạc theo dõi. Bất chấp ý tưởng chung (để lưu trữ các nốt chứ không phải âm thanh cuối cùng), việc triển khai ý tưởng này rất khác nhau.

Trình theo dõi là trình chỉnh sửa nhạc với một loại giao diện nhất định ( Cột dọc số và chữ cái thay vì khuông nhạc quen thuộc với các nhạc sĩ). Trình theo dõi đã xuất hiện từ lâu, trên những chiếc máy tính gia đình đầu tiên có thiết bị tổng hợp âm thanh đơn giản nhất. Các nốt được phát ra bởi phần cứng hệ thống (ví dụ: qua chip SID trên C64, qua chip AY trên ZX128). Trình theo dõi sử dụng mẫu để ghi chú âm thanh xuất hiện vào cuối những năm 80 trên nền tảng AMIGA và sau đó lan rộng sang tất cả các nền tảng khác có phương tiện tái tạo âm thanh kỹ thuật số.

Chính nguyên tắc hoạt động của máy theo dõi đã đặt ra những hạn chế nhất định đối với khả năng của nhạc sĩ, mặt khác, mang lại khả năng kiểm soát âm thanh khác thường. Không giống như chuẩn MIDI chuyên nghiệp, đây là chuẩn nghiệp dư được phát triển bởi những người đam mê âm nhạc máy tính chứ không phải nhà sản xuất thiết bị âm nhạc. Viết nhạc trong trình theo dõi khác với làm việc với trình sắp xếp MIDI phần mềm chuyên nghiệp. Các tính năng chính của trình theo dõi:

Lượng tử hóa thời gian nghiêm ngặt - các nốt không thể bắt đầu và ngừng phát âm bất cứ lúc nào mà chỉ ở một số vị trí nhất định (điều này gây khó khăn cho việc thực hiện một số hiệu ứng, chẳng hạn như chơi hợp âm guitar một cách mượt mà);
- Thiếu đa âm trên một kênh (rãnh), chính xác là có nhiều nốt có thể phát ra đồng thời như có các kênh trong rãnh;
- Sự hiện diện của “hiệu ứng” - lệnh ảnh hưởng đến quá trình chơi từng nốt riêng lẻ. Các hiệu ứng có thể khá bình thường (từ góc độ âm nhạc) - rung, điều khiển âm lượng, portamento; và những cái không hoàn toàn bình thường - chuyển phần đầu của mẫu, quản lý bộ lọc, v.v.

Mặc dù có một số hạn chế (so với MIDI), việc lưu trữ mẫu trong một tệp có bố cục mang lại những lợi thế rõ ràng - khả năng sử dụng bất kỳ âm sắc cần thiết nào, các đoạn của phần trực tiếp (đoạn riff guitar, vòng trống) - điều này cho phép bạn cải thiện chất lượng âm thanh và làm cho nó gần hơn với “âm thanh sống động”.

Có một số lượng lớn các định dạng trình theo dõi - theo quy định, mỗi trình chỉnh sửa mới, ngoài việc hỗ trợ một số định dạng phổ biến nhất, còn có định dạng riêng định dạng riêng. Các định dạng khác nhau về khả năng và cách tổ chức dữ liệu trong tệp, nhưng ý tưởng chung vẫn không thay đổi. Phổ biến nhất là bốn định dạng đã trở thành tiêu chuẩn (được hầu hết tất cả các biên tập viên hỗ trợ): MOD đơn giản (Sound Tracker/Pro Tracker) và S3M (Scream Tracker) và XM (Fast Tracker) và IT (Impulse Tracker) nâng cao hơn.

Định dạng trình theo dõi đầu tiên - MOD (từ mô-đun từ, đó là lý do tại sao nhạc theo dõi được gọi là mô-đun) - có khả năng khiêm tốn: 4 kênh, tối đa 15 nhạc cụ (chỉ các mẫu 8 bit, cộng với khả năng lặp đơn giản trong một mẫu), một bộ hiệu ứng ít ỏi. Sau đó, một bản sửa đổi MOD xuất hiện với khả năng sử dụng 31 nhạc cụ và 8 kênh.

S3M phần nào mở rộng khả năng của MOD - đặc biệt, bạn có thể sử dụng tối đa 32 kênh và số lượng hiệu ứng tăng lên. Nhưng định dạng mẫu vẫn bị giới hạn ở 8 bit.

XM và IT mang lại khả năng sáng tạo lớn hơn nhiều và chất lượng âm thanh cao hơn đáng kể. Một số lượng lớn các kênh (tùy thuộc vào trình chỉnh sửa và sự hỗ trợ từ trình phát), một số lượng lớn hiệu ứng, mẫu 16 bit (chúng có thể được lặp trực tiếp hoặc theo vòng lặp hai chiều), 64 nhạc cụ. Các công cụ trong XM/IT không đồng nghĩa với một mẫu - đó là mô tả về mẫu nào sẽ được sử dụng cho các phạm vi nốt nhất định của nhạc cụ (được gọi là các lớp, điều này cần thiết để cải thiện chất lượng mô phỏng các nhạc cụ trực tiếp) , âm lượng và đường bao toàn cảnh cũng như một số thông số khác.

Phát lại MOD/S3M yêu cầu ít tài nguyên CPU hơn một chút so với phát lại XM/IT phức tạp hơn. Tải trên CPU cũng phụ thuộc vào số lượng kênh trong mô-đun và thuật toán nội suy được sử dụng trong quá trình trộn (chất lượng âm thanh phụ thuộc rất nhiều vào chất lượng nội suy).

Các tệp nhạc theo dõi có thể có kích thước từ hàng trăm byte đến vài megabyte. Kích thước tệp trực tiếp phụ thuộc vào số lượng và chất lượng mẫu được sử dụng. Trung bình, một mô-đun có âm thanh tốt hơn hoặc ít hơn (ở bất kỳ thời lượng nào) mất 200-500 kilobyte.

Để giảm âm lượng chiếm dụng của âm nhạc trong trò chơi, bạn có thể lưu trữ một số bài hát trong một tệp, sử dụng cùng một mẫu nhạc cụ trong đó. Khả năng của trình theo dõi cho phép bạn sắp xếp một số đoạn lặp trong một bố cục; trong trò chơi, bạn có thể phát một bản nhạc như vậy, bắt đầu từ các vị trí khác nhau trong đó.

Có những sửa đổi về định dạng trình theo dõi tiêu chuẩn bằng cách sử dụng tính năng nén mẫu bằng OGG/MP3. Đây là các định dạng MO3 (kết hợp các định dạng IT/XM/S3M/MTM/MOD) và OXM (XM tiêu chuẩn, nhưng sử dụng OGG để đóng gói mẫu). Cả hai định dạng chỉ sử dụng tính năng nén cho những mẫu mà nó mang lại lợi ích về kích thước. Việc nén các mẫu dẫn đến giảm đáng kể dung lượng chiếm trên đĩa và chất lượng giảm gần như không thể nhận thấy. Các mẫu chỉ được lưu dưới dạng nén trong một tệp; khi mô-đun được tải, chúng sẽ được mở rộng trong bộ nhớ, do đó, việc phát các mô-đun đó không làm tăng tải cho CPU, nhưng mô-đun trong khi phát lại sẽ chiếm cùng dung lượng RAM như một mô-đun. giải nén một cái. Việc sử dụng nén mẫu có thể chỉ đơn giản là giảm kích thước tệp hoặc cải thiện chất lượng âm thanh mà không thay đổi kích thước (do sử dụng mẫu chất lượng cao hơn). Công nghệ này có thể không phù hợp để sử dụng trên nền tảng năng lượng thấp - các mẫu có thể mất quá nhiều thời gian để giải mã (tải).

Ưu điểm:

  • Có khả năng cung cấp tỷ lệ kích thước/chất lượng tốt hơn khi kích thước tệp nhạc rất hạn chế (100-500kb)
  • Việc tăng thời lượng của một tác phẩm sẽ làm tăng kích thước tệp rất ít
Nhược điểm:
  • Các định dạng theo dõi không linh hoạt như truyền phát âm thanh
  • Mô-đun đang được phát chiếm RAM (phù hợp với các hệ thống có số lượng RAM hạn chế, chẳng hạn như một số PDA)
  • Đủ cách tiếp cận không chuẩnđến việc viết nhạc, khác với ký hiệu âm nhạc thông thường, điều này làm phức tạp thêm sự phát triển của máy theo dõi dành cho các nhạc sĩ “bình thường”.

Chọn cái gì?

Sau khi làm quen với các chi tiết cụ thể của các định dạng âm nhạc khác nhau, cuối cùng chúng ta cũng có thể chuyển sang vấn đề thực tế là chọn định dạng phù hợp nhất trong khuôn khổ một dự án cụ thể. Trước tiên, bạn cần xác định các tiêu chí lựa chọn: nền tảng mà trò chơi của bạn chạy có những khả năng gì, có những hạn chế kỹ thuật nào. Cụ thể, dung lượng nhạc trên phương tiện và khi phát, RAM có quan trọng không? Tải CPU có quan trọng không? Có khả năng phần cứng để phát nhạc không (bộ giải mã MP3, bộ tổng hợp MIDI).

Việc sử dụng âm thanh phát trực tuyến là hợp lý khi không có giới hạn nghiêm ngặt về không gian chiếm dụng trên phương tiện và có đủ nguồn CPU để giải mã (hoặc có bộ giải mã phần cứng). Ngoài ra, nếu bạn cần tạo nhạc chất lượng rất cao (ví dụ: đài phát thanh trong loạt trò chơi GTA; nhạc được ghi trực tiếp), đơn giản là không còn lựa chọn nào khác ngoại trừ truyền phát âm thanh. Ưu điểm lớn của định dạng này là không có vấn đề gì về kỹ năng (hoặc thiếu) khi sử dụng các thiết bị và chương trình khác nhau của nhạc sĩ - họ có thể tự do sử dụng những công cụ thuận tiện nhất cho mình, bởi vì kết quả luôn có thể được ghi lại trong một tập tin âm thanh.

Nếu có những hạn chế nghiêm ngặt về dung lượng bộ nhớ bị chiếm dụng, tốt hơn hết bạn nên nghĩ đến các định dạng nhạc - MIDI hoặc nhạc theo dõi. Bạn cần lựa chọn giữa hai hướng này dựa trên khả năng phát các định dạng trên nền tảng mục tiêu(MIDI trên Palm hoặc GBA, giả sử bạn không thể phát nhiều) và các hạn chế về kích thước tệp. Khả năng của các nhạc sĩ của bạn cũng đóng một vai trò quan trọng (kể từ khi tạo ra âm nhạc chất lượngở những định dạng này đòi hỏi những kỹ năng nhất định).

Ngày nay, nó được sử dụng phổ biến, trong điều kiện bị hạn chế nghiêm trọng về dung lượng bộ nhớ trên phương tiện (thường là trò chơi phần mềm chia sẻ trên PC) được phân bổ cho âm nhạc, các đoạn trích dài một hai phút của âm thanh phát trực tuyến (thường là OGG) với chất lượng rất thấp (từ 56 kbps trở xuống, ở tốc độ 22050hz mono - khoảng 500-600 kilobyte). Trong những trường hợp như vậy, đáng suy nghĩ về khả năng sử dụng các định dạng theo dõi - trong trường hợp này, sức mạnh CPU đủ để phát lại, nhưng với cùng kích thước tệp hoặc nhỏ hơn, bạn có thể có được âm thanh rõ ràng hơn, chất lượng cao hơn đáng kể (có thể kém sống động hơn - nhưng ở đây tất cả phụ thuộc vào trình độ của nhạc sĩ).

Nếu dự án thực hiện trên PC và dung lượng dành cho âm nhạc rất hạn chế (ví dụ: 500 kilobyte cho toàn bộ tác phẩm âm nhạc), bạn có thể nghĩ đến việc sử dụng tệp MIDI thay vì truyền phát âm thanh và mô-đun theo dõi. Vấn đề về các âm thanh khác nhau khi sử dụng các ngân hàng âm thanh khác nhau có thể được giải quyết bằng cách sử dụng bộ tổng hợp MIDI của phần mềm DirectX - Microsoft Software GS MIDI Synthezer. Nó sử dụng GS-bank 3 megabyte đi kèm với DirectX và nếu bạn viết một bản nhạc MIDI dành riêng cho bộ tổng hợp này, bạn có thể có được âm thanh rất tốt với mức tiêu thụ bộ nhớ tối thiểu cho thiết kế âm nhạc (500 kilobyte có thể dễ dàng phù hợp với hàng chục bản nhạc đã giải nén 5 -10 phút MIDI -file). Bạn cũng có thể sử dụng bộ tổng hợp MIDI phần mềm của riêng mình hoặc ngân hàng DLS của riêng bạn - trong trường hợp này, bạn sẽ nhận được tất cả lợi ích khi làm việc với âm nhạc qua MIDI và khả năng sử dụng âm sắc của riêng bạn, đặc trưng của các định dạng trình theo dõi.

Trên PDA và máy chơi game cầm tay, định dạng phù hợp nhất hiện nay là nhạc theo dõi (định dạng cụ thể được chọn tùy thuộc vào sức mạnh của CPU) - âm lượng của phương tiện, không giống như sức mạnh của bộ xử lý, vẫn chưa phát triển đến khả năng sử dụng phát trực tuyến một cách tự do âm thanh trong trò chơi.

Tóm lại, tôi muốn nói - sự lựa chọn định dạng âm nhạc không nên bị giới hạn bởi khả năng của bạn triển khai phần mềm người chơi. Có một số lượng lớn các thư viện làm sẵn (cả trả phí và miễn phí) để sao chép tất cả định dạng được liệt kê cho tất cả các nền tảng nơi nó có thể được triển khai trong phần cứng.

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 các 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 chức năng FMOD là 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 bảng điều khiển trò chơi. Để 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 là hướng dẫn đầy đủ về FMOD, do đó, khi phân tích các ví dụ bên dưới, bạn không nên bỏ qua 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 Windows) sử dụng bất kỳ hệ thống âm thanh nào sau đây làm cơ sở: WMM (Windows Multimedia), DirectSound3D (sound subsystem 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 các vectơ vị trí, FMOD còn sử dụng các 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 cho các hàm FMOD 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ứ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 chức năng FMOD chịu trách nhiệm trực tiếp cho việc tạo âm thanh vòm, mà còn tất cả các chức năng 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 cơ sở hệ thống âm thanh(Windows đa phương tiện, 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 tin â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 thiết lập mức năng lượng hao hụt sóng âm thanh(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à yêu cầu tối thiểu 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ình mô phỏng ô tô, điều này có thể là xoay vô lăng sang phải hoặc trái) hoặc bằng cách 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. Là một tham số cho Tự động phát hiện hệ thống âm thanh cơ bản có thể chuyển -1 (0FFFFFFFFh) sang 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 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ớ; con trỏ (điều khiển dspunit) tới khối kênh được nối lại kênh đã tạo(tham số này có thể có Giá trị rỗng); 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 bạn cần tạo kênh mới, thì hằng số FSOUND_FREE đượ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 Lớp liên kết, ví dụ: FSOUND_3D_SetAttribut.

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 đó di chuyển nguồn đến điểm mong muốn bằng cách 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 những 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ó kiểu void, nhưng hàm, theo tài liệu chính thức, trả về TRUE nếu thành công và FALSE nếu thất bạ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 chỉ đị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 về 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 hỗ trợ card âm thanh. 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 này (tiếng súng) phải được đặt ở mức ưu tiên cao nhất bằng cách sử dụng 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.

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ác định dạng dữ liệu không xác định. 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ó. Các văn bản không được tìm thấy ở 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 mã 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 đã tìm hiểu khá lâu rồi các tập tin khác nhau, với hy vọng khám phá được điều gì đó nhưng mọi thứ đề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? Đó chỉ là tìm kiếm đầy đủ Theo tất cả dữ liệu từ trò chơi, nó 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 bạ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.

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 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. Rất mục ngắn, trong đó chỉ ID của sự kiện được hiển thị (màu xanh lam) và cũng được biểu thị 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 tập tin cần thiết ID và khởi động trò chơi. Đúng vậy, Hugo mở miệng nhưng không nói gì. Điều này có nghĩa rằng đây chính xác là dữ liệu mà trò chơi tìm thấy âm thanh mong muốn. Đồ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.

Đây hóa ra là một sơ đồ tương tác khá phức tạp. 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 từ văn bản của đoạn hội thoại đến âm thanh. 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 ở lại đâ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.

trang này giới thiệu với bạn tài liệu thứ hai trong loạt bài của chúng tôi dành riêng cho âm thanh trò chơi hiện đạ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 bầu không khí và hình ảnh cảm xúc, cung cấp thông tin và tạo phản hồi. 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 sự tương thích của các âm thanh với nhau và tính đến mọi thứ. những lựa chọn khả thi sự sinh sản của 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à độ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. kính 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ó điểm tương đồng 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 đến là công đoạn tích hợp âm thanh vào mã chương trình của trò chơi - 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 anh ấy có âm thanh to hơn các bức ảnh và nó sẽ kết hợp với chúng như thế nào?

Đâ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 người thiết kế âm thanh là sử dụng tất cả các công cụ có sẵn (kỹ năng âm thanh, thiết kế nút, 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. Và bạn cần phải làm quá trình 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à nhiều nhất ví dụ thực tế: như là trò chơi đơn giản 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 là nhà thiết kế âm thanh chính tại Creative Assembly. 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ứ hơn â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 để phá hủy 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 phải đượ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.