xAudio2를 사용하는 방법을 배우고 있습니다.Windows 8 xaudio2 멀티 터치 응용 프로그램에서 wav 파일 재생
public class SoundEffect
{
readonly XAudio2 _xaudio;
readonly WaveFormat _waveFormat;
readonly AudioBuffer _buffer;
readonly SoundStream _soundstream;
SourceVoice sourceVoice;
public SoundEffect(string soundFxPath)
{
_xaudio = new XAudio2();
var masteringsound = new MasteringVoice(_xaudio);
var nativefilestream = new NativeFileStream(
soundFxPath,
NativeFileMode.Open,
NativeFileAccess.Read,
NativeFileShare.Read);
_soundstream = new SoundStream(nativefilestream);
_waveFormat = _soundstream.Format;
_buffer = new AudioBuffer
{
Stream = _soundstream.ToDataStream(),
AudioBytes = (int)_soundstream.Length,
Flags = BufferFlags.EndOfStream
};
//sourceVoice = null;
}
public void Play()
{
sourceVoice = new SourceVoice(_xaudio, _waveFormat, true);
if (sourceVoice != null)
{
sourceVoice.FlushSourceBuffers();
sourceVoice.SubmitSourceBuffer(_buffer, _soundstream.DecodedPacketsInfo);
sourceVoice.Start();
}
}
public void Stop()
{
sourceVoice.Stop();
}
}
그리고 XAML :
<Border Background="Gray" MinHeight="150" MinWidth="150" Margin="10,10,0,0" x:Name="A" PointerPressed="btnAPointerPressed" PointerReleased="btnAPointerReleased" />
과 :
private SoundEffect shotEffect = new SoundEffect(@"sounds\mywav.wav");
private void btnAPointerPressed(object sender, PointerRoutedEventArgs e)
{
bool _hasCapture = ((Border)sender).CapturePointer(e.Pointer);
shotEffect.Play();
}
private void btnAPointerReleased(object sender, PointerRoutedEventArgs e)
{
((Border)sender).ReleasePointerCapture(e.Pointer);
shotEffect.Stop();
}
간단한 응용 프로그램 윈도우 8 비주얼 스튜디오 2012 익스프레스 윈도우 8 간단한 xAudio2 플레이어 클래스 제작
Windows 8 Simulator에서 테스트되었습니다. 손가락 하나만 누르면 모든 것이 정상입니다. 버튼을 클릭하면 손가락을 놓을 때 소리가납니다. 소리가 멈 춥니 다. 나는 두 손가락으로 클릭하고 두 손가락을 놓아 경우
는 소리가 계속 재생됩니다. 결과는 앨리어싱입니다.
라는 두 개의 이벤트 : btnAPointerPressed과 두 개의 이벤트 : btnAPointerReleased하지만 소리가 계속 재생됩니다. 마치 오디오 스트림이 멈추고 계속해서 재생됩니다. 마치 오디오 스트림이 멈추고 계속해서 재생됩니다. 문제를 이해하고 싶습니다. haudio2? 아니면 내가 제대로 한게 아니야?