有没有办法在 VB.net 中演奏不是 console.bleep 的音符?

Is there a way to play notes in VB.net that isn't console.bleep?

我正在创建一个音程识别程序,我真的希望输出的声音稍微...比 console.bleep 输出的声音更好 - 最好是钢琴声或类似的声音。 这是我对 console.bleep 所做的,因此您可以了解我需要做什么:

Imports System.Threading
Class Form1
      Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            IntervalClass.PlayInterval(11, 5)
      End Sub
End Class
Class IntervalClass

      Protected Shared Sub Play(interval() As Note)
            Dim n As Note
            For Each n In interval
                  If n.NoteTone = Tone.REST Then
                        Thread.Sleep(CInt(n.NoteDuration))
                  Else
                        Console.Beep(CInt(n.NoteTone), CInt(n.NoteDuration))
                  End If
            Next n
      End Sub

      Public Shared Sub PlayInterval(ByRef StartingNote As Integer, ByRef EndingNote As Integer)
            Dim Notes() As String = {Tone.C3, Tone.Cs3, Tone.D3, Tone.Ds3, Tone.E3, Tone.F3, Tone.Fs3, Tone.G3, Tone.Gs3, Tone.A3, Tone.As3, Tone.B3, Tone.C4, Tone.Cs4, Tone.D4, Tone.Ds4, Tone.E4, Tone.F4, Tone.Fs4, Tone.G4, Tone.Gs4, Tone.A4, Tone.As4, Tone.B4, Tone.C5, Tone.Cs5, Tone.D5, Tone.Ds5, Tone.E5, Tone.F5, Tone.Fs5, Tone.G5, Tone.Gs5, Tone.A5, Tone.As5, Tone.B5, Tone.C6}
            Dim PlayInterval As Note() = {
            New Note(Notes(StartingNote), Duration.HALF), New Note(Notes(EndingNote), Duration.HALF)}
            Play(PlayInterval)
      End Sub

      Protected Enum Tone
            REST = 0
            C3 = 130.81
            Cs3 = 138.59
            D3 = 146.83
            Ds3 = 155.56
            E3 = 164.81
            F3 = 174.61
            Fs3 = 185
            G3 = 196
            Gs3 = 207.65
            A3 = 220
            As3 = 233.08
            B3 = 246.94
            C4 = 261.63
            Cs4 = 277.18
            D4 = 293.66
            Ds4 = 311.13
            E4 = 329.63
            F4 = 349.23
            Fs4 = 369.99
            G4 = 392
            Gs4 = 415.3
            A4 = 440
            As4 = 466.16
            B4 = 493.88
            C5 = 523.25
            Cs5 = 554.37
            D5 = 587.33
            Ds5 = 622.25
            E5 = 659.25
            F5 = 698.46
            Fs5 = 739.99
            G5 = 783.99
            Gs5 = 830.61
            A5 = 880
            As5 = 932.33
            B5 = 987.77
            C6 = 1046.5
      End Enum

      Protected Enum Duration
            WHOLE = 1600
            HALF = WHOLE / 2
            QUARTER = HALF / 2
            EIGHTH = QUARTER / 2
            SIXTEENTH = EIGHTH / 2
      End Enum
      Protected Structure Note
            Private toneVal As Tone
            Private durVal As Duration

            Public Sub New(frequency As Tone, time As Duration)
                  toneVal = frequency
                  durVal = time
            End Sub

            Public ReadOnly Property NoteTone() As Tone
                  Get
                        Return toneVal
                  End Get
            End Property

            Public ReadOnly Property NoteDuration() As Duration
                  Get
                        Return durVal
                  End Get
            End Property
      End Structure
End Class

有没有什么方法可以使声音更好听,无论是使用 console.bleep 还是其他方法? (最好我也可以将它们放在一个数组中,因为需要索引才能调用正确的音符) 谢谢

如果您想使用预加载的声音,那么您可以利用 SystemSound class:https://docs.microsoft.com/en-us/dotnet/api/system.media.systemsound

据我所知,您可以访问:

  1. Asterisk
  2. Beep
  3. Exclamation
  4. Hand
  5. Question

例如:

Dim sounds = {SystemSounds.Asterisk, SystemSounds.Beep, SystemSounds.Exclamation, SystemSounds.Hand, SystemSounds.Question}
sounds(0).Play() ' play asterisk sound

如果您想播放自定义文件,则可以利用 SoundPlayer class:https://docs.microsoft.com/en-us/dotnet/api/system.media.soundplayer

例如:

Dim sounds = {New SoundPlayer("file1.wav"), New SoundPlayer("file2.wav"), New SoundPlayer("file3.wav")}
sounds(0).Play() ' play file1.wav