public void PlayLineSound() { if (mstripTop.InvokeRequired) { SoundCallbackDelegate d = new SoundCallbackDelegate(PlayLineSound); this.Invoke(d); } else { _linePlayer.Play(); } }
public void PlayGameOverSound() { if (mstripTop.InvokeRequired) { SoundCallbackDelegate d = new SoundCallbackDelegate(PlayGameOverSound); this.Invoke(d); } else { _gameOverPlayer.Play(); } }
public void StopMusic() { if (mstripTop.InvokeRequired) { SoundCallbackDelegate d = new SoundCallbackDelegate(StopMusic); this.Invoke(d); } else { _musicPlayer.Stop(); } }
/// <summary> /// サウンド再生で用いると便利かも知れないヘルパメソッド /// /// 詳しいことは、この実装と、このメソッドの呼び出し元を見て。 /// </summary> /// <param name="no"></param> /// <param name="dg"></param> /// <returns></returns> public YanesdkResult SoundHelper(int no, SoundCallbackDelegate dg) { if (!EnableSound) { return(YanesdkResult.NoError); // そのまま帰ればok } Sound s = GetSound(no); if (s == null) { return(YanesdkResult.PreconditionError); // 存在しない } else { return(dg(s)); } }
public static extern void mame_set_sound_callback(SoundCallbackDelegate cb);
public void Start(DeviceInfo device) { if (waveHandle != IntPtr.Zero) { return; } var devByName = EnumerateDevices().FirstOrDefault(i => i.name == device.name); uint deviceIndex = ((uint?)devByName?.index) ?? WAVE_MAPPER; WAVEFORMATEX waveFormatEx = new WAVEFORMATEX(); waveFormatEx.wFormatTag = WAVE_FORMAT_PCM; waveFormatEx.nChannels = channels; waveFormatEx.nSamplesPerSec = sampleRate; waveFormatEx.wBitsPerSample = bitsPerSample; waveFormatEx.cbSize = 0; waveFormatEx.nBlockAlign = (ushort)(waveFormatEx.nChannels * waveFormatEx.wBitsPerSample / 8); waveFormatEx.nAvgBytesPerSec = waveFormatEx.nSamplesPerSec * waveFormatEx.nBlockAlign; if (mode == Mode.Record) { soundCallbackDelegate = SoundCallbackRecording; CheckError(waveInOpen(ref waveHandle, deviceIndex, ref waveFormatEx, soundCallbackDelegate, this, CALLBACK_FUNCTION)); } else if (mode == Mode.Play) { soundCallbackDelegate = SoundCallbackPlaying; CheckError(waveOutOpen(ref waveHandle, deviceIndex, ref waveFormatEx, soundCallbackDelegate, this, CALLBACK_FUNCTION)); } warmup = 2; for (int i = 0; i < 2; ++i) { unsafe { bufferIP[i] = Marshal.AllocHGlobal(32); // to prevent GC from deleting WAVEHDR *bufptr = (WAVEHDR *)bufferIP[i].ToPointer(); bufptr->lpData = Marshal.AllocHGlobal((int)bufferLengthBytes); bufptr->dwBufferLength = bufferLengthBytes; bufptr->dwFlags = 0; short[] data = new short[bufferLengthBytes / 2]; Marshal.Copy(data, 0, bufptr->lpData, (int)(bufferLengthBytes / 2)); if (mode == Mode.Record) { CheckError(waveInPrepareHeader(waveHandle, ref *bufptr, 32)); CheckError(waveInAddBuffer(waveHandle, ref *(WAVEHDR *)bufferIP[i].ToPointer(), 32)); } else if (mode == Mode.Play) { CheckError(waveOutPrepareHeader(waveHandle, ref *bufptr, 32)); CheckError(waveOutWrite(waveHandle, ref *(WAVEHDR *)bufferIP[i].ToPointer(), 32)); } } } if (mode == Mode.Record) { CheckError(waveInStart(waveHandle)); } }
private static extern uint waveOutOpen(ref IntPtr phwi, uint deviceID, ref WAVEFORMATEX wfx, SoundCallbackDelegate dwCallback, SoundWrapper dwInstance, uint dwFlags);