WAC_Stop wirft Fehler


05.06.2019, 15:56:06 | ScriptEngine | Result for Event 16265
<br />
<b>Warning</b>:  Media Player Fehler (ERROR_HANDLE): Stopping failed in <b>C:\IPS\scripts\willkommen.ips.php</b> on line <b>271</b><br />

Betrifft diese Zeile:


WAC_Stop($SK2);

Die Frage die sich mir stellt, wann wird dieser Fehler geworfen?

Error Handle klingt so, als wenn das Gerät nicht mehr in Windows verfügbar war.

paresy

Das ist die OnBoard Soundkarte. Da gibt es nie Probleme.

Passiert das öfters? Kann es sonst sein dass Windows mal den Treiber aktualisiert hat?

paresy

Hallo Michael, ja passiert öfters.

Ich habe jetzt mal noch ein wenig gesucht und festgestellt, das die Konfiguration fehlerhaft ist, trotzdem aber eine Wiedergabe erfolgt. Ich habe die Soundkarte mal neu gesetzt und beobachte mal ob sich das ändert.

Die nicht gesetzten Soundkarten waren das Problem. Fehler ist bis jetzt nicht wieder aufgetreten :slight_smile:

Wie hast Du die Soundkarte „neu gesetzt“?

Ich habe ein ähnliches Problem. Jede Sprachausgabe wirft den Fehler „Warning: Wiedergabe ist nicht aktiv“. Auslöser ist der Befehl „WAC_Pause($id_sk1_musik);“. Ich nutze Deine „Komfortable TTS Ausgabe Funktion“, abgesehen von der Fehlermeldung funktioniert die Sprachausgabe.

Bislang habe ich das Problem dadurch behoben, dass ich ein MP3 über den Netplayer angespielt habe; danach kam bis zum nächsten PC-Neustart keine Fehlermeldung. Seit dem Update auf IPS 5.1 und einer Neuinstallation des Netplayer funktioniert der Trick allerdings nicht mehr.

Könnte das mit der Soundkarte zusammenhängen? Oder ist das eher ein Thema der „Komfortablen TTS Ausgabe Funktion“? Dann machen wir dort weiter…

Grüße
galleto

Ist in der Instanzkonfiguration der Soundkarte bei Dir ein Gerät eingetragen?
Wenn ja poste mir bitte mal einige Zeilen des Scriptes, inkl. der Fehlerzeile. Ich habe danach noch einige Versionen bei mir verbessert.

Danke für die schnelle Antwort.

Was meinst Du mit Instanz der Soundkarte? Die Instanz des Mediaplayers? Davon hab ich drei:

  • Media Player Musik
  • Media Player Sprache/Ton
  • Text To Speech
    Bei den ersten beiden ist „Realtek…“ als Gerät eingetragen, beim dritten auch, aber statt Gerät heißt es „Ausgang“.

Hier das Skript:

<?

	function tts_play($sk,$ansagetext,$ton,$modus)
 	{	  	 	
   	/*
		modus == 1 ==> Sprache = on / Ton = off / Musik = play / Slider = off / Script Wait = off
		modus == 2 ==> Sprache = on / Ton = on / Musik = pause / Slider = off / Script Wait = on
		modus == 3 ==> Sprache = on / Ton = on / Musik = play  / Slider = on  / Script Wait = on
		*/

		$wav = array
		(
      "hinweis"  => IPS_GetKernelDir()."media/wav/hinweis.wav",
      "meldung"  => IPS_GetKernelDir()."media/wav/meldung.wav",
      "abmelden" => IPS_GetKernelDir()."media/wav/abmelden.wav",
      "aus"      => IPS_GetKernelDir()."media/wav/aus.wav",
      "coin"     => IPS_GetKernelDir()."media/wav/coin-fall.wav",
      "thunder"  => IPS_GetKernelDir()."media/wav/thunder.wav",
      "telefon"  => IPS_GetKernelDir()."media/wav/telefon.wav",
      "clock"    => IPS_GetKernelDir()."media/wav/clock.wav",
      "bell"     => IPS_GetKernelDir()."media/wav/bell.wav",
      "horn"     => IPS_GetKernelDir()."media/wav/horn.wav",
      "sirene"   => IPS_GetKernelDir()."media/wav/sirene.wav"
		);

		$id_sk1_musik         = 12237 /*[2_Program\System\Mediaplpayer\Media Player Musik]*/;
		$id_sk1_musik_status	= 57706 /*[2_Program\System\Mediaplpayer\Media Player Musik\Status]*/;
		$id_sk1_musik_vol     = 22472 /*[2_Program\System\Mediaplpayer\Media Player Musik\Lautstärke]*/;
   	$id_sk1_ton_status 	  = 40262 /*[2_Program\System\Mediaplpayer\Media Player Sprache/Ton\Status]*/;
		$id_sk1_ton           = 22213 /*[2_Program\System\Mediaplpayer\Media Player Sprache/Ton]*/;
		$id_sk1_tts           = 33202 /*[2_Program\System\Mediaplpayer\Text To Speech]*/;
		$id_sk1_counter		    = 41625 /*[2_Program\System\Mediaplpayer\$id_sk1_counter]*/;

		switch ($sk)
		{
			//---------------------------------------------------------------------
			case '1': 

		  $status = GetValueInteger($id_sk1_ton_status);
		  while ($status == 1)	$status = GetValueInteger($id_sk1_ton_status);

      $sk1_counter = GetValueInteger($id_sk1_counter);
    	$sk1_counter++;
      SetValueInteger($id_sk1_counter, $sk1_counter);
			if($sk1_counter >= 9) SetValueInteger($id_sk1_counter, $sk1_counter = 0);

		 	if($ton == "zeit")
 			{
				$time = time();
				// die Integer-Wandlung dient dazu eine führende Null zu beseitigen
   			$hrs = (integer)date("H", $time);
   			$min = (integer)date("i", $time);
   			$sec = (integer)date("s", $time);
   			// "kosmetische Behandlung" für Ein- und Mehrzahl der Minutenangabe
   			if($hrs==1) $hrs = "ein";
   			$minuten = "Minuten";
   			if($min==1)
   			{
      			$min = "eine";
      			$minuten = "Minute";
   			}
   			// Zeitansage über Text-To-Speech
  	 		$ansagetext = "Die aktuelle Uhrzeit ist ". $hrs. " Uhr und ". $min. " ". $minuten;
  	 		$ton        = "";
		 	}

	   	//Lautstärke von Musik am Anfang speichern
			$merken = $musik_vol = GetValue($id_sk1_musik_vol);
      $musik_status 			 = GetValueInteger($id_sk1_musik_status);

			if($modus == 2)
			{
			   if($musik_status != 2)	WAC_Pause($id_sk1_musik);
			}


			if($modus == 3)
			{
				//Slider
  		 	for ($musik_vol; $musik_vol>=1; $musik_vol--)
   	  	{
      		WAC_SetVolume ($id_sk1_musik, $musik_vol);
          $slider = 3000; //Zeit des Sliders in ms
					if($merken>0) $warten = $slider/$merken; else $warten = 0;
					IPS_Sleep($warten);
     		}
     	}

			if($ton != "" and $modus != 1)
			{
  	   		WAC_Stop($id_sk1_ton);
      		WAC_SetRepeat($id_sk1_ton, false);
     			WAC_ClearPlaylist($id_sk1_ton);
     			WAC_AddFile($id_sk1_ton,$wav[$ton]);
     			WAC_Play($id_sk1_ton);
          //solange in Schleife bleiben wie 1 = play
   	  		sleep(1);
     		  $status = getvalue($id_sk1_ton_status);
  	   		while ($status == 1)	$status = getvalue($id_sk1_ton_status);
	    }

			if($ansagetext !="")
			{
  				WAC_Stop($id_sk1_ton);
	      	WAC_SetRepeat($id_sk1_ton, false);
          WAC_ClearPlaylist($id_sk1_ton);
          TTS_GenerateFile($id_sk1_tts, $ansagetext, IPS_GetKernelDir()."media/wav/sprache_sk1_" . $sk1_counter . ".wav",39);
		     	WAC_AddFile($id_sk1_ton, IPS_GetKernelDir()."media/wav/sprache_sk1_" . $sk1_counter . ".wav");
			  	WAC_Play($id_sk1_ton);
			}

			//Script solange anghalten wie Sprachausgabe läuft
			if($modus != 1)
			{
	   		sleep(1);
				$status = GetValueInteger($id_sk1_ton_status);
     		while ($status == 1)	$status = GetValueInteger($id_sk1_ton_status);
	    }

	 		if($modus == 3)
			{

		    $musik_vol = GetValueInteger($id_sk1_musik_vol);
   		  for ($musik_vol=1; $musik_vol<=$merken; $musik_vol++)
      	{
          WAC_SetVolume ($id_sk1_musik, $musik_vol);
          $slider = 3000; //Zeit des Sliders in ms
					if($merken>0) $warten = $slider/$merken; else $warten = 0;
					IPS_Sleep($warten);
      	}
      }
			if($modus == 2)
			{
		   	if($musik_status != 2)	WAC_Pause($id_sk1_musik);
		  }
			break;

			//---------------------------------------------------------------------
			
			//Hier können weitere Soundkarten eingefügt werden
			//case '2': 
			//entsprechende Werte bitte anpassen
		}			
 	}        

?>

Die Fehler werden durch Zeile 73 und 134 verursacht, also durch

if($musik_status != 2)	WAC_Pause($id_sk1_musik);

Grüße
galleto

Was meinst Du mit Instanz der Soundkarte? Die Instanz des Mediaplayers?

Ja. Und da scheint bei Dir alles o.k. zu sein. Da der Fehler trotzdem bei mir sporadisch wieder aufgetreten ist suche ich weiter. Eine Vermutung habe ich noch, da es bei Dir auch im Zusammenhang mit meiner Funktion augetreten ist könnte es am Zusammenspiel von mehren Mediaplayerinstanzen auf das selbe Device als Ursache liegen.

@Thomas: Passiert es bei dir öfters, dass das Gerät dann nicht korrekt ausgewählt ist? Das würde ja bedeuten, dass bei Windows sich die Kennung der Soundkarte ändert. Und da wäre natürlich die Frage warum dies passiert ist.

paresy

Ich denke nicht das dies öfters passiert, ich hatte vor kurzem einiges im PC umgebaut, ich denke das war evtl. auch die Ursache das die Mediaplayerinstanz die Soundkarte verloren hatte. Ich beobachte das mal weiter.