Làm cách nào để Java Sound hoạt động?


8

Tôi có trình phát MP3 dựa trên Java dựa trên khung JLayer / BasicPlayer mà tôi muốn chạy trên Pi. Tôi đã cài đặt OpenJDK trên Raspbian mới nhất. BasicPlayer mở dòng chính xác, nhưng chỉ bị nhiễu âm thanh khi phát lại tệp.

Phát lại âm thanh bằng công cụ dòng lệnh mpg123 hoạt động tốt.

Có điều gì đó không đúng với việc triển khai Âm thanh Java của ARM OpenJDK?

Tôi rất biết ơn cho bất kỳ gợi ý đúng hướng.

Đây là mã:

BasicPlayer pl = new BasicPlayer();
try {
    String path = "/home/pi/Music/testmp3.mp3";
    File file = new File(path);
    pl.open(file);
    pl.play();
} catch (Exception e) {
    CubeLog.logException(e);
}

Cảm ơn.


Tôi đoán rằng điều này có nghĩa là việc mp3giải mã sẽ diễn ra trong phần mềm. Tôi thực sự nghi ngờ rằng Pi sẽ có đủ khả năng để làm điều đó.
Jivings

một lý do có thể là sự nhầm lẫn giữa bigendian / littleendian trong bộ giải mã.
Thorbjørn Ravn Andersen

Thorbjørn: Thú vị, điều đó sẽ dẫn đến tiếng ồn nói lắp, méo mó?
nanoman

Câu trả lời:


5

Tôi không có đủ điểm để bình luận. Vì vậy, tôi sẽ đăng ở đây:

1- "Không đủ CPU" - Tôi đã từng thực hiện giải mã mp3 bằng phần mềm trong Trạm Sparc với CPU 35 MHz. Vì vậy, trừ khi bộ giải mã bị thiếu sót nghiêm trọng, nó sẽ hoạt động.

Bạn có thể làm giải mã đầy đủ đến một tập tin? Nếu có đo thời gian cần thiết. Nếu ít hơn thì tổng thời gian chạy của bài hát bạn đang kinh doanh. Sau đó sao chép tệp unecode sang máy khác và xem wav có ổn không.

[BIÊN TẬP]:

Tôi đã thực hiện một số thử nghiệm với JLayer1.0.1 trên RPI của mình và nó rất chậm:

thời gian java -cacao-classpath jl1.0.1.jar javazoom.jl.converter.jlc file.mp3 -p out.wav

Mất gấp 3 lần để giải mã so với thời gian chạy của bài hát.

[CHỈNH 2]:

Được quản lý để giải mã mp3 trong thời gian ngắn hơn thời gian chạy bằng Java SE Embedded 6 http://www.oracle.com/technetwork/java/embedded/doads/javase/index.html :

pi @ raspbmc: ~ / java / JLayer1.0.1 $ rm out.wav; thời gian ../ejre1.7.0_04/bin/java-classpath jl1.0.1.jar javazoom.jl.converter.jlc Gill \ Scott-Heron- \ The \ \ wav FileName = Gill Scott-Heron- Cuộc cách mạng sẽ không được truyền hình.mp3

người dùng thực 0m57.624s 0m49.900s sys 0m2.320s

Trên 3 phút wav.

Vấn đề là nó không hoạt động trên raspbian:

http://www.raspberrypi.org/phpBB3/viewtopic.php?f=66&t=11671


Cảm ơn đã giải thích - bạn đang sử dụng phân phối nào?
nanoman

Những thử nghiệm đã được thực hiện với raspbmc RC3. Nhưng không có xbmc hoặc X đang chạy.
gfelisberto

4

Đây là vấn đề của bạn:

bởi MartenR »Thu Jul 05, 2012 11:09 sáng

Âm thanh luôn được thực hiện trên cpu cho các codec khác với codec miễn phí, không có giấy phép nào được mua để giải mã âm thanh cho âm thanh mpeg hoặc ac3.

Raspberry Pi đơn giản là không đủ mạnh để giải mã mp3 theo thời gian thực trong phần mềm khi chạy trên JVM.

Bạn có thể thử một vài thứ để làm cho nó hoạt động:

  • Tăng bộ nhớ khả dụng cho CPU
  • Hãy thử chạy một trình phát không bị hạn chế bởi JVM (mặc dù tôi không biết liệu điều này có mang lại sự cải thiện nào không ...)

    Runtime.getRuntime().exec("omxplayer [filename]");

Điều đó không nên cho các đoạn tĩnh nhưng lặp.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen: Điều đó có liên quan đến câu trả lời của tôi không? Ngoại trừ phần Java?
Jivings

Vâng, vâng, nếu triệu chứng chỉ ra điều gì khác.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen: Tôi không hiểu ý của bạn. Bạn có thể giải thích?
Jivings

Tĩnh xảy ra khi các byte sai được đưa vào mạch âm thanh. Nếu phần mềm bị chậm, các byte bên phải được cung cấp, nhưng không đủ nhanh để bộ đệm được sử dụng chứa dữ liệu cũ, khiến âm thanh trong bộ đệm lặp lại. Ít nhất đó là cách tôi đã thấy triệu chứng đó trên các hệ thống khác.
Thorbjørn Ravn Andersen

2

Nếu bất kỳ ứng dụng nào có thể phát âm thanh mượt mà bằng CPU, thì tất cả các ứng dụng sẽ có thể phát âm thanh mượt mà.

OpenJDK 6 có vấn đề với ALSA (chẳng hạn như chơi với thiết bị "mặc định"), vì vậy hãy sử dụng OpenJDK 7 thay thế. Ngoài ra, cả hai phiên bản OpenJDK đều sử dụng trình thông dịch Zero, rất chậm. Bạn nên sử dụng một JVM mà JIT, chẳng hạn như CACAO trên bản phân phối phao mềm hoặc JVM Avian trên bản phân phối nổi (chẳng hạn như Raspbian).


Nhưng bất cứ điều gì có thể chơi mp3 trơn tru? Không ứng dụng nào của tôi có thể
Jivings

0

Tin tuyệt vời - Tôi có nó chạy!

Tôi đã cài đặt hình ảnh wheezy Debian softfloat mới , sau đó cài đặt JDK 7 Update 6 vừa được phát hành trên nó và nó chạy hoàn hảo. Chỉ cần đảm bảo rằng bạn đang cài đặt JDK này trên bản phân phối dựa trên phần mềm.

Tiêu thụ CPU trong khi phát lại MP3 liên tục ở mức khoảng 45%.


Vì vậy, nó là một vấn đề JVM.
Jivings
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.