1. Trang chủ
  2. » Luận Văn - Báo Cáo

nghiên cứu công nghệ j2me xây dựng thư viện và công cụ phần mềm hỗ trợ phát triển game trên điện thoại di động

21 429 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 526,28 KB

Nội dung

Vì vậy, nó có một số yêu cầu như khả năng phát lại nhạc sử dụng rất ít tài nguyên hệ thống, hỗ trợ việc phát lại các tông nhạc đơn giản, điều chỉnh âm lượng… Do những yêu cầu trên nên th

Trang 1

TRẦN ANH DŨNG - 02HC022 PHAN TRUNG HIẾU – 02HC055

NGHIÊN CỨU CÔNG NGHỆ J2ME XÂY DỰNG THƯ VIỆN VÀ CÔNG CỤ PHẦN MỀM

HỖ TRỢ PHÁT TRIỂN GAME TRÊN ĐIỆN THOẠI DI ĐỘNG

LUẬN VĂN CỬ NHÂN TIN HỌC GIÁO VIÊN HƯỚNG DẪN

GV Th.S TRẦN MINH TRIẾT – GV VĂN CHÍ NAM

NIÊN KHÓA 2002 – 2005

Trang 2

Chương 4 Xử lý âm thanh

Việc xử lý âm thanh trên điện thoại di động trong J2ME được hỗ trợ bởi thư viện lập trình đa phương tiện trên nền tảng MIDP – Mobile Media API (MMAPI)

và các thư viện lập trình được cung cấp bởi các nhà sản xuất cho từng dòng điện thoại Các điện thoại sử dụng MIDP 2.0 đã được hỗ trợ thư viện lập trình đa phương tiện MMAPI như một chuẩn chung cho các dòng điện thoại Tuy nhiên các điện thoại sử dụng MIDP 1.0 muốn xử lý âm thanh phải dựa trên các thư viện lập trình

âm thanh do nhà sản xuất cung cấp Để tìm hiểu cách thức xử lý âm thanh trên điện thoại di động ta lần lượt tìm hiểu các thư viện lập trình hỗ trợ xử lý âm thanh

4.1 Thư viện lập trình đa phương tiện trong J2ME

Thư viện lập trình đa phương tiện – Mobile Media API (MMAPI) là một gói thư viện tùy chọn hỗ trợ các khả năng đa phương tiện như âm thanh hay video cho ứng dụng trên thiết bị di động dựa trên nền tảng MIDP

4.1.1 Tổng quan về MMAPI

Thư viện MMAPI là một phiên bản rút gọn của Java Media Framework (JMF), một gói trong J2SE, được thiết kế để có thể chạy trên bất kỳ máy ảo nào dựa trên J2ME, bao gồm các máy ảo hỗ trợ CLDC (thường trên các điện thoại di động) hay CDC (trên các máy trợ giúp số cá nhân PDA hay smartphone) MMAPI có các phiên bản và thư viện bổ sung sau:

• MMAPI 1.0 (JSR 135): một gói thư viện tùy chọn cho nền tảng J2ME, thư viện này cung cấp một giao diện lập trình ứng dụng (API) chuẩn để phát lại

và thu các định dạng đa phương tiện như nhạc hoặc video Đây là thư viện chuẩn với số đặc tả là JSR 135, được thiết kế với khả năng mềm dẻo để có thể mở rộng và không phụ thuộc vào thiết bị cũng như nền tảng MMAPI không phụ thuộc vào bất kỳ định dạng lưu trữ, giao thức truyền dữ liệu hoặc những khả năng của các thiết bị phần cứng

Trang 3

• MMAPI 1.1: phiên bản chỉnh sửa của MMAPI 1.0 với những thay đổi cho tính năng phù hợp với tính bảo mật có trong MIDP 2.0 Bản đặc tả này không thay đổi bất kỳ lớp hoặc phương thức nào so với MMAPI 1.0 Một số phương thức trong MMAPI có thể phát sinh ngoại lệ SecurityException nếu như chương trình chạy không theo quyền thích hợp Một trong số các yêu cầu về bảo mật bao gồm tính năng ghi lại (recording) và truy cập mạng Những yêu cầu này nhằm đảm bảo quyền riêng tư của người dùng

