2013-01-02 3 views
2

재생 플레이어의 동일한 인스턴스에 다른 음성 파일을 전달하는 것이 가능하다 플레이어의 동일한 인스턴스에 오디오 파일을 전달 하시겠습니까? 는 방법이 코드를 사용하여 플레이어를 만든 후

나는이 수행하여 시도 :

player = (Player) player.getClass().getInputStream("/sound.wav"); 

을하지만,이 사람은 나에게 그이 완료되어야 다음 방법 가능한 경우 java.lang.ClassCastException

인 예외를 부여? 당신이 Player 내로 InputStream 캐스팅하려고하기 때문에

player = (Player) player.getClass().getInputStream("/sound.wav"); 

답변

1

이 줄 당신에게 ClassCastException을 제공합니다. 그건 틀렸어요. 이 줄 제대로player 변수에 Player를 할당 : 당신이 원하는 경우

player = Manager.createPlayer(getClass().getInputStream("/sound.wav"), "audio/x-wav"); 

, 다시하고 다시 내 두 번째 줄을 사용할 수 있습니다, 그것은 소리를 재생하는 시간을 때. 플레이어를 다시 만들 것입니다. 당신이 어떤 사운드 파일을 변경하는 경우,

player.start(); // restart the same sound 

그러나 : 당신은 사운드 파일 (.WAV)을 변경하지 않는 경우 소리가 재생이 끝나면, 다음, 난 그냥 새로운 선수를 만드는없이 다시 를 시작할 것 당신은 그냥 다시 createPlayer를 호출하는 것이 더 쉬울 수 있습니다 사용 : 여기

player = Manager.createPlayer(getClass().getInputStream("/another_sound.wav"), "audio/x-wav"); 

일부 BlackBerry docs on the Player 있습니다. 다른 J2ME 플랫폼에있을 수 있지만, 나는 같은 라이프 사이클 규칙이 아마 적용 생각 : 실현, 시작, 프리 페치 실현 CLOSED :

플레이어는 다섯 개 가지 상태가 있습니다.

이러한 수명주기 상태의 목적은 프로그래밍 방식의 에 잠재적으로 시간 소모적 인 작업을 제어하는 ​​것입니다. 예를 들어 플레이어를 처음 만들면 UNREALIZED 상태가됩니다. UNREALIZED에서 REALIZED로 전환되면 플레이어는 기능 (예 : 서버 또는 파일 시스템과 통신)에 필요한 모든 리소스를 찾는 데 필요한 통신을 수행합니다. 실현 방법을 사용하면 응용 프로그램에서 적절한 시간에 잠재적으로 시간이 소요되는 프로세스를 시작할 수 있습니다.

일반적으로 플레이어는 UNREALIZED 상태에서 REALISED 상태로 이동 한 다음 PREFETCHED 상태로 이동하고 마지막으로 STARTED 상태로 이동합니다.

플레이어가 미디어의 끝에 도달하면 플레이어가 멈 춥니 다. 또는 중지 메서드가 호출 될 때. 이 경우 플레이어는 STARTED 상태에서 PREFETCHED 상태로 다시 이동합니다. 그런 다음 사이클을 반복 할 준비가되었습니다.

플레이어를 사용하려면 이러한 라이프 사이클 상태를 통해 의 동작을 관리하고 플레이어의 상태 전환 방법을 사용하여 상태로 이동해야하는 매개 변수를 설정해야합니다.

enter image description here

업데이트

: (?)
당신이 코드의 복잡성과 관련되는 것 같은, 그리고 객체, here is a code sample를 할당 해제 아마도 , 그 희망이 너무 어렵지 않을 것을 보여줍니다. 그 대답에서 코드를 가져 와서 autio 파일 (musicFile)의 이름을 전달하는 메소드로 만듭니다.

+0

즉, 플레이어를 만들지 않고 다른 오디오 파일을 전달할 방법이 없다는 것을 의미합니다. 다른 플레이어를 만들어야합니다. 하지만 내 응용 프로그램에서 나는 VolumeControl을 사용하고 있습니다. 이전에 만든 두 번째 파일을 재생할 다른 플레이어를 만들면 VolumeControl은 다른 플레이어와 작업하지 않을 것입니다 ... 이 문제를 극복하기 위해 두 번째 플레이어에 대한 다른 VolumeControl을 만들거나 첫 번째 VolumeControl을 할당 해제하고 두 번째 플레이어에 다시 할당합니다. 이것은 코드 n 노력의 복잡성도 증가시킬 것입니다 ... 그 이유는 다른 플레이어를 만들지 않고 오디오 파일을 전달하는 방법을 원합니다 ..... – Rahul

+2

추가 * 복잡성은 필요 없습니다. 6 ~ 10 줄의 코드로 하나의 메소드를 작성합니다. 이 방법에서는'createPlayer()'로 플레이어를 생성하고'VolumeControl'을 얻습니다. 하나의 방법을 두 번 이상 호출합니다. 사운드를 처음 재생할 때 호출하고 다시 재생할 때 다시 호출합니다. 추가적인 복잡성은 없습니다. 사운드 파일을 바꾸려고하면 * 더 복잡해집니다. 원하는 내용을 이해하지만 직접 API 문서를 볼 수 있습니다. ** 오디오 파일을 ** 변경하는 방법이 없습니다. 누군가 다른 사람이한다면, 그들은 해결책을 게시 할 것입니다. – Nate

+0

Ok 네이트 ..... 나는 내 문제가 해결되었다는 것을 알았습니다. : D ... 제안을 위해 고맙습니다. 또 하나의 질문이 있습니다. 능력이란 무엇인지 어떻게 알 수 있습니까? .mp3 또는 .wav 또는 다른 파일 임에도 불구하고 특정 미디어 파일을 재생하는 에뮬레이터 또는 장치 – Rahul