2010-03-14 2 views
4

TMmedPlayer 구성 요소를 사용하여 음악을 재생합니다.델파이 : MCI 시작시 오류

대부분의 트랙에서 정상적으로 작동합니다. 그러나 일부 트랙에서는 작동하지 않습니다. 내가 그들을 재생하려면, 다음과 같은 오류 메시지가 표시됩니다 : 클래스 EMCIDeviceError의 예외가 발생 프로젝트 pMusicPlayer.exe에서

: 대략 독일어하지만

alt text http://i42.tinypic.com/vervci.jpg

는 것을 의미한다. 메시지 : "MCI 시작시 오류가 발생했습니다.". 프로세스가 중지되었습니다. "단일 명령/명령문"또는 "시작"을 계속하십시오.

TMediaPlayer의 "재생"프로 시저를 호출 한 후 프로그램이 바로 종료됩니다.

  • 파일 크기 : 7.40 MB
  • 기간 : 4시 2분 분
  • 비트 전송률 : 256 Kbit에서/s의

I

이 오류는 예를 들어 다음과 같은 파일로 발생 이 파일을 128 kBit/s의 비트율로 인코딩하여 3.70 MB의 파일 크기로 인코딩했습니다. 제대로 작동합니다!

첫 번째 파일에는 어떤 문제가 있습니까? Windows Media Player 또는 다른 프로그램에서 문제없이 재생할 수 있습니다.

델파이의 TMediaPlayer는 큰 파일 (예 :> 5 MB) 또는 높은 비트 전송률 (예 :> 128 kBit/s)을 처리 할 수 ​​있습니까?

문제를 해결하려면 어떻게해야합니까?

추가 질문 : 메시지 창을 방지하기 위해 제외 가 왜/시도 사용할 수 없다?

try 
    Player.Play; 
    except 
    showmessage('Cannot be played'); 
    end; 

이것은 작동하지 않습니다.

+0

"디버그 DCU"링커 옵션을 켜고 'Play' 메소드를 실행하여 델파이가 예외를 발생시키는 API 오류 코드를 찾습니다. –

+0

"디버그 DCU"를 켰지 만 "재생"방법을 단계별로 실행하는 방법을 모릅니다! 나는 MMS system.pas를 추가로 열었다. 하지만 어떻게해야합니까? 컴파일 중에는 런타임에 오류가 없습니다. – caw

+0

MP3를 인코딩하는 데 당신은 무엇을 사용하고 있습니까? –

답변

2

확인 문제의 원인을 발견했습니다. 이 작은 Delphi MP3 Player Tutorial (download project there)을 사용하여 MP3 파일을 테스트했으며 MP3를 사용하는 것과 같은 오류가 발생했습니다.

일부 테스트 후 다른 MP3 파일이 튜토리얼 응용 프로그램과 잘 작동한다는 것을 알았습니다. MP3는 Windows Media Player 및 기타 멀티미디어 플레이어에서 잘 작동했습니다.

예 파일을 다시 인코딩하면 문제가 해결되지만 실제로 문제는 아닙니다. 문제는 사운드 인코딩 자체가 아니라 MP3 (메타 데이터) 태그의 메타 데이터에서 비롯됩니다.

나는 단지 파일에 태그를 제거 Mp3tag을 사용하는 모든 것이, 그 후도 더 EMCIDeviceError을 연주합니다.

TMediaPlayer가 메타 데이터 형식으로 충돌 할 수 있습니다. 또한 검색 도중 JPEG 커버 아트를 포함하는 MP3 파일과 함께 TMediaPlayer 버그 보고서를 보았습니다.

내가 본 포럼에서 TMediaPlayer에 대한 사람들의 버그에 답하는 대부분의 사람들은 TMediaPlayer가 실제로 시대에 뒤떨어져 있고 일반적으로 좋지 않다 (나는 10 년 후에도 업데이트되지 않았다고 생각한다) 고 말했습니다. 응용 프로그램에서 강력한 MP3 지원을 원하면 another component을 사용하십시오. 또한 Delphi 응용 프로그램에서도 Windows Media Player ActiveX를 사용할 수 있습니다. 은 try 대한 추가 질문에 대한

/같은 시도를 제외하고 :

try 
    //load & play here 
except 
    on E:Exception do 
     ShowMessage('Cannot be played! ' + E.Message); 
end; 

을하거나 오류를 잡기 아니에요 경우 인 TApplicationEvents을 사용하는 것이 좋습니다.

+0

감사합니다! 코드가 작동하지 않습니다. 메시지 창 (위 그림 참조)이 계속 표시됩니다. 현재 WMP 버전은 11이지만 버전 9에서도 작동하지 않습니다. 문제가있는 MP3 : http://rapidshare.com/files/364267687/cdc27b5901277bb54a3c67c8dc3e1a27.mp3.html – caw

+0

시도가 예외를 잡아서 "재생할 수 없습니다!"라는 메시지가 나타납니다. 메시지 ... 그것은 붙잡 혔니? – AlexV

+0

답변이 업데이트되었습니다. – AlexV

1

TApplicationEvents 컨트롤을 폼에 배치하고 OnException 이벤트를 처리 해 보았습니까?

procedure TForm1.ApplicationEvents1Exception(Sender: TObject; 
    E: Exception); 
begin 
    if E is EMCIDeviceError then 
    begin 
    MessageDlg('Cannot be played, '+ e.message, mtError, [mbOK], 0) 
    //Or Do Nothing... 
    end else 
    MessageDlg(e.message, mtError, [mbOK], 0); 
end; 

예외는 오픈이 아닌 플레이에서 발생합니다. 따라서 코드를 변경하여 공개 프로 시저에서 예외를 트랩 할 수 있습니다.

MediaPlayer2.filename :=''; 
    try 
    MediaPlayer2.Open; 
    except 
    on E: Exception do 
    MessageDlg('Can not be opened, '+ E.message, mtError, [mbOK], 0); 
    end; 
    if MediaPlayer2.Error = 0 then 
    MediaPlayer2.play; 

winlame을 사용하여 mp3를 다시 인코딩하면 작동합니다. mp3를 인코딩하는 데 당신은 무엇을 사용하고 있습니까?