• MIDP 2.0 Media API (JSR 118): thư viện này là một tập con của MMAPI để

có thể chạy được trên các thiết bị cấp thấp có hỗ trợ MIDP 2.0 Vì vậy, nó có một số yêu cầu như khả năng phát lại nhạc sử dụng rất ít tài nguyên hệ thống,

hỗ trợ việc phát lại các tông nhạc đơn giản, điều chỉnh âm lượng… Do những yêu cầu trên nên thư viện đa phương tiện trong MIDP 2.0 thiếu một số tính năng của MMAPI như: không hỗ trợ video, không hỗ trợ đồng bộ hóa việc phát lại nhiều tập tin âm thanh cùng lúc

• Thư viện bổ sung đa phương tiện (JSR 234): hỗ trợ bổ sung những khả năng mới nhất của phần cứng như khả năng chụp ảnh số và nghe đài radio Một số tính năng mới của nó bao gồm khả năng điều khiển độ sáng, độ tương phản, đèn flash, chế độ sáng, phóng to hoặc thu nhỏ lại của máy chụp hình trong điện thoại Ngoài ra còn có những tính năng xử lý âm thanh nâng cao như tạo các hiệu ứng âm thanh hay khả năng thay đổi cổng xuất chẳng hạn như ra loa hoặc ra tai nghe

Các đặc tính của MMAPI:

• Hỗ trợ phát lại (playback) và ghi lại (recording) các tập tin đa phương tiện,

hỗ trợ định dạng âm thanh hay hình ảnh bất kỳ

• Sử dụng ít tài nguyên của hệ thống, chạy được với những cấu hình rất thấp của các thiết bị dựa trên CLDC như điện thoại di động

• Không phân biệt giao thức cũng như định dạng

Trang 4

• Khả năng lựa chọn: chỉ sử dụng một số tính năng Chẳng hạn khi lập trình chỉ cần hỗ trợ các tính năng âm thanh cơ bản hay hỗ trợ một vài định dạng nào đó thì ta có thể giới hạn các tính năng khác vì không cần dùng đến

• Khả năng mở rộng: những tính năng mới có thể được thêm vào mà không làm ảnh hưởng đến các tính năng trước đó Hiện nay MMAPI chưa hỗ trợ khả năng định dạng tập tin và các lớp điều khiển cho từng định dạng, các tính năng này có thể được bổ sung trong tương lai

• Khả năng tùy chọn cho các nhà sản xuất thiết bị: mặc dù thư viện này cung cấp các tính năng cho nhiều mục đích khác nhau nhưng nó phải cho phép các nhà sản xuất bỏ qua một số tính năng nếu như thiết bị của họ không hỗ trợ

4.1.2 Xử lý tập tin đa phương tiện trong MIDP 2.0 với MMAPI

Tập hợp các hàm hỗ trợ âm thanh của MMAPI được tích hợp trong MIDP 2.0 được gọi là Audio Building Block (ABB), cung cấp khả năng phát các tông nhạc và các đoạn âm thanh ABB được thi hành trong các gói javax.microedition.media và javax.microedition.media.control

Có rất nhiều loại dữ liệu âm thanh Dữ liệu này được định dạng thành những tập tin khác nhau tùy thuộc vào cách các bit dữ liệu tham gia vào quá trình biểu diễn

âm thanh Các loại âm thanh thông thường là MP3, AIFF, và WAV Trong ABB của MIDP 2.0, các loại âm thanh được xác định dựa trên kiểu định danh đa phương tiện của MIME (Multipurpose Internet Mail Extension) bằng cách dùng một chuỗi

để xác định phần chính và phần mở rộng của loại âm thanh đó Ví dụ như kiểu định danh của MIME cho loại âm thanh WAV là “audio/x-wav”

Kiểu định dạng của từng loại âm thanh chỉ xác định được cách chuyển các bit dữ liệu thành âm thanh Để có thể biểu diễn âm thanh trên điện thoại di động chúng ta còn phải xác định giao thức chuyển dữ liệu âm thanh từ máy chủ lên thiết

