2017-02-10 1 views
2

안녕하세요 저는 C#을 처음 접했고 mp3 파일을 재생해야하는 작은 게임을하고 있습니다.C#, mp3 및 파일 경로

나는 이것에 대해 검색과 같이, 그것을 할 WMP를 사용하고있다 :

WindowsMediaPlayer myplayer = new WindowsMediaPlayer(); 
    myplayer.URL = @"c:\somefolder\project\music.mp3"; 
    myplayer.controls.play(); 

나는 MP3 파일의 전체 경로와 함께 성공적으로 파일을 재생할 수 있어요. 문제는 프로젝트 폴더에서 파일을 직접 사용할 수있는 방법을 찾을 수 없다는 것입니다. 프로젝트를 다른 컴퓨터에 복사하면 mp3 파일의 경로가 잘못되어 소리가 재생되지 않습니다. 나는 지금 막 다른 골목에 서 있다고 느낍니다. 누군가가 나를 도울 수 있다면 감사 할 것입니다! 미리 감사드립니다.

답변

0

사용하는 또 다른 간단한 옵션은 다음과 같습니다.

WindowsMediaPlayer myplayer = new WindowsMediaPlayer(); 
string mp3FileName = "music.mp3"; 
myplayer.URL = AppDomain.CurrentDomain.BaseDirectory + mp3FileName; 
myplayer.controls.play(); 

이 당신의 실행 파일에있는 디렉토리에서 MP3를 재생됩니다 더 반사가 필요하지 않습니다 점에 유의하는 것이 중요하다, 어떤 불필요한 성능 비용을 추가 할 수 있습니다. A A 자원으로 MP3를 내장에 대한 주석까지 따라, 다음과 같은 코드가 추가되면 구현 될 수있는 바와 같이

:

Assembly assembly = Assembly.GetExecutingAssembly(); 
string tmpMP3 = AppDomain.CurrentDomain.BaseDirectory + "temp.mp3"; 
using (Stream stream = assembly.GetManifestResourceStream("YourAssemblyName.music.mp3")) 
using (Stream tmp = new FileStream(tmpMP3, FileMode.Create)) 
{ 
    byte[] buffer = new byte[32 * 1024]; 
    int read; 

    while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     // Creates a temporary MP3 file in the executable directory 
     tmp.Write(buffer, 0, read); 
    } 
} 
WindowsMediaPlayer myplayer = new WindowsMediaPlayer(); 
myplayer.URL = tmpMP3; 
myplayer.controls.play(); 
// Checks the state of the player, and sends the temp file path for deletion 
myplayer.PlayStateChange += (NewState) => 
{ 
    Myplayer_PlayStateChange(NewState, tmpMP3); 
}; 

private static void Myplayer_PlayStateChange(int NewState, string tmpMP3) 
{ 
    if (NewState == (int)WMPPlayState.wmppsMediaEnded) 
    { 
     // Deletes the temp MP3 file 
     File.Delete(tmpMP3); 
    } 
} 
+0

한 가지 더 많은 도움을 주셔서 감사합니다. 그건 그렇고, 그 파일은 exe 파일에 바로 임베디드 수있는 통지? 속성/빌드 동작 - 포함 된 리소스? 내가 옳다면, 어떻게 그것을 myplayer에 부르면 좋을까요 .URL? – ERS

+0

이 작업을 수행하는 방법에 대한 내 편집을 참조하십시오. –

+0

다시 한번 감사드립니다! – ERS

0

MP3 파일을 프로젝트에 추가하십시오. 출력 폴더에 항상 복사하려면 플래그를 지정하십시오. 여기에 자습서가 있습니다 (How to include other files to the output directory in C# upon build?). 당신은 사용할 필요가

: 그럼 당신은 이런 식으로 참조 할 수 있습니다

using System.Windows.Forms; 

을 그리고 다음과 같이 사용할 수 있습니다

WindowsMediaPlayer myplayer = new WindowsMediaPlayer(); 
myplayer.URL = Application.StartupPath + "\music.mp3"; 
myplayer.controls.play(); 
+0

안녕, 그냥 "같이 한 번 더 백 슬래시를 추가했다 \ \ music.mp3 "이제는 매력처럼 작동합니다! 감사합니다! – ERS

+0

알았어. 그것이 도움이된다면 대답과 upvote로 표시하는 것을 잊지 마라. :) – NicoRiff

+0

명성이 15 이하이기 때문에 공개적으로 표시되지 않습니다. – ERS

0

이 모든 시스템에서 작동합니다, 당신의 MP3 & EXE를 제공 같은 폴더에 있습니다.

string mp3Path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + mp3filename 
+0

안녕하세요. 테스트 해보니 도움이되었습니다. 감사합니다. – ERS