2013-07-18 1 views
2

XNA Game Studio를 사용하여 런타임에 노래를로드하려고합니다. 그러나 프로그램을 처음 컴파일 할 때 콘텐츠 프로젝트 폴더에 있지 않으면 .xnb 형식이 아닙니다. 컴퓨터의 어느 곳에서나 파일을 검색하여 콘텐츠 파이프 라인을로드하려는 경우 사용자가 프로그램을 시작하기 전에 노래를 콘텐츠 프로젝트 폴더에 넣는 것을 제외하고 무엇을 해야할지 잘 모릅니다. 그러나이 작업을 수행하는 데 더 나은 사용자 친화적 인 방법이 있는지 궁금합니다. 또한 실제 VS2012 솔루션이 아닌 .exe 만 출시되므로 앱을 출시 할 때 콘텐츠 프로젝트 폴더에 아무 것도 넣을 수 없습니다. 콘텐츠 프로젝트 폴더에 없어도 런타임에 파일을로드 할 수 있습니까? 사전에XNA 콘텐츠 파이프 라인 런타임에 .wav 파일로드

감사합니다!

답변

2

XNA 팻의 대답에있는 모든 codework이 (필요를 처리하지하는 방법에 내장 포함 아마 정확한 그래서 그것은 MSDN에서입니다!)

 System.IO.FileStream fs = new System.IO.FileStream(@"C:\Myfile.wav", System.IO.FileMode.Open); 
     SoundEffect mysound = SoundEffect.FromStream(fs); 
     fs.Dispose(); 

은 상대 경로 또는 절대 경로 일 수 있습니다.

+0

그게 전부입니다! 정말 고마워! – BalinKingOfMoria

0

(MSDN의 Streaming Data from a WAV File에 설명 된대로) 바이트 배열로 스트리밍 할 수 있습니다.

기본적으로 LoadContent() 함수에서 TitleContainer.OpenStream(@"soundfile.wav")을 사용하여 System.IO.Stream 개체를 만듭니다. 그런 다음 BinaryReadernew BinaryReader(wavStream)으로 표시합니다.

헤더 읽기 :

int chunkID = reader.ReadInt32(); 
int fileSize = reader.ReadInt32(); 
int riffType = reader.ReadInt32(); 
int fmtID = reader.ReadInt32(); 
int fmtSize = reader.ReadInt32(); 
int fmtCode = reader.ReadInt16(); 
int channels = reader.ReadInt16(); 
int sampleRate = reader.ReadInt32(); 
int fmtAvgBPS = reader.ReadInt32(); 
int fmtBlockAlign = reader.ReadInt16(); 
int bitDepth = reader.ReadInt16(); 

if (fmtSize == 18) 
{ 
    // Read any extra values 
    int fmtExtraSize = reader.ReadInt16(); 
    reader.ReadBytes(fmtExtraSize); 
} 

int dataID = reader.ReadInt32(); 
int dataSize = reader.ReadInt32(); 

실제 사운드 데이터 읽기 : 그런 다음

byteArray = reader.ReadBytes(dataSize); 

DynamicSoundEffect 객체를 설정하는 복잡한 코드의 전체 무리는

(위의 링크에서 설명)

그러면 dynamicSound.Play()dynamicSound.Stop()을 사용하여 사운드를 재생하고 멈출 수 있습니다!

면책 조항 : 나는 사운드를 재생이 방법을 테스트하지 않은,하지만이

+0

고마워요! 그러나 TitleContainer.OpenStream에는 상대 URI가 필요하지만 컴퓨터의 어느 곳에서나 노래를 재생할 수 있기를 원합니다. DynamicSoundEffect로 그게 가능하지 않다면, XNA가 정확히 어디에서 파일을 찾으나요? – BalinKingOfMoria

관련 문제