PDA

View Full Version : [Q] Quá Tuyệt !



lamquangtung
17-06-2003, 08:09
Phải nói là trên cả tuyệt vời mới đúng.

Bài viết của Mach2 cực kì hay. Tớ đọc mà mắt cứ sáng lên như là gặp được ... Bác Hồ. Từ lâu, tớ đã mê lập trình Game mà vẫn không hiểu gì về DirectX, OpenGL. May nhờ đọc được bài viết này mà tớ mới thông.

Nhân tiện, ai đó làm ơn chỉ cho tớ 1 vài cái địa chỉ để dowload mấy cái thư viện và tài liệu " hướng dẫn sử dụng trước khi dùng " của hai cái của khỉ trên.

À thêm nữa, ai đó biết được cấu trúc, và cách giải nén các format file sau không: *.jpg, *.wav, *.mov, đại khái là các format file âm thanh và hình ảnh để sử dụng làm Game. Đặc biệt nếu biết cả format file *.max (file lưu dữ liệu của 3D Studio MAX) thì quá tuyệt. Nếu có sách nào hay thì cũng nhờ các bạn chỉ giùm luôn. Cảm ơn.

danceswithwolves
17-06-2003, 22:58
so sánh Mach2@ với... cụ Hồ e rằng làm hắn tổn thọ. :D.

về "con khỉ" DirectX thì bạn có thể đọc thread DirectX 9.0 SDK của bpmtri@ để đăng ký CD.

tnHuAn
20-06-2003, 09:16
Về cấu trúc các fle thì tui chỉ rành file *.wav thôi. Các này do lúc trước tui làm về TAPI ( chơi file wav qua đường điện thoại) nên tui có biết, còn những cấu trúc file khác thì tui thua.

Nhưng nếu bạn chỉ muốn chơi những file này trong game, thì bạn không cần thiết phải biết cấu trúc của nó, mà có sẳn các thư viện làm sẵn cho bạn rồi.

Ví dụ: muốn chơi file mp3, file wav, file mod,... bạn có thể sử dụng thư viện Fmod , hoặc thư viện BASS, tui thì ko dùng Fmod, tui dùng BASS, thư viện cho chất lượng âm thanh rất tốt, và tốc độ cũng ko bị ảnh hưởng nhiều, đặt biệt nó còn support Direct Sound nữa, bạn có thể search trên net để download nó, nó free.

Còn dưới này là cấu trúc file wav:

Ở đây tui chỉ đề cập đến dạng file wav đơn giản nhất là dạng file wav không nén PCM (Pulse Code Modulation), còn nén thì có tới hơn 30 dạng lận, tui cũng ko biết đường đâu mà mò.

File PCM wav mà chúng ta nói ở đây là 1 nhánh con của dạng file RIFF, nên đương nhiên ở đầu file phải có RIFF làm dấu hiệu nhận biết

Cấu trúc file như sau :
<table>
<tr><td>RIFF***x</td>
<td>dấu hiệu nhận biết với ***x là size của file, phần này chiếm 8 bytes. </td>
</tr>

<tr><td>Wavefmt***x</td>
<td>phần này đánh dấu bắt đầu fmt subchunk, subchunk này chứa thông tin về format section, phần này chiếm khoảng 50 bytes </td>
</tr>

<tr><td>.....</td>
<td>The format section (about 50 bytes long).</td>
</tr>

<tr><td>.....</td>
<td>phần này là phần thông tin mở rộng, có hay ko cũng được </td>
</tr>

<tr><td>fact***x</td>
<td>*** thường là chiếm 4 bytes (đây là số byte của fact data).</td>
</tr>

<tr><td>....</td>
<td>Tổng cộng số sample trong file</td>
</tr>

<tr><td>data***x</td>
<td>kích thước của Wave audio data.</td>
</tr>

<tr><td>.....</td>
<td>Phần này là phần chiếm gần như hết dung lượng file:Wave audio data.</td>
</tr>

<tr>
<td>Còn phần cuối là phần ID chấm dứt file</td>
<tr>

</table>

Như vậy, qua bảng cấu trúc trên, bạn cũng thấy rằng file wav được cấu tạo từ các chunk. Chunk đầu tiên là RIFF, trong hầu hết các file RIFF wav, thì RIFF chunk thường có 2 subchunk là: fmt subchunk, phần này chứa thông tin về cấu trúc wave form, subchunk còn lại là data, chứa audio data.

Đúng ra tui cũng nên đưa luôn phần code đọc file wav cho các bạn tham khảo, nhưng như thế dài quá, thôi tôi tóm tắt nhé :

1.Open file .wav ( dùng hàm API waveoutopen)
2.Xác định header file wavm, và đưa nó vào cấu trúc WAVEFORMATEX.
3.Chuẩn bị 1 buffer cho wave data.
4.Copy data trong wave file vào buffer này.
5.Chuẩn bị 1 WAVEHDR structure.
6.Xác định driver để chơi wav file, và 1 hàm callback để lấy event.
7.Play wav file ra ngõ đã chọn ( có thể sound card hoặc line điện thoại, hoặc gì gì đó ...)

Bạn có thể xem chi tiết về các hàm waveout, wavein để hiểu rõ thêm.
Hoặc có thể nói tui, tui send code cũ cho cũng được đượ, nhưng tui viết = delphi đó nha.

BYE

ke_tui_nha
20-06-2003, 13:25
Tui biết cấu trúc của file .MID nè, nếu muốn thì tui send cho :D

CrazyBabe
21-06-2003, 00:22
Nếu muốn tìm format files, bạn có thể find ở http://www.w3.org ví dụ như format JPEG nè: http://www.w3.org/Graphics/JPEG/jfif.txt, còn mí chú kia search đảm bảo ra...

BM
21-06-2003, 07:05
Các bạn có thể vào trang http://www.wotsit.org/ , đây 1 thư viện các dạng file format mà có những dạng từ thời máy tính đục lỗ :D

Mình đang định tập hợp các thư viện, tools, document,... cần thiết cho Game Development, có bạn nào muốn tham dự không?

ke_tui_nha
21-06-2003, 15:02
Biết format là một chuyện, nhưng làm thế nào để viết code đọc được file đó là cả một vấn đề :D

CrazyBabe
22-06-2003, 01:03
Chời, nói thiệt, đó đúng là vấn đề, nhưng vấn đề chính là BẠN PHẢI LÀM ĐƯỢC, đơn giản vì đó là nhiệm vụ của bạn, thế thui.
To BM: Dà dà, có iem thưa đại ka. Nhưng đại ka có host hung ? Mà thiệt ra mí cái đó cũng chỉ cần ít đất đặt link là đủ ko cần load zề rùi lại up lên đâu nhể ? Hay là đại ka định làm wả hàng disc chuyên for game developers ? Hí hí...

kingdungtg
22-04-2010, 15:16
Về cấu trúc các fle thì tui chỉ rành file *.wav thôi. Các này do lúc trước tui làm về TAPI ( chơi file wav qua đường điện thoại) nên tui có biết, còn những cấu trúc file khác thì tui thua.

Nhưng nếu bạn chỉ muốn chơi những file này trong game, thì bạn không cần thiết phải biết cấu trúc của nó, mà có sẳn các thư viện làm sẵn cho bạn rồi.

Ví dụ: muốn chơi file mp3, file wav, file mod,... bạn có thể sử dụng thư viện Fmod , hoặc thư viện BASS, tui thì ko dùng Fmod, tui dùng BASS, thư viện cho chất lượng âm thanh rất tốt, và tốc độ cũng ko bị ảnh hưởng nhiều, đặt biệt nó còn support Direct Sound nữa, bạn có thể search trên net để download nó, nó free.

Còn dưới này là cấu trúc file wav:

Ở đây tui chỉ đề cập đến dạng file wav đơn giản nhất là dạng file wav không nén PCM (Pulse Code Modulation), còn nén thì có tới hơn 30 dạng lận, tui cũng ko biết đường đâu mà mò.

File PCM wav mà chúng ta nói ở đây là 1 nhánh con của dạng file RIFF, nên đương nhiên ở đầu file phải có RIFF làm dấu hiệu nhận biết

Cấu trúc file như sau :
<table>
<tr><td>RIFF***x</td>
<td>dấu hiệu nhận biết với ***x là size của file, phần này chiếm 8 bytes. </td>
</tr>

<tr><td>Wavefmt***x</td>
<td>phần này đánh dấu bắt đầu fmt subchunk, subchunk này chứa thông tin về format section, phần này chiếm khoảng 50 bytes </td>
</tr>

<tr><td>.....</td>
<td>The format section (about 50 bytes long).</td>
</tr>

<tr><td>.....</td>
<td>phần này là phần thông tin mở rộng, có hay ko cũng được </td>
</tr>

<tr><td>fact***x</td>
<td>*** thường là chiếm 4 bytes (đây là số byte của fact data).</td>
</tr>

<tr><td>....</td>
<td>Tổng cộng số sample trong file</td>
</tr>

<tr><td>data***x</td>
<td>kích thước của Wave audio data.</td>
</tr>

<tr><td>.....</td>
<td>Phần này là phần chiếm gần như hết dung lượng file:Wave audio data.</td>
</tr>

<tr>
<td>Còn phần cuối là phần ID chấm dứt file</td>
<tr>

</table>

Như vậy, qua bảng cấu trúc trên, bạn cũng thấy rằng file wav được cấu tạo từ các chunk. Chunk đầu tiên là RIFF, trong hầu hết các file RIFF wav, thì RIFF chunk thường có 2 subchunk là: fmt subchunk, phần này chứa thông tin về cấu trúc wave form, subchunk còn lại là data, chứa audio data.

Đúng ra tui cũng nên đưa luôn phần code đọc file wav cho các bạn tham khảo, nhưng như thế dài quá, thôi tôi tóm tắt nhé :

1.Open file .wav ( dùng hàm API waveoutopen)
2.Xác định header file wavm, và đưa nó vào cấu trúc WAVEFORMATEX.
3.Chuẩn bị 1 buffer cho wave data.
4.Copy data trong wave file vào buffer này.
5.Chuẩn bị 1 WAVEHDR structure.
6.Xác định driver để chơi wav file, và 1 hàm callback để lấy event.
7.Play wav file ra ngõ đã chọn ( có thể sound card hoặc line điện thoại, hoặc gì gì đó ...)

Bạn có thể xem chi tiết về các hàm waveout, wavein để hiểu rõ thêm.
Hoặc có thể nói tui, tui send code cũ cho cũng được đượ, nhưng tui viết = delphi đó nha.

BYE
Bạn có thể cho mình xin code được không tnHuAn?

[=========> Bổ sung bài viết <=========]


Bạn có thể cho mình xin code được không tnHuAn?
Mình đang cần đọc ra các điểm cắt trong đồ thị hình của một file âm thanh dạng *.wave.