<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; JScript: Воспроизведение mp3 с помощью команд MCI]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=11490&amp;type=atom" />
	<updated>2016-04-11T16:37:45Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=11490</id>
		<entry>
			<title type="html"><![CDATA[JScript: Воспроизведение mp3 с помощью команд MCI]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=102507#p102507" />
			<content type="html"><![CDATA[<p><em>Без гарантий, используете на свой страх и риск.</em></p><p>Воспроизведение mp3 файла с помощью команд MCI. Чтобы проиграть mp3 файл, нужно перетащить его на значок скрипта. Текущая позиция воспроизведения устанавливается щелчком по индикатору прогресса в окне Internet Explorer.</p><p>Потребуется зарегистрированная библиотека <a href="http://forum.script-coding.com/viewtopic.php?id=8082">scrsvc.dll</a>(желательно использовать последнюю выкладку).</p><p>P.S.: <br />К сожалению, при открытии отдельных mp3 файлов, команда MCI &#039;open&#039; дает сбой, что видимо зависит от компрессора, которым сжимался тот или иной mp3.</p><p>ОС WinXP</p><p><strong>mp3play.js</strong><br /></p><div class="codebox"><pre><code>
 /* 

 Воспроизведение mp3 файла с помощью команд MCI. 
 JScript
 ОС WinXP

 */

 // Проверка аргументов
 //----------------------------------------------------------
 var sFileMp3Long;
 var lStrLen;
 var sFilePlay;

 var args = WScript.Arguments
 if (args.Length)
 { 
	sFileMp3Long = String(args.Item(0));
	lStrLen = sFileMp3Long.length;
	sFilePlay = sFileMp3Long.substring(sFileMp3Long.lastIndexOf(&#039;\\&#039;,lStrLen) + 1,lStrLen);

 }
 else
 {
	WScript.Echo(&#039;Отсутствует входной аргумент - mp3 файл для воспроизведения.&#039;);
	WScript.Quit();
 }

 // Создание объектов
 //----------------------------------------------------------
 var oScrSvc = new ActiveXObject(&#039;ScriptService.Service&#039;);
 var ieObj = WScript.CreateObject(&#039;InternetExplorer.Application&#039;,&#039;IE_&#039;);

 with (ieObj)
 {
 	Offline = true;
	Navigate(&#039;about:blank&#039;);
	while (Busy){WScript.Sleep(50);}
	StatusBar = false;
	ToolBar = false;
	MenuBar = false;
	Left = 0;
	Top = 0;
	Width = 420;
	Height = 50;
	Visible = true;
	while (Busy){WScript.Sleep(50);}
 }

 // Внедрение кода в документ
 //----------------------------------------------------------
 var oDoc = ieObj.Document;

 var s = new String(string_resource1);
 var r = /(function.+\s*{\s*)|(\/\*\s*)|(\s*\*\/)|(\s*})/igm;
 var sInnerCode = s.replace(r,&#039;&#039;);
 oDoc.write(sInnerCode);
 
 // Внедрение скрипта в документ
 //----------------------------------------------------------
 oDoc.myproperty = this;
 var oScr = oDoc.createElement(&#039;SCRIPT&#039;);
 oScr.text = &#039;function pulseinvoke(){document.myproperty.PulseTimer();}\n\rfunction document.onclick(){document.myproperty.SetPosition(event.offsetX);}&#039;
 oDoc.body.appendChild(oScr);
 var oPr = oDoc.getElementById(&#039;progress&#039;);
 
 //----------------------------------------------------------
 var sRetStr1 = AllocStr(32);
 var pRetStr1 = oScrSvc.struct_setval(sRetStr1);
 var lPos, lCur, lLength;

 // Отправка команд воспроизведения файла
 //----------------------------------------------------------
 mcisend(&#039;open&#039;+String.fromCharCode(32) + &#039;&quot;&#039; + sFileMp3Long + &#039;&quot;&#039; + String.fromCharCode(32)+&#039;type MPEGVideo alias mp3play&#039;,false);
 mcisend(&#039;setaudio mp3play volume to 1000&#039;, false);
 mcisend(&#039;set mp3play time format milliseconds&#039;, false);
 mcisend(&#039;set mp3play seek exactly on&#039;, false);
 lLength = Number(mcisend(&#039;status mp3play length&#039;, true));

 oDoc.parentWindow.setInterval(&#039;pulseinvoke()&#039;,100);
 oDoc.title = sFilePlay;

 initplay();
 
 // Цикл удержания
 //----------------------------------------------------------
 while (1)
 {
	WScript.Sleep(500);
 }

 //
 // Запуск воспроизведения
 //
 //----------------------------------------------------
 function initplay()
 {
 	mcisend(&#039;seek mp3play to 400&#039;, false);
	mcisend(&#039;play mp3play&#039;, false);
 } 

 //
 // Установка индикатора воспроизведения
 //
 //----------------------------------------------------------
 function PulseTimer()
 {
	try
	{
		lPos = Number(mcisend(&#039;status mp3play position&#039;, true));
		lCur = Math.round((lPos/lLength)*400);
		oPr.style.width = lCur;
	}
	catch(e){}

	// Перезапуск
	//--------------------------------------------------
	if (lCur==400)
	{
		WScript.Sleep(100);
		initplay();
	}

 }

 //
 // Установка позиции воспроизведения
 //
 //----------------------------------------------------------
 function SetPosition(lX)
 {
	oPr.style.width = Number(lX);
	mcisend(String(&#039;seek mp3play to &#039; + Math.round((lX/400)*lLength)), false);
	mcisend(&#039;play mp3play repeat&#039;, false);
 }

 //
 // Отправка команды MCI
 //
 //----------------------------------------------------------
 function mcisend(sCmd, bf)
 {

	
	//---------------------------------------------------
	if (bf)
	{
		sRetStr = sRetStr1;
		pRetStr = pRetStr1;
	}
	else
	{
		sRetStr	= &#039;&#039;;
		pRetStr = 0;
	}

	//---------------------------------------------------
	with (oScrSvc)
	{
		set_strarg(0, sCmd, true);
		set_vararg(1, pRetStr);
		set_vararg(2, Number(sRetStr.length));
		set_vararg(3, 0);
		lRes = api_call(&#039;WINMM.DLL&#039;,&#039;mciSendStringW&#039;,4, 1);	//1 - индекс повторного вызова(запоминание адреса функции)
	}

	//---------------------------------------------------
	if (lRes!=0)
	{
		WScript.Echo(&#039;Произошла ошибка.\n\rКоманда: &#039;+sCmd);
		ieObj.Quit();
		WScript.Sleep(100);
		
	}
	//---------------------------------------------------
	if (bf){return oScrSvc.pull_string(pRetStr, true);}

	return;
	
 }

 //
 // Выделение строки заданной длины
 //
 //----------------------------------------------------------
 function AllocStr(lStrLen)
 {
	var sStr = &#039;\0&#039;;
	for (i=0;i&lt;lStrLen-1;i++)
	sStr = sStr + &#039;\0&#039;;
	return sStr;
 }
 
 //
 // Завершение работы
 //
 //----------------------------------------------------------
 function IE_OnQuit()
 {
	mcisend(&#039;stop mp3play&#039;, false);
	mcisend(&#039;close mp3play&#039;, false);
	oScrSvc = null;
	ieObj = null;
	WScript.Quit();
 }

 // HTML код
 //----------------------------------------------------------
 function string_resource1()
 {/*
 &lt;HTML&gt;
 &lt;TITLE&gt;&amp;nbsp&lt;/TITLE&gt;
 &lt;HEAD&gt;
 &lt;META HTTP-EQUIV=Content-Type content=&#039;text/html;charset=windows-1251&#039;&gt;
 &lt;/HEAD&gt;
 &lt;BODY SCROLL=&quot;NO&quot;&gt;
	&lt;HR ID=&#039;progress&#039; style=&#039;position: absolute; left: 0px; top:0px; width: 400px; height:20px; background-color: #808000;&#039;&gt;
	&lt;HR ID=&#039;set&#039; style=&#039;position: absolute; left: 0px; top:30px; width: 400px; height:5px; background-color: #c0c0c0;&#039;&gt;
 &lt;/BODY&gt;
 &lt;/HTML&gt;
 */}

</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Poltergeyst]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=83</uri>
			</author>
			<updated>2016-04-11T16:37:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=102507#p102507</id>
		</entry>
</feed>