bị MIDP để dữ liệu âm thanh được chuyển đổi sang âm thanh

Như vậy, việc xử lý tập tin đa phương tiện bao gồm hai thành phần:

Trang 5

• Xử lý giao thức truyền: đọc dữ liệu từ một nguồn như tập tin hay máy chủ để chuyển đến bộ phận xử lý nội dung

• Xử lý nội dung: giải mã dữ liệu và xuất ra một thiết bị như loa hay màn hình video

Để dễ dàng lập trình hai bộ phận xử lý trên, MMAPI cung cấp hai đối tượng cấp cao sau:

• DataSource: trừu tượng hóa phần xử lý giao thức bằng cách ẩn đi cách đọc

Hình 4-1 Qui trình biểu diễn âm thanh

Đối tượng Manager cung cấp kiểu nội dung âm thanh và giao thức cho đối

tượng Player thông qua phương thức createPlayer( ) Có thể có một hoặc vài điều

khiển được kết hợp với một đối tượng Player để xác định tham số cho việc phát âm

javax.microedition.media.Control là một giao tiếp biểu diễn điều khiển còn gói javax.microedition.media.control chứa các thành phần của giao tiếp điều khiển Mối quan hệ giữa các đối tượng tham gia vào quá trình biểu diễn âm thanh được mô tả như sau:

Trang 6

Hình 4-2 Mối quan hệ giữa các đối tượng 4.1.3 Các thành phần của MMAPI

• javax.mecroedition.media cung cấp một số giao tiếp, một lớp ngoại lệ MediaException và đặc biệt là lớp Manager, đây chính là nơi bắt đầu để nhận

về các đối tượng Player

• javax.mecroedition.media.control định nghĩa những điều khiển cụ thể được

sử dụng với đối tượng Player như VolumeControl, VideoControl,…

• javax.mecroedition.media.protocol cung cấp các giao thức cho việc định nghĩa các điều khiển tùy biến, ví dụ như lớp DataSource là một lớp trừu tượng để xử lý nội dung các tài nguyên

Các lớp trong MMAPI được mô tả trong bảng sau:

javax.microedition

media

Manager Điểm bắt đầu nhận đối tượng Player

để xử lý các tập tin đa phương tiện javax.microedition

để lấy dữ liệu

Bảng 4-1 Các lớp trong MMAPI

Trang 7

Các giao tiếp trong MMAPI được mô tả chi tiết trong bảng sau:

javax.microedition

media

Control Điều khiển một số chức năng liên

quan đến xử lý đa phương tiện Đối tượng Control nhận được từ giao tiếp Controllable, đối tượng Player mở rộng Controllable nên có thể cung cấp các điều khiển, ví dụ như VolumeControl để điều khiển tăng giảm âm thanh

javax.microedition

media

Controllable Cung cấp một giao tiếp để nhận về

đối tượng Control từ một đối tượng Player hoặc từ các đối tượng khác javax.microedition

media

Player Dùng để phát lại các tập tin đa

phương tiện Đối tượng này cung cấp những phương thức để quản lý vòng đời của Player

javax.microedition

media

PlayerListener Dùng để nhận được các đối tượng

phát sinh từ đối tượng Player

javax.microedition

media

TimeBase Một nguồn liên tục các nhịp thời

gian, dùng để đo thời gian cho việc đồng bộ hóa việc phát lại nhiều Player cùng một lúc

GUIControl Nếu các điều khiển hỗ trợ giao tiếp

đồ họa thì cần cung cấp phần hiện thực cho giao tiếp này

javax.microedition

media.control

MetaDataControl Dùng để nhận các thông tin về tập tin

đa phương tiện

PitchControl Điều khiển độ cao thấp tương đối của

âm thanh mà không ảnh hưởng đến tốc độ phát lại

javax.microedition

media.control

RateControl Điều khiển tốc độ phát lại của Player javax.microedition RecordControl Điều khiển việc ghi âm thanh

Trang 8

VideoControl Điều khiển việc hiển thị video, ví dụ

như vị trí tương đối so với Canvas javax.microedition

media.control

VolumeControl Điều khiển âm lượng

javax.microedition

media.protocol

SourceStream Được dùng chung với đối tượng

DataSource để cung cấp giao tiếp cho việc nhận dữ liệu từ Player

Bảng 4-2 Các giao tiếp của MMAPI 4.1.4 Các giao thức và các kiểu âm thanh được hỗ trợ trong MIDP 2.0

MIDP 2.0 rất phức tạp trong việc xác định các giao thức và kiểu nội dung để

thực thi Vì vậy, đối tượng Manager cung cấp hai phương thức để xác định kiểu nội

dung âm thanh và giao thức chuyển dữ liệu âm thanh lên MIDP như sau:

public static String getSupportedContentTypes(String protocol) public static String getSupportedProtocols(String content_type)

Chúng ta có thể tìm ra kiểu nội dung âm thanh dựa trên một giao thức và ngược lại Nếu ta cung cấp giá trị null cho cả hai phương thức trên ta sẽ nhận được một danh sách kiểu nội dung âm thanh hay một danh sách các giao thức Các giao thức và kiểu nội dung âm thanh được mô tả trong bảng sau:

Giao thức Giải thích

device Giao thức lấy dữ liệu từ thiết bị

http Giao thức truyền tập tin Đây là giao thức mạng chuẩn, khi ta xác

định một tập tin đa phương tiện với giao thức HTTP thì toàn bộ tập tin này sẽ được download về trước khi phát ra âm thanh

resource Giao thức lấy dữ liệu từ tài nguyên hệ thống

file Giao thức lấy dữ liệu từ tập tin

Bảng 4-3 Các giao thức truyền dữ liệu

Trang 9

Các kiểu nội dung âm thanh:

Kiểu nội dung Giải thích

audio/midi Tập tin nhạc theo định dạng MIDI

audio/x-smaf Tập tin nhạc theo định dạng SMAF, là tập tin có phần mở

rộng mmf của dòng điện thoại Samsung

audio/x-wav Tập tin nhạc theo định dạng WAVE

audio/x-tone-seq Chuỗi tông nhạc

audio/mpeg Tập tin nhạc theo định dạng MP3

audio/3gp Tập tin video theo định dạng 3GP

Bảng 4-4 Các kiểu nội dung âm thanh

Để xác định kiểu nội dung âm thanh của một đối tượng Player đang tồn tại ta

dùng phương thức getContentType( )

4.1.5 Vòng đời của Player

Do việc biểu diễn âm thanh sử dụng ít tài nguyên trên thiết bị MIDP và các tập tin âm thanh có dung lượng tương đối lớn nên đối tượng Player phải có một vòng đời cho phép các hành vi của nó được điều khiển chính xác Vòng đời này

được mô tả bằng các trạng thái là các giá trị hằng xác định trong đối tượng Player

Có năm trạng thái là: UNREALIZED, REALIZED, PREFETCHED, STARTED, và CLOSED Sáu phương thức sau được dùng để thay đổi trạng thái của đối tượng

Player: realize( ), prefetch( ), start( ), stop( ), deallocate( ), close( )

Khi một đối tượng Player được tạo ra thì đầu tiên nó sẽ ở trạng thái UNREALIZED Ở trạng thái này Player chưa dò tìm dữ liệu âm thanh và chưa yêu

cầu về tài nguyên phần cứng Khi gọi phương thức realize( ) thì đối tượng Player sẽ

định vị dữ liệu âm thanh và chuyển sang trạng thái REALIZED, khởi động những

thông tin cần thiết để có thể nhận về nội dung tập tin Gọi prefetch( ) sẽ chuyển sang

trạng thái PREFETCHED, ở trạng thái này Player sẽ tạo kết nối đến dữ liệu và thực thi những tác vụ khởi động khác như điều khiển thiết bị phần cứng, chuẩn bị và sử

dụng bộ đệm Khi gọi start( ), thì Player bắt đầu xử lý dữ liệu và trạng thái được

chuyển thành STARTED Khi toàn bộ nội dung đã được phát lại xong thì đối tượng

Player sẽ được chuyển về trạng thái PREFETCHED Gọi phương thức close( ) sẽ

Trang 10

chuyển sang trạng thái CLOSED, xác nhận Player đã giải phóng tất cả tài nguyên, ngắt kết nối và không được sử dụng lại

Các phương thức realize( ), prefetch( ) và start( ) được thực thi tuần tự, nếu

ta bỏ qua một phương thức nào thì các trạng thái sẽ ngầm định và các phương thức

bỏ qua vẫn được thực thi Nếu có lỗi xảy ra trong quá trình tìm dữ liệu nguồn hay truy cập tài nguyên hệ thống thì các phương thức trên sẽ thông báo ngoại lệ MediaException

Có nhiều phương thức cho phép quay về trạng thái trước đó Phương thức

stop( ) sẽ chuyển Player từ trạng thái STARTED về trạng thái PREFETCHED

Phương thức deallocate( ) chuyển Player từ trạng thái PREFETCHED hoặc trạng

thái STARTED về trạng thái REALIZED bằng cách giải phóng toàn bộ tài nguyên

Phương thức deallocate( ) cũng có thể chuyển Player từ trạng thái bị mắc kẹt giữa

UNREALIZED và REALIZED khi chưa nhận được dữ liệu về trạng thái UNREALIZED

Cuối cùng, phương thức close( ) chuyển Player từ bất kỳ trạng thái nào về

trạng thái CLOSED Tất cả tài nguyên được giải phóng, ngắt mọi kết nối và chấm dứt vòng đời của Player Sơ đồ sau đây mô tả vòng đời của đối tượng Player:

Hình 4-3 Vòng đời của Player

Trang 11

4.1.6 Điều khiển Player

Định thời của một Player là vị trí của đoạn âm thanh đang được phát Ví dụ, khi Player đang phát một đoạn âm thanh có thời lượng 4s được một nửa thì định thời mang giá trị 2s Nếu ta muốn chuyển đến vị trí bất kỳ trong đoạn âm thanh

đang phát ta có thể dùng hàm setMediaTime( ) Ta có thể xác định vị trí hiện hành của đoạn âm thanh đang phát bằng hàm getMediaTime( ) Tổng thời gian của đoạn

âm thanh ta có thể lấy được bằng hàm getDuration() Tuy nhiên có một số định

dạng âm thanh ta không thể xác định được tổng thời gian biểu diễn nó, khi đó hàm

getDuration( ) trả về giá trị TIME_UNKNOWN

Player cũng có thể được lặp lại, nghĩa là một đoạn âm thanh có thể được Player phát lại nhiều lần Chúng ta có thể điều khiển đặc tính này bằng hàm

setLoopCount( ) trước khi Player bắt đầu Nếu đặt giá trị cho hàm này là -1 thì sẽ

lặp vô hạn định Một đối tượng Player cung cấp những điều khiển (controls) cho kiểu dữ liệu nó đang xử lý Chúng ta có thể liệt kê một danh sách các controls cho

một Player bằng hàm getControls( ), đây là một phương thức mà Player kế thừa từ

giao diện Controllable Phương thức này trả về một mảng các controls thích hợp với Player ABB chỉ định nghĩa một VolumeControl và một ToneControl nhưng khi thực thi thì không cần cung cấp thêm control nào khác phù hợp với kiểu nội dung

âm thanh và các giao thức được hỗ trợ Để nhận được chỉ một control, ta sử dụng

phương thức getControl( ) (cũng kế thừa từ Controllable) Tên của control là tên

của một giao tiếp trong gói javax.microedition.media.control Để có thể trả về control thì Player ít nhất phải ở trạng thái REALIZED Ví dụ khi ta đang phát lại

một tập tin theo định dạng MIDI và gọi phương thức getControl( ) thì ta sẽ nhận về

một đối tượng điều khiển là MIDIControl Để sử dụng VolumeControl định volume

ở giá trị trung bình ta có thể làm như sau:

// Player player = Manager.createPlayer( );

player.prefetch();

VolumeControl vc = (VolumeControl)player.getControl("VolumeControl");

vc.setLevel(50);

Ngày đăng: 29/01/2015, 19:38

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w