2010-08-09 50 views
10

Tôi đang tìm cách nào đó trong Android để phát âm thanh trong bộ nhớ theo cách tương tự với dòng phương pháp waveOutOpen trong lập trình Windows.API âm thanh cấp thấp dành cho Android

Phương pháp waveOut... về cơ bản cho phép ứng dụng tạo mảng giá trị mẫu (như tệp WAV trong bộ nhớ không có tiêu đề) và đổ chúng vào hàng đợi để phát lại tuần tự. Windows chuyển tiếp liền mạch từ một mảng sang mảng tiếp theo, do đó, miễn là ứng dụng tiếp tục bán các mảng vào hàng đợi trước khi phát, chương trình có thể tạo và phát âm thanh liên tục với bất kỳ độ dài tùy ý nào. Windows API cũng kết hợp một cơ chế gọi lại mà ứng dụng có thể sử dụng để chỉ ra tiến độ và tải các bộ đệm bổ sung.

Theo như tôi có thể biết, API âm thanh của Android cho phép ứng dụng phát tệp từ bộ nhớ cục bộ hoặc URL hoặc từ luồng bộ nhớ. Có cách nào để Android "xếp hàng" các cuộc gọi MediaPlayer.start() để một người chơi chuyển tiếp (không có trục trặc) sang lần tiếp theo khi hoàn thành chơi không? Có vẻ như Jet thực hiện điều gì đó như thế này, nhưng chỉ với công cụ tổng hợp nội bộ của riêng nó.

Có cách nào khác để truy cập âm thanh Android theo cách waveOutOpen không?

Trả lời

9
android.media.AudioTrack 

... là lớp bạn có thể đang tìm kiếm.

http://developer.android.com/reference/android/media/AudioTrack.html#AudioTrack%28int,%20int,%20int,%20int,%20int,%20int%29

Sau khi tạo nó, bạn chỉ đơn giản là ăn nó với dữ liệu nhị phân với định dạng được sử dụng phương pháp sau đây:

AudioTrack.writeTo(...) 
+0

Cảm ơn, trông giống như chính xác những gì tôi đang tìm kiếm. Bạn có biết nếu điều này hoạt động trong bộ mô phỏng? Trong Windows Mobile, các phương thức waveOutWrite chỉ hoạt động trong trình mô phỏng (rất nhiều tạm dừng và nói lắp) trong khi làm việc tốt trong các thiết bị thực. – MusiGenesis

+0

Tôi đã không thử nó một cách cá nhân nhưng tôi bắt gặp nó khi tôi đang tìm cách để phát nội dung MP3 từ một luồng. Sử dụng MediaPlayer trong trình giả lập hoạt động tốt trừ khi bạn đã kết nối debbuger. Nó có thể tương tự với AudioTrack. – plugmind

+0

Tôi khá chắc chắn cả MediaPlayer và SoundPool (biết điều này cho một thực tế, đã nhìn vào nó trước đó ngày hôm nay) sử dụng AudioTrack nội bộ, vì vậy tôi muốn nói nó chắc chắn sẽ chạy (đặc biệt là xem nó có thể quản lý để chạy mã nguồn gốc của tôi). –

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