0

Nous avons créé un système utilisant Vb.net 2015 Queuing et SQL Server 2012Lecture MediaPlayer le son avant de texte à la parole SAPI VB.Net

Nous voulons programmer pour jouer un ding dong le son premier (pour notifier à la file d'attente) puis le texte à lire pour lire le numéro et le compteur le servant. Cependant, la sortie devient le contraire. Il lit d'abord le texte au format texte [SAPI] avant de jouer le son ding dong. J'ai aussi remarqué que quand SAPI "lit" le texte, le temps se fige pendant qu'il le lit.

Voici mon code:

'play ding dong sound 
    Dim fileLoc As String = Application.StartupPath & "\" & "ding dong queue.mp3" '"Reminder.wav" ' 

    Me.AxWindowsMediaPlayer1.URL = fileLoc 

    If (Me.AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsPlaying) Then 

     'playStateLabel.Text = "Windows Media Player is playing!" 

    Else 
     Dim tempString As String = "" 

     For Each element As Char In lblTicketNoShow.Text 'seperate each number for tts ex. "1 0 0 1" 
      tempString = tempString & element & vbTab 
     Next 


     Dim tts = CreateObject("SAPI.spvoice") 
     tts.rate = -4 
     tts.volume = 100 
     tts.speak("NOW SERVING " & tempString & " on Counter " & lblCounterNo.Text) 


    End If 

Quel était le problème avec mon code. Est-ce que je manque quelque chose?

Répondre

0

En passant, je dirais que vous n'attendez pas que le son ding finisse de jouer.

Comme il est écrit, vous définissez l'URL de l'objet lecteur multimédia, puis immédiatement dire SAPI parler. Ceci est une condition de concurrence, et apparemment SAPI est un peu plus rapide hors du bloc, ce qui entraîne le comportement que vous voyez.

Vous avez besoin d'un gestionnaire d'événements PlayStateChange sur AxWindowsMediaPlayer1; Lorsque vous recevez un événement MediaEnded du gestionnaire PlayStateChange, vous pouvez indiquer à SAPI de lire l'événement suivant. (Vous aurez probablement besoin d'un gestionnaire d'événements SAPI dire quand done SAPI, aussi.)

0

Merci à Eric Brown Je mis à jour mon code:

j'ai ajouté un gestionnaire d'événements à mon AxWindowsPlayer1. Donc, ce système peut dire si le son dingdong est terminé avant de lire le texte en utilisant SAPI.

Public Sub player_PlayStateChange(ByVal sender As Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer1.PlayStateChange 

    ' Test the current state of the player, display a message for each state. 
    Select Case e.newState 

     Case 0 ' Undefined 
      'currentStateLabel.Text = "Undefined" 

     Case 1 ' Stopped 
      ' currentStateLabel.Text = "Stopped" 

     Case 2 ' Paused 
      ' currentStateLabel.Text = "Paused" 

     Case 3 ' Playing 
      ' currentStateLabel.Text = "Playing" 

     Case 4 ' ScanForward 
      ' currentStateLabel.Text = "ScanForward" 

     Case 5 ' ScanReverse 
      ' currentStateLabel.Text = "ScanReverse" 

     Case 6 ' Buffering 
      'currentStateLabel.Text = "Buffering" 

     Case 7 ' Waiting 
      ' currentStateLabel.Text = "Waiting" 

     Case 8 ' MediaEnded 
      'currentStateLabel.Text = "MediaEnded" 
      Dim tempString As String = "" 

      For Each element As Char In lblTicketNoShow.Text 'seperate each number for tts ex. "1 0 0 1" 
       tempString = tempString & element & vbTab 
      Next 


      Dim tts = CreateObject("SAPI.spvoice") 
      tts.rate = -4 
      tts.volume = 100 
      tts.speak("NOW SERVING " & tempString & " on Counter " & lblCounterNo.Text) 

      Dim controls As WMPLib.IWMPControls3 = Me.AxWindowsMediaPlayer2.Ctlcontrols 

      ' Check first to be sure the operation is valid. 
      If (controls.isAvailable("play")) Then 

       controls.play() 

      End If 

     Case 9 ' Transitioning 
      ' currentStateLabel.Text = "Transitioning" 

     Case 10 ' Ready 
      'currentStateLabel.Text = "Ready" 

     Case 11 ' Reconnecting 
      'currentStateLabel.Text = "Reconnecting" 

     Case 12 ' Last 
      'currentStateLabel.Text = "Last" 

     Case Else 
      'currentStateLabel.Text = ("Unknown State: " + e.newState.ToString()) 

    End Select 

End Sub