2017-10-02 9 views
1

ボタンを押している間、ほかのすべてのプログラムをミュートして、一定のトーン/サウンドを再生したい。ボタンを押している間に他のすべてのプログラムをミュートする

My.Recourcesの下にレコーディングとして音色が付いており、Beep_effectと呼ばれています。

ほとんどのコードは回答の1つで、まだ動作しません。

これは、これまで私が持っているコードです:

Imports CSCore 
Imports CSCore.Codecs 
Imports CSCore.CoreAudioAPI 
Imports CSCore.SoundOut 
Imports System.Runtime.InteropServices 

Module Module1 

    Private filename As Object = My.Resources.Beep_effect 
    Private _waveSource As IWaveSource 
    Private _soundOut As ISoundOut 
    Private device As MMDevice 

    Sub Main() 

     Using mmdeviceEnumerator = New MMDeviceEnumerator() 
      Using mmdeviceCollection = mmdeviceEnumerator.EnumAudioEndpoints(DataFlow.Render, DeviceState.Active) 
       device = mmdeviceCollection.First 
      End Using 
     End Using 

     _waveSource = CodecFactory.Instance.GetCodec(filename).ToSampleSource().ToMono().ToWaveSource() 
     _soundOut = New WasapiOut(False, AudioClientShareMode.Exclusive, 100) With {.device = device} 
     _soundOut.Initialize(_waveSource) 
     _soundOut.Play() 

    End Sub 

End Module 

Public Class Main 



    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr 
End Function 

    Const WM_APPCOMMAND As UInteger = &H319 
    Const APPCOMMAND_VOLUME_MUTE As UInteger = &H8 

    Private Sub Beep_MouseDown(sender As Object, e As EventArgs) Handles Beep.MouseDown 
     Call Module1.Main() 
     'My.Computer.Audio.Play(My.Resources.Beep_effect, AudioPlayMode.BackgroundLoop) 
    End Sub 

    Private Sub Beep_MouseUp(sender As Object, e As EventArgs) Handles Beep.MouseUp 
     'My.Computer.Audio.Stop() 
    End Sub 

    Private Sub Silence_MouseDown(sender As Object, e As EventArgs) Handles Silence.MouseDown 
     SendMessage(Handle, WM_APPCOMMAND, &H200EB0, APPCOMMAND_VOLUME_MUTE * &H10000) 
    End Sub 

    Private Sub Silence_MouseUp(sender As Object, e As EventArgs) Handles Silence.MouseUp 
    SendMessage(Handle, WM_APPCOMMAND, &H200EB0, APPCOMMAND_VOLUME_MUTE * &H10000) 
    End Sub 
End Class 

あなたが他の質問がある場合だけ頼みます!

+0

まあのみファイルを再生し、ypuは他人をミュートすることを試みているもの? – Codexer

+0

@コーデックァーあなたは何を意味するのか分かりませんか?他に何か? – T54

+0

私は、あなたが音楽ファイルを再生するコードを表示しているだけで、他のプログラムをミュートしていないことを意味しています***。あなたが達成したいことを試してみてください。失敗した場合は、特定の問題を解決してください。 – Codexer

答えて

3

使用CSCoreAudioClientShareMode.Exclusive

Imports CSCore 
Imports CSCore.Codecs 
Imports CSCore.CoreAudioAPI 
Imports CSCore.SoundOut 

Module Module1 

    Private filename As String = "your.mp3" 
    Private _waveSource As IWaveSource 
    Private _soundOut As ISoundOut 
    Private device As MMDevice 

    Sub Main() 

     Using mmdeviceEnumerator = New MMDeviceEnumerator() 
      Using mmdeviceCollection = mmdeviceEnumerator.EnumAudioEndpoints(DataFlow.Render, DeviceState.Active) 
       device = mmdeviceCollection.First 
      End Using 
     End Using 

     _waveSource = CodecFactory.Instance.GetCodec(filename).ToSampleSource().ToMono().ToWaveSource() 
     _soundOut = New WasapiOut(False, AudioClientShareMode.Exclusive, 100) With {.Device = device} 
     _soundOut.Initialize(_waveSource) 
     _soundOut.Play() 

    End Sub 

End Module 
+0

答えをありがとう。それは非常に完全かつ徹底的に見えます。私はその質問に提示したコードにどのように適合するかを理解するために苦労しています。説明していただけますか? – T54

+0

私は今まで持っていたすべてのコードを表示するために投稿を更新しましたが、動作しないようです。私はパッケージをインストールし、コードを挿入しましたが、それは他の提案を持っていません? – T54

+0

@ T54投稿にコードを追加してもよろしいですか? – codeDom

関連する問題