2013-05-27 4 views
2

select 결과로 지정된 시간 동안 특정 노래를 재생하는 응용 프로그램이 있습니다.C#에서 노래의 길이를 설정하는 방법

이미 노래를 재생할 수는 있지만 시간을 설정할 수는 없습니다.

public void PlaySound() 
    { 
     int i = 0; 

     foreach (string musicFile in musicFiles) 
     { 
      Thread thrStopMusic = new Thread(ThreadTimer); 
      player.SoundLocation = musicFile; 
      musicExecuteTime = GetMusicDuration[i]; 
      player.Play(); 
      thrStopMusic.Start(); 
      thrStopMusic.Abort(); 
      i++; 
     } 
    } 

public void ThreadTimer() 
    { 
     Thread.Sleep(musicExecuteTime * 1000); 
     StopSound(); 
    } 

메신저는 SoundPlayer 클래스를 사용합니다.

+0

시간을 설정할 수 없다는 것은 무엇을 의미합니까? 달성하고자하는 목표는 무엇입니까? –

+0

SoundROund PLAY()로 시작해야하고 몇 초 후에 STOP()으로 설정해야합니다. 나는 수면을 사용하여 스레드로 이것을 시도했다. 그러나 그것이 잘 작동했다고 생각하지 마십시오. – user1792343

+0

아래 답변을 확인하십시오. 기본적으로 당신은 아무것도하지 않는 새로운 스레드를 시작하고 당신이있는 "메인"쓰레드 대신이 쓰레드를 잠자 요. 메인 루프에서 Thread.Sleep (time * 1000)을 호출하십시오 :) –

답변

1

나는 이런 식으로 할 수 있다고 생각한다. Play()은 새 스레드를 사용하여 파일을 재생하므로 Stop()을 호출하기 전에 얼마 동안 스레드를 일시 중지해야합니다.

public void PlaySound() 
{ 
    int i = 0; 

    foreach (string musicFile in musicFiles) 
    { 
     player.SoundLocation = musicFile; 
     player.Play(); 
     Thread.Sleep(1000 * GetMusicDuration[i]) 
     player.Stop(); 
     i++; 
    } 
} 
+0

이 작동하지만 내 응용 프로그램이 비활성 상태입니다. 실시간 정보를 보여주는 대시 보드가 있습니다. Page_Load에서 재생 전화를하고 있는데 다른 곳에서해야합니까? – user1792343

+0

위와 같이 다른 스레드에서 playsound를 실행해야합니다. [여기] (http://ideone.com/FQkwoh)는 addapt/cleanup해야 할 예입니다. –

2

어쩌면 내가 의도를 정확하게 이해하지 못했지만 어쩌면 심지어 당신의 타이밍을 위해 스레드를 사용합니까? (역시 StopSound()은 적절한 호출 방법이 아닙니다)? 왜 안되는거야 :

... 
player.Play(); 
Thread.Sleep(musicExecuteTime * 1000); 
player.Stop(); 
... 
+0

나는 사용하고 있습니다. 왜냐하면 백그라운드에서 실시간으로 그래프를 실행하기 때문입니다. 이 코드를 사용하면 모든 시스템이 15 초 동안 멈추게됩니다. – user1792343

+1

'musicFiles' 파일이 연속적으로 재생되어야한다면,'PlaySound' 코드 전체를 스레드로 옮겨 주 스레드가 차단되지 않도록해야합니다. – Bruno