<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Ищу пример чтения bitrate из потока mp3 файла]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6448&amp;type=atom" />
	<updated>2011-11-19T18:20:57Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=6448</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ищу пример чтения bitrate из потока mp3 файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53693#p53693" />
			<content type="html"><![CDATA[<p>Ну на некоторые возможно. ) Но не на мой. Там в скрипте код по &quot;выдёргиванию&quot; ссылок для скачки. Но к моему вопросу это имеет малое отношение. )</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2011-11-19T18:20:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53693#p53693</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ищу пример чтения bitrate из потока mp3 файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53692#p53692" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Именно от этого варианта я и ушёл</p></blockquote></div><p>Я предполагал ответ, похожий на этот. ))) Возможно там, в скрипте, можно найти некоторые ответы на некоторые вопросы.</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2011-11-19T17:58:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53692#p53692</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ищу пример чтения bitrate из потока mp3 файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53690#p53690" />
			<content type="html"><![CDATA[<p><strong>2 Rumata:</strong></p><p><span class="bbu"><strong>Именно</strong></span> от этого варианта я и ушёл. И от VKSaver-а тоже. <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" /></p><p>В случае VKSaver это сомнительное (на мой взгляд) ПО, которое: <br />1) получает доступ к моей странице и мониторит по каким сайтам я перехожу.<br />2) Получает полный доступ к ресурсам моего компьютера. <br />3) Код приложения закрыт. Следовательно о том, что оно делает, мне остаётся только догадываться.<br />4) Вдобавок ещё и самостоятельно обновляется из интернета.</p><p>Для большинства - это &quot;Ыыы. полезная прога !!! КУЛ !!!&quot;. Для меня же это троянец чистой воды. ) Сегодня он может быть безобиден, а завтра.... [Не хочу обижать разработчиков. Может быть и правда они исполнены только благими намерениями помочь пользователям. Ну тогда могли бы и код своего приложения открыть. <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /> Раз скрывать нечего.]</p><p>На счёт скриптов типа &quot;greasemonkey&quot;. Меньший зловред, по ощущениям, но:<br />1) Не универсален. Я часто качаю музыку с телефона находясь в метро или машине. <br />2) Скрипт надо часто обновлять, т.к интерфейс и HTML содержимое страницы контакта меняется. И разработчик не всегда успевает это делать. В случае моего ресурса - API контакта более постоянны.</p><p>И общий пункт для скриптов и VKSaver-а: при скачке таким образом нельзя указать тип содержимого, которое хочешь получить с сервера. А у многих пользователей, которые пользуются моим ресурсом на работе (а качают они чаще всего от туда) заблокирована скачка mp3. Я же на своём ресурсе могу &quot;отдать&quot; им содержимое с любым ContentType и именем. )</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2011-11-19T17:44:33Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53690#p53690</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ищу пример чтения bitrate из потока mp3 файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53686#p53686" />
			<content type="html"><![CDATA[<p>Отчасти не в тему. Некоторое время назад я решил себе поставить greasemonkey/scriptish. Так под них существует юзер-скрипт (<a href="http://userscripts.org/scripts/show/16985">vkontakte music download</a>), который просматривает страницу и добавляет после каждого аудиотрека прямую ссылку на скачивание. Вдруг это может полезным.</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2011-11-19T15:54:29Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53686#p53686</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ищу пример чтения bitrate из потока mp3 файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53684#p53684" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>....получилось, но весьма медленновато</p></blockquote></div><p>Есть такое дело. Мне приходится работать с бесплатного хостинга (у которого канал довольно сильно ограничен) и вдобавок через бесплатный русский прокси сервер, т.к если работаю напрямую, то при авторизации получаю ошибку. На сколько я понял из-за анонимности запросов. Ну я думаю Вы представляете цепочку связи. ) Сначала запрос уходит &quot;за бугор&quot;, потом там происходит запрос к контакту через русский прокси и потом возвращается обратно. ) И так происходит не только авторизация, но и скачка файлов. Я сделал ASP страницу, которая прокачивает весь поток MP3 файла через себя. Другого способа не нашёл, т.к при скачке проверяется IP с которого авторизовася пользователь. Если они не совпадают, то сервер отвечает 404 Not Found.</p><div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Причём, скажем, для локального файла могу получить битрейт, для воспроизводимого с URL — нет.</p></blockquote></div><p>Подозреваю, что это последствия того, что я транслирую не все заголовки которыми отвечает сервер контакта при скачке mp3 файлов. ) Надо будет поизучать чем он отвечает. </p><p>Но все эти неудобства временные. Моей целью было добиться работы скриптов без использования сторонник компонентов. А там уже если сервис будет развиваться, то перейду на нормальный хостинг. )</p><div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Честно говоря, работать со сложной бинарной структурой с наличием необязательных полей на VBS/JS — ужас.</p></blockquote></div><p>Полностью согласен. Но всё же надеюсь справиться )</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2011-11-19T15:44:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53684#p53684</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ищу пример чтения bitrate из потока mp3 файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53682#p53682" />
			<content type="html"><![CDATA[<p><strong>Xameleon</strong>, письмо получил. Спасибо, идея и причины такой реализации понятны. Я разве что попробовал воспроизвести один из файлов непосредственно с URL посредством объекта «WMPlayer.OCX.7» — получилось, но весьма медленновато. Причём, скажем, для локального файла могу получить битрейт, для воспроизводимого с URL — нет.</p><p>OFF: Честно говоря, работать со сложной бинарной структурой с наличием необязательных полей на VBS/JS — ужас. Даже, когда формат подробно описан. У меня, в принципе, был единственный опыт — настройка параметров ярлыка, специфичных для консольного приложения (скажем прямо — ярлыка Far Manager&#039;а <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" />, хотя годится и для обычной консоли) — шрифт, начертание, размеры окна и буфера окна. Есть желание сделать там же человеческое задание палитры цветов для консоли, но всё откладываю.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-11-19T12:38:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53682#p53682</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ищу пример чтения bitrate из потока mp3 файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53628#p53628" />
			<content type="html"><![CDATA[<p>Запрашиваю с сервера кусок mp3 файла. ) Первые 100-200 байт. Ну смотря сколько потребуется. ) Для качалки музыки с vkontakte.ru. Хочу показывать в интерфейсе битрейт файла.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2011-11-17T20:02:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53628#p53628</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ищу пример чтения bitrate из потока mp3 файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53627#p53627" />
			<content type="html"><![CDATA[<p><strong>Xameleon</strong>, а откуда байтовый поток берётся?</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-11-17T19:47:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53627#p53627</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ищу пример чтения bitrate из потока mp3 файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53625#p53625" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Но перегнать его на VBS у меня пока что не получилось</p></blockquote></div><p>А-а-а. Так Вам нужна помощь по конвертации )))</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2011-11-17T17:43:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53625#p53625</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ищу пример чтения bitrate из потока mp3 файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53623#p53623" />
			<content type="html"><![CDATA[<p><a href="http://www.interclasse.com/scripts/class_mp3.php">вот</a> нашел класс, у меня битрейт вычисляет неверно, хотя теги считывает нормально.</p>]]></content>
			<author>
				<name><![CDATA[netrezv]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27040</uri>
			</author>
			<updated>2011-11-17T17:33:32Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53623#p53623</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ищу пример чтения bitrate из потока mp3 файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53622#p53622" />
			<content type="html"><![CDATA[<p><strong>2 abasov:</strong><br /></p><div class="quotebox"><cite>abasov пишет:</cite><blockquote><p>Пример на Shell.Application, из байтового потока пока не нашел.</p></blockquote></div><p>Именно поэтому я и написал <br /></p><div class="quotebox"><blockquote><p>Нашёл даже пару примеров по выдёргиванию ID3 тэгов через Shell.Application. Но как это надёргать из байтового потока пока нормальных примеров не нарыл.</p></blockquote></div><p>Такой код у меня уже имеется и он мне не подходит. )&nbsp; </p><p><strong>2 Rumata:</strong><br />Вот и я такого кода нашёл тоннами. ) Но перегнать его на VBS у меня пока что не получилось.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2011-11-17T17:05:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53622#p53622</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ищу пример чтения bitrate из потока mp3 файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53619#p53619" />
			<content type="html"><![CDATA[<p>Полагаю, что алгоритм достаточно прост:<br />1. проверить существование ID3 тегов<br />2. если есть тег, то его обойти и встать в начало первого фрейма<br />3. прочитать заголовок фрейма<br />4. разобрать фрейм<br />5. если необходимо, то перейти к следующему фрейму и снова п.3</p><p>Много полезной информации находится здесь<br /><a href="http://www.mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm">http://www.mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm</a><br /><a href="http://www.id3.org/id3v2.4.0-structure">http://www.id3.org/id3v2.4.0-structure</a></p><div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>примера как выдернуть bitrate из mp3 файла ? Желательно на VBS</p></blockquote></div><p>Коллега, я понимаю, что желательно на VBS, но мне хотелось и самому попробовать что-то накопать, не вдаваясь в подробности битовых операций в VBS. Поэтому я использовал Перл, так как у него есть очень простые и удобные (на мой взгляд) средства для работы с двоичными файлами и битовыми данными. Не обессудьте. </p><p>Я специально писал без использования библиотек, чтобы посмотреть самому. Уверен, что CPAN есть соответствующие пакеты. </p><div class="codebox"><pre><code>#!/usr/bin/perl -w

my $BUF;

my $filename = $ARGV[0];
open F, $filename or die &quot;Cannot open file $filename\n&quot;;
binmode F, &quot;:raw&quot;;

# Check ID3 at the begin of a file
read F, $BUF, 3;
if ( $BUF ne &quot;ID3&quot; ) {
    seek F, 0, 0;
} else {
    # Read the rst of the ID3
    read F, $BUF, 7;

    my ($id3_ver, $id3_rev, undef, $id3_size) = unpack(&quot;CCCN&quot;, $BUF);

    $id3_size = (($id3_size &amp; 0xff000000) &gt;&gt; 1) + ($id3_size &amp; 0x00ffffff);
    $id3_size = (($id3_size &amp; 0xffff0000) &gt;&gt; 1) + ($id3_size &amp; 0x0000ffff);
    $id3_size = (($id3_size &amp; 0xffffff00) &gt;&gt; 1) + ($id3_size &amp; 0x000000ff);

    printf &quot;ID3v2.%d.%d\nSize: %d (%04x)\n\n&quot;, 
        $id3_ver, $id3_rev, 
        $id3_size, $id3_size;

    seek F, $id3_size, 1;
}

# Read the first frame&#039;s header
read F, $BUF, 4;

close F;

my @MPEG  = (
    &quot;MPEG Version 2.5&quot;, 
    &quot;reserved&quot;, 
    &quot;MPEG Version 2&quot;, 
    &quot;MPEG Version 1&quot;
);
my @LAYER = (
    &quot;reserved&quot;, 
    &quot;Layer III&quot;, 
    &quot;Layer II&quot;, 
    &quot;Layer I&quot;
);
my %BRATE = (
    &quot;33&quot; =&gt; [&quot;free&quot;,  32,  64,  96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, &quot;bad&quot;], 
    &quot;32&quot; =&gt; [&quot;free&quot;,  32,  48,  56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, 384, &quot;bad&quot;], 
    &quot;31&quot; =&gt; [&quot;free&quot;,  32,  40,  48,  56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, &quot;bad&quot;], 
    &quot;23&quot; =&gt; [&quot;free&quot;,  32,  48,  56,  64,  80,  96, 112, 128, 144, 160, 176, 192, 224, 256, &quot;bad&quot;], 
    &quot;22&quot; =&gt; [&quot;free&quot;,   8,  16,  24,  32,  40,  48,  56,  64,  80,  96, 112, 128, 144, 160, &quot;bad&quot;], 
    &quot;21&quot; =&gt; [&quot;free&quot;,   8,  16,  24,  32,  40,  48,  56,  64,  80,  96, 112, 128, 144, 160, &quot;bad&quot;], 
);
my %SAMPLE = (
    &quot;3&quot; =&gt; [44100, 48000, 32000, &quot;reserv&quot;], 
    &quot;2&quot; =&gt; [22050, 24000, 16000, &quot;reserv&quot;], 
    &quot;0&quot; =&gt; [11025, 12000,  8000, &quot;reserv&quot;], 
);

my $mp3_header = unpack(&quot;N&quot;, $BUF);

my $mp3_mpeg   = ($mp3_header &amp; 0x00180000) &gt;&gt; 19;
my $mp3_layer  = ($mp3_header &amp; 0x00060000) &gt;&gt; 17;
my $mp3_brate  = ($mp3_header &amp; 0x0000f000) &gt;&gt; 12;
my $mp3_sample = ($mp3_header &amp; 0x00000c00) &gt;&gt; 10;
my $mp3_pad    = ($mp3_header &amp; 0x00000200) &gt;&gt; 9;

my $bitrate = %BRATE-&gt;{&quot;$mp3_mpeg$mp3_layer&quot;}-&gt;[$mp3_brate];
my $sample  = %SAMPLE-&gt;{&quot;$mp3_mpeg&quot;}-&gt;[$mp3_sample];

my $frame = int(
    $mp3_layer == 3 
    ? (12000 * $bitrate / $sample + $mp3_pad) * 4 
    : 144000 * $bitrate / $sample + $mp3_pad
);

printf &quot;%s\n%s\n\nBitrate : %s\nSample  : %s\nPadding : %s\nFrame   : %s\n&quot;, 
    $MPEG[$mp3_mpeg], 
    $LAYER[$mp3_layer], 
    $bitrate, 
    $sample, 
    $mp3_pad, $frame;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2011-11-17T15:51:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53619#p53619</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Ищу пример чтения bitrate из потока mp3 файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53606#p53606" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Доброго времени суток товарищи. ) Ни у кого не пробегало примера как выдернуть bitrate из mp3 файла</p></blockquote></div><p>Пример на Shell.Application, из байтового потока пока не нашел.</p><div class="codebox"><pre><code>strFolder = &quot;E:\&quot;
Set objShell = CreateObject(&quot;Shell.Application&quot;)
Set objFolder = objShell.NameSpace(strFolder)
Set colFiles = objFolder.Items

If Not objFolder Is Nothing Then
For Each objFile In colFiles
   strType = objFolder.GetDetailsOf(objFile, 2)
   If strType = &quot;MPEG Layer 3 Audio File&quot; Then
       WScript.Echo &quot;Name:&quot;, objFile.Name 
       WScript.Echo &quot;Bit Rate:&quot;, objFolder.GetDetailsOf(objFile, 23)
   End If
Next
End If</code></pre></div>]]></content>
			<author>
				<name><![CDATA[abasov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5104</uri>
			</author>
			<updated>2011-11-17T08:12:04Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53606#p53606</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS: Ищу пример чтения bitrate из потока mp3 файла]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=53581#p53581" />
			<content type="html"><![CDATA[<p>Доброго времени суток товарищи. ) Ни у кого не пробегало примера как выдернуть bitrate из mp3 файла ? Желательно на VBS. )</p><p>Почитал статьи<br /><a href="http://www.mpgedit.org/mpgedit/mpeg_format/MP3Format.html">http://www.mpgedit.org/mpgedit/mpeg_for … ormat.html</a><br /><a href="http://en.wikipedia.org/wiki/MP3">http://en.wikipedia.org/wiki/MP3</a></p><p>Нашёл даже пару примеров по выдёргиванию ID3 тэгов через Shell.Application. Но как это надёргать из байтового потока пока нормальных примеров не нарыл.</p><p>Буду благодарен ссылкам и примерам. Заранее спасибо. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2011-11-16T20:36:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=53581#p53581</id>
		</entry>
</feed>
