2008-10-28 39 views
10

Đối với trò chơi trên máy tính tôi đang tạo, tôi rõ ràng muốn phát âm thanh. Cho đến nay, tôi đã sử dụng AudioClip để phát các tệp WAV. Trong khi phương pháp này hoạt động tốt, các tệp WAV có xu hướng khổng lồ. Một vài giây âm thanh kết thúc là hàng trăm kB. Tôi đang phải đối mặt với việc tải xuống trò chơi có âm thanh 95%!Phát âm thanh nhỏ trong trò chơi Java

Tùy chọn hiển nhiên ở đây sẽ là sử dụng MP3 hoặc Ogg Vorbis. Nhưng tôi đã có thành công hạn chế với điều này - Tôi có thể chơi MP3 bằng cách sử dụng JLayer (nhưng nó đóng trong cùng một chủ đề). Đối với Ogg, tôi không có may mắn chút nào. Tồi tệ hơn, tình trạng pháp lý của JLayer là một chút ở phía đáng ngờ.

Vì vậy, câu hỏi của tôi là cho cả nhà phát triển Java và nói chung là những người thực sự biết điều gì đó về âm thanh: Tôi phải làm gì? Tôi có thể bằng cách nào đó "cắt giảm chất béo" ra khỏi WAV của tôi? Có cách nào để chơi Ogg trong Java không? Có một số định dạng âm thanh khác tôi nên sử dụng thay thế?

Trả lời

4

Bạn có thể sử dụng thư viện JOrbis để phát lại nhạc OGG. Để sử dụng mẫu làm việc, bạn có thể xem các tệp này here.

Tôi cũng đã thử nghiệm với một số nén âm thanh không mất dữ liệu, ví dụ tôi có âm thanh mono 16 bit. Tôi tách các byte trên và dưới của mỗi mẫu và đặt chúng sau mỗi khác. Sau đó, tôi áp dụng một sự thay thế vi phân trong đó mỗi byte được thay thế bởi sự khác biệt của nó từ byte cuối cùng. Và cuối cùng sử dụng GZIP để nén dữ liệu. Tôi đã có thể giảm kích thước dữ liệu xuống 50-60% kích thước ban đầu. Thật không may, điều này là không đủ nên tôi đã chuyển sang định dạng OGG.

Một điều tôi nhận thấy với nhạc 8 bit là nếu tôi thay đổi âm lượng, phát lại trở nên rất ồn. Tôi đã giải quyết vấn đề này bằng cách upsampling dữ liệu âm thanh đến 16 bit ngay trước SourceDataLine.write().

+0

Brilliant! Trước đây tôi đã xem JOrbis, nhưng dường như thiếu tài liệu của nó khiến tôi không thể tìm ra cách thực sự trỏ nó vào một tệp .ogg và làm cho âm thanh phát ra từ loa. – Zarkonnen

+0

Tôi đã lắp ráp JOrbis, VorbisSPI và Tritonus-Share trong một thư viện, vì vậy bạn có thể sử dụng API âm thanh Java (AudioSystem) để giải mã các tệp Java. [link] (http://www.twelvepm.de/vorbis/) – Trilarion

2

Đây có thể là lỗi thời, nhưng chúng được chính thức công nhận bởi nhóm Xiph.org (người duy trì Ogg và Vorbis, trong số những người khác). http://www.vorbis.com/software/#java

2

Sự cố bạn mô tả được giải quyết bởi Giao diện nhà cung cấp dịch vụ (SPI) cho âm thanh trong Java. Kết quả là chỉ cần thêm các tệp JAR vào classpath của bạn sẽ thêm chức năng vào Java Sound API mặc định. Do đó cho phép xử lý nhiều định dạng âm thanh hơn mà không cần thay đổi mã.

Lần cuối cùng tôi đã thử số này Javazoom mọi người đã cung cấp MP3 SPI JAR đang hoạt động. Dựa trên JLayer bạn đã đề cập.

Đối với Vorbis OGG giờ đây cũng có vẻ là thư viện SPI. Xem tài liệu trên số Vorbis SPI trên Javazoom.

2

Nếu bạn quyết định ở lại với định dạng wav ...

Nó có lẽ không phải là rất quan trọng để có các file âm thanh chất lượng cao. Bạn có thể sử dụng trình soạn thảo wav yêu thích của bạn để giảm tốc độ bit, chuyển sang mono hoặc cả hai. Điều đó sẽ tiết kiệm rất nhiều không gian và bạn sẽ không nhận thấy sự khác biệt về chất lượng trong khi chơi trò chơi.

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan