552 lines
42 KiB
HTML
552 lines
42 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//RU">
|
|
<!-- Copyright (c) 2001 Josh Coalson -->
|
|
<!-- Permission is granted to copy, distribute and/or modify this document -->
|
|
<!-- under the terms of the GNU Free Documentation License, Version 1.1 -->
|
|
<!-- or any later version published by the Free Software Foundation; -->
|
|
<!-- with no invariant sections. -->
|
|
<!-- A copy of the license can be found at http://www.gnu.org/copyleft/fdl.html -->
|
|
<HTML>
|
|
<HEAD>
|
|
<META CHARSET="windows-1251">
|
|
<TITLE>FLAC: äîêóìåíòàöèÿ</TITLE>
|
|
</HEAD>
|
|
|
|
<BODY>
|
|
<CENTER><TABLE cellpadding=0 cellspacing=0 border=0>
|
|
<TR>
|
|
<TD align=center>|</TD>
|
|
<TD height=22 align=center nowrap>
|
|
<A HREF="index.html">íà÷àëî</A> </TD>
|
|
<TD align=center>|</TD>
|
|
<TD align=center nowrap>
|
|
<A HREF="news.html">íîâîñòè</A> </TD>
|
|
<TD align=center>|</TD>
|
|
<TD align=center nowrap>
|
|
<A HREF="download.html">ôàéëû</A> </TD>
|
|
<TD align=center>|</TD>
|
|
<TD align=center nowrap>
|
|
<A HREF="features.html">õàðàêòåðèñòèêè</A> </TD>
|
|
<TD align=center>|</TD>
|
|
<TD align=center nowrap>
|
|
<A HREF="goals.html">öåëè</A> </TD>
|
|
<TD align=center>|</TD>
|
|
<TD align=center nowrap>
|
|
<A HREF="format.html">ôîðìàò</A> </TD>
|
|
<TD align=center>|</TD></TR>
|
|
|
|
<TR>
|
|
<TD align=center>|</TD>
|
|
<TD align=center nowrap>
|
|
<A HREF="id.html">id</A> </TD>
|
|
<TD align=center>|</TD>
|
|
<TD align=center nowrap>
|
|
<A HREF="comparison.html">ñðàâíåíèå</A> </TD>
|
|
<TD align=center>|</TD>
|
|
<TD align=center nowrap>
|
|
<A HREF="developers.html">ðàçðàáîòêà</A> </TD>
|
|
<TD align=center>|</TD>
|
|
<TD align=center nowrap>
|
|
äîêóìåíòàöèÿ </TD>
|
|
<TD align=center>|</TD>
|
|
<TD align=center nowrap>
|
|
<A HREF="links.html">ññûëêè</A> </TD>
|
|
<TD align=center>|</TD>
|
|
<TD align=center nowrap>
|
|
<A HREF="authors.html">àâòîðû</A> </TD>
|
|
<TD align=center>|</TD></TR>
|
|
</TR></TABLE></CENTER>
|
|
|
|
|
|
<CENTER><H2>FLAC: äîêóìåíòàöèÿ</H2></CENTER>
|
|
|
|
<H3>Äîêóìåíòàöèÿ</H3>
|
|
|
|
<P>Ýòà ñòðàíèöà ðàçáèòà íà ñëåäóþùèå ðàçäåëû:</P>
|
|
|
|
çäåñü íàõîäèòñÿ äîêóìåíòàöèÿ äëÿ óòèëèòû êîìàäíîé ñòðîêè <B><TT>flac</TT></B>, ðåäàêòîðà ìåòàäàííûõ <B><TT>metaflac</TT></B> è <A HREF="documentation.html#plugins">ïëàãèíîâ</A> äëÿ ïëååðîâ.</P>
|
|
|
|
|
|
<UL>
|
|
<LI><A HREF="#format">ôîðìàò</A> - îïèñàíèå ôîðìàòà FLAC äëÿ ïîëüçîâàòåëÿ (áîëåå äåòàëüíîå îïèñàíèå äëÿ ðàçðàáîò÷èêà ïðèâåäåíî íà <A HREF="format.html">ýòîé</A> ñòðàíèöå).</LI>
|
|
<LI><A HREF="#flac"><B><TT>flac</TT></B></A> - ècïîëüçîâàíèå êîäåêà <B><TT>flac</TT></B>, ðàáîòàþùåãî èç êîìàíäíîé ñòðîêè.</LI>
|
|
<LI><A HREF="#metaflac"><B><TT>metaflac</TT></B></A> - èñïîëüçîâàíèå ðåäàêòîðà ìåòàäàííûõ <B><TT>metaflac</TT></B>, ðàáîòàþùåãî èç êîìàíäíîé ñòðîêè.</LI>
|
|
<LI><A HREF="#plugins">ïëàãèíû</A> - äîêóìåíòàöèÿ äëÿ ðàçëè÷íûõ ïëàãèíîâ.</LI>
|
|
<LI><A HREF="#libflac">API äëÿ <B><TT>libFLAC</TT></B></A> - äëÿ ðàçðàáîò÷èêîâ, æåëàþùèõ èñïîëüçîâàòü ïîääåðæêó FLAC â ñâîèõ ïðîäóêòàõ.</LI>
|
|
<LI><A HREF="#bugs">îøèáêè</A> - èçâåñòíûå îøèáêè.</LI>
|
|
</UL>
|
|
|
|
<P>Ïîìíèòå, ÷òî îíëàéíîâàÿ âåðñèÿ ýòîãî äîêóìåíòà (íà àíãëèéñêîì ÿçûêå) âêëþ÷àåòñÿ â ïîñëåäíèé ðåëèç.</P>
|
|
|
|
<A NAME="format">
|
|
<H3>Ôîðìàò</H3>
|
|
|
|
<P>Îïöèè ïî óìîë÷àíèþ äëÿ <B><TT>flac</TT></B> íàñòðîåíû íà ïîëó÷åíèå îïòèìàëüíîãî ñîîòíîøåíèÿ ñêîðîñòü/óðîâåíü ñæàòèÿ äëÿ áîëüøèíñòâà òèïîâ âõîäíûõ ôàéëîâ. Çäåñü îïèñûâàåòñÿ êàê ìîæíî ïîïûòàòüñÿ óâåëè÷èòü óðîâåíü èëè ñêîðîñòü ñæàòèÿ èëè ñ íàèáîëüøèì ýôôåêòîì èñïîëüçîâàòü ñèñòåìó ìåòàäàííûõ.</P>
|
|
|
|
<P>Îñíîâíûìè ÷àñòÿìè ïîòîêà ÿâëÿþòñÿ:</P>
|
|
|
|
<P><BLOCKQUOTE><UL>
|
|
<LI>Ñòðîêà èç ÷åòûðåõ áàéòîâ "fLaC".</LI>
|
|
|
|
<LI>Áëîê ìåòàäàííûõ <A HREF="format.html#def_STREAMINFO">STREAMINFO</A>.</LI>
|
|
|
|
<LI>Äðóãèå íåîáÿçàòåëüíûå áëîêè ìåòàäàííûõ.</LI>
|
|
|
|
<LI>Îäèí èëè áîëåå àóäèî ôðåéìîâ.</LI>
|
|
</UL></BLOCKQUOTE></P>
|
|
|
|
<P>Ïåðâûå ÷åòûðå áàéòà èäåòèôèöèðóþò ïîòîê FLAC. Ñëåäóþùèå çà íèìè ìåòàäàííûå ñîäåðæàò èíôîðìàöèþ î ïîòîêå, çàòåì èäóò ñæàòûå àóäèîäàííûå.</P>
|
|
|
|
<A NAME="metaflac">
|
|
<H4>Ìåòàäàííûå</H4>
|
|
|
|
<P>FLAC îïðåäåëÿåò íåñêîëüêî òèïîâ áëîêîâ ìåòàäàííûõ (âñå îíè ïåðå÷èñëåíû íà ñòðàíèöå <A HREF="format.html">ôîðìàò</A>). Áëîêè ìåòàäàííûõ ìîãóò áûòü ëþáîãî ðàçìåðà, íîâûå áëîêè ìîãóò áûòü ëåãêî äîáàâëåíû. Äåêîäåð èìååò âîçìîæíîñòü ïðîïóñêàòü íåèçâåòíûå åìó áëîêè ìåòàäàííûõ. Îáÿçàòåëåí òîëüêî áëîê STREAMINFO.  íåì ñîäåðæèòñÿ ÷àñòîòà äèñêðåòèçàöèÿ, êîëè÷åñòâî êàíàëîâ è ò.ï., à òàêæå äàííûå ïîçâîëÿþùèå äåêîäåðó íàñòðîèòü áóôôåðû. Ñþäà òàêæå çàïèñûâàåòñÿ ïîäïèñü MD5 <I>íåñæàòûõ</I> àóäèîäàííûõ. Ýòî ïîëåçíî äëÿ ïðîâåðêè âñåãî ïîòîêà ïîñëå åãî ïåðåäà÷è.</P>
|
|
|
|
<P>Äðóãèå áëîêè ïðåäíàçíà÷åíû äëÿ ðåçåðâèðîâàíèÿ ìåñòà, õðàíåíèÿ òàáëèö òî÷åê ïîèñêà, à òàêæå äàííûõ äëÿ êîíêðåòíûõ ïðèëîæåíèé. Îïöèè äëÿ äîáàâëåíèÿ áëîêîâ PADDING èëè òî÷åê ïîèñêà ïðèâåäåíû íèæå. FLAC íå íóæäàåòñÿ â òî÷êàõ ïîèñêà, îäíàêî îíè ïîçâîëÿþò çíà÷èòåëüíî óâåëè÷èòü ñêîðîñòü äîñòóïà, à òàêæå ìîãóò áûòü èñïîëüçîâàíèÿ äëÿ ðàññòàíîâêè ìåòîê â àóäèî ðåäàêòîðàõ.</P>
|
|
|
|
<P>Åñëè Âàì íóæåí ñîáñòâåííûé áëîê ìåòàäàííûõ, Âû ìîæåòå îïðåäåëèòü åãî è çàïðîñèòü èäåíòèôèêàòîð <A HREF="id.html">çäåñü</A>. Âû ìîæåòå çàðåçåðâèðîâàòü áëîê PADDING íåîáõîäèìîãî ðàçìåðà è çàïèñàòü íà åãî ìåñòî ñâîè äàííûå ïîñëå êîäèðîâàíèÿ. Ïîëó÷åíííûé ïîòîê áóäåò îòâå÷àòü ôîðìàòó FLAC, äåêîäåðû ðàñïîçíàþùèå ýòè áëîêè ñìîãóò èõ èñïîëüçîâàòü, îñòàëüíûå áóäóò èõ ïðîïóñêàòü.</P>
|
|
|
|
|
|
<H4>Àóäèîäàííûå</H4>
|
|
|
|
<P>Çà ìåòàäàííûì ñëåäóþò ñæàòûå àóäèîäàííûå. Ìåòàäàííûå è àóäèîäàííûå íå ÷åðåäóþòñÿ. Êàê è áîëüøèíñòâî êîäåêîâ FLAC äåëèò âõîäíîé ïîòîê íà áëîêè è êîäèðóåò èõ íåçàâèñèìî äðóã îò äðóãà. Áëîê óïàêîâûâàòñÿ âî ôðåéì è äîáàâëÿåòñÿ ê ïîòîêó. Áàçîâûé åíêîäåð èñïîëüçóåò áëîêè ïîñòîÿííîãî ðàçìåðà äëÿ âñåãî ïîòîêà, îäíàêî ôîðìàò ïðåäóñìàòðèâàåò íàëè÷èå áëîêîâ ðàçíîé äëèíû â ïîòîêå.</P>
|
|
|
|
|
|
<H4>Ðàçáèåíèå íà áëîêè</H4>
|
|
|
|
<P>Ðàçìåð áëîêà - î÷åíü âàæíûé ïàðàìåòð äëÿ êîäèðîâàíèÿ. Åñëè îí î÷åíü ìàë, òî â ïîòîêå áóäåò ñëèøêîì çàãîëîâêîâ ôðåéìîâ, ÷òî óìåíüøèò óðîâåíü ñæàòèÿ. Åñëè ðàçìåð áîëüøîé, òî åíêîäåð íå ñìîæåò ïîäîáðàòü ýôôåêòèâíóþ ìîäåëü ñæàòèÿ. Ïîíèìàíèå ïðîöåññà ìîäåëèðîâàíèÿ ïîìîæåò Âàì óâåëè÷èòü óðîâåíü ñæàòèÿ äëÿ íåêîòîðûõ òèïîâ âõîäíûõ äàííûõ. Îáû÷íî ïðè èñïîëüçîâàíèè ëèíåéíîãî ïðîãíîçèðîâàíèÿ íà àóäèîäàííûõ ñ ÷àñòîòîé äèñêðåòèçàöèè 44.1 êÃö îïòèìàëüíûé ðàçìåð áëîêà ëåæèò â äèàïàçîíå 2-6 òûñÿ÷ ñýìïëîâ.  ýòîì ñëó÷àå çíà÷åíèå ïî óìîë÷àíèþ - 4608. Åñëè èñïîëüçîâàòü áûñòðûå ïîñòîÿííûå ïðåäèêòîðû, ïðåäïî÷òèòåëüíåå ìåíüøèå ðàçìåðû áëîêîâ, òàê êàê â ýòîì ñëó÷àå ðàçìåðû çàãîëîâêîâ ôðåéìîâ ìåíüøå.</P>
|
|
|
|
|
|
<H4>Ìåæêàíàëüíàÿ äåêîððåëÿöèÿ</H4>
|
|
|
|
<P>Åñëè íà âõîä ïîñòóïàþò ñòåðåî àóäèîäàííûå, îíè ìîãóò ïðîéòè ÷åðåç ñòàäèþ ìåæêàíàëüíîé äåêîððåëÿöèè. Ïðàâûé è ëåâûé êàíàë ïðåîáðàçóþòñÿ ê ñðåäíåìó è ðàçíîñòíîìó ïî ôîðìóëàì: <TT>ñðåäíèé = (ëåâûé + ïðàâûé)/2</TT>, <TT>ðàçíîñòíûé = ëåâûé - ïðàâûé</TT>.  îòëè÷èå îò joint stereo ýòîò ïðîöåññ íå ïðèâîäèò ê ïîòåðÿì. Äëÿ äàííûõ ñ àóäèî êîìïàêò-äèñêîâ ýòî îáû÷íî ïðèâîäèò ê çíà÷èòåëüíîìó óâåëè÷åíèþ óðîâíÿ ñæàòèÿ. Äëÿ âêëþ÷åíèÿ èñïîëüçîâàíèÿ ýòîãî ìåòîäà êîäèðîâàíèÿ <B><TT>flac</TT></B> èìååò äâå îïöèè: <TT>-m</TT> âñåãäà äåëàåò ðàçíîñòíóþ è íåçàâèñèìóþ âåðñèþ áëîêà è âûáèðàåò íàèìåíüøèé ôðåéì è <TT>-M</TT>, êîòîðàÿ àäàïòèâíî âûáèðàåò ñõåìó ñæàòèÿ.</P>
|
|
|
|
|
|
<H4>Ìîäåëèðîâàíèå</H4>
|
|
|
|
<P>Íà ñëåäóþùåì ýòàïå åíêîäåð ïûòàåòñÿ àïïðîêñèìèðîâàòü ñèãíàë òàêîé ôóíêöèåé, ÷òîáû ïîëó÷åííûé ïîñëå åå âû÷èòàíèÿ èç îðèãèíàëà ðåçóëüòàò (íàçûâàåìûé ðàçíîñòüþ, îñòàòêîì, îøèáêîé) ìîæíî áûëî çàêîäèðîâàòü ìèíèìàëüíûì êîëè÷åñòâîì áèòîâ. Ïàðàìåòðû ôóíêöèé òîæå äîëæíû çàïèñûâàòüñÿ, ïîýòîìó îíè íå äîëæíû çàíèìàòü ìíîãî ìåñòà. FLAC èñïîëüçóåò äâà ìåòîäà ôîðìèðîâàíèÿ àïïðîêñèìàöèé: 1) ïîäãîíêà ïðîñòîãî ïîëèíîìà ê ñèãíàëó è 2) îáùåå êîäèðîâàíèå ñ ëèíåéíûìè ïðåäèêòîðàìè (LPC).</P>
|
|
|
|
<P>Âî-ïåðâûõ, ïîñòîÿííîå ïîëèíîìèàëüíîå ïðåäñêàçàíèå (<TT>-l 0</TT>) ðàáîòàåò çíà÷èòåëüíî áûñòðåå, íî ìåíåå òî÷íî, ÷åì LPC. ×åì âûøå ïîðÿäîê LPC, òåì ìåäëåííåå, íî ëó÷øå áóäåò ìîäåëü. Îäíàêî ñ óâåëè÷åíèåì ïîðÿäêà âûèãðûø áóäåò âñå ìåíåå çíà÷èòåëüíûì.  íåêîòîðîé òî÷êå (îêîëî 9) ïðîöåäóðà åíêîäåðà, îïðåäåëÿþùàÿ íàèëó÷øèé ïîðÿäîê, íà÷èíàåò îøèáàòüñÿ è ðàçìåð ïîëó÷àåìûõ ôðåéìîâ âîçðàñòàåò. ×òîáû ïðåîäîëåòü ýòî, ìîæíî èñïîëüçîâàòü ïîëíûé ïåðåáîð (îïöèÿ <TT>-e</TT>), ÷òî ïðèâåäåò ê çíà÷èòåëüíîìó óâåëè÷åíèþ âðåìåíè êîäèðîâàíèÿ.</P>
|
|
|
|
<P>Âî-âòîðûõ, ïàðàìåòðû äëÿ ïîñòîÿííûõ ïðåäèêòîðîâ ìîãóò áûòü îïèñàíû òðåìÿ áèòàìè, à ïàðàìåòðû äëÿ ìîäåëè LPC çàâèñÿò îò êîëè÷åñòâà áèò íà ñýìïë è ïîðÿäêà LPC. Ýòî çíà÷èò, ÷òî ðàçìåð çàãîëîâêà ôðåéìà çàâèñèò îò âûáðàííîãî ìåòîäà è ïîðÿäêà è ìîæåò ïîâëèÿòü íà îïòèìàëüíûé ðàçìåð áëîêà.</P>
|
|
|
|
|
|
<H4>Îñòàòî÷íîå êîäèðîâàíèå</H4>
|
|
|
|
<P>Êîãäà ìîäåëü ïîäîáðàíà, åíêîäåð âû÷èòàåò ïðèáëèæåíèå èç îðèãèíàëà, ÷òîáû ïîëó÷èòü îñòàòî÷íûé (îøèáî÷íûé) ñèãíàë, êîòîðûé çàòåì êîäèðóåòñÿ áåç ïîòåðü. Äëÿ ýòîãî èñïîëüçóåòñÿ òî îáñòîÿòåëüñòâî, ÷òî ðàçíîñòíûé ñèãíàë îáû÷íî èìååò ðàñïðåäåëåíèå Ëàïëàñà è åñòü íàáîð ñïåöèàëüíûé êîäîâ Õàôôìàíà, íàçûâàåìûå êîäàìè Ðàéñà, ïîçâîëÿþùèå ýôôåêòèâíî è áûñòðî êîäèðîâàòü ýòè ñèãíàëû áåç èñïîëüçîâàíèÿ ñëîâàðÿ.</P>
|
|
|
|
<P>Êîäèðîâàíèå Ðàéñà ñîñòîèò èç íàõîæäåíèÿ îäíîãî ïàðàìåòðà, îòâå÷àþùåãî ðàñïðåäåëåíèþ ñèãíàëà, à çàòåì èñïîëüçîâàíèÿ åãî äëÿ ñîñòàâëåíèÿ êîäîâ. Ïðè èçìåíåíèè ðàñïðåäåëåíèÿ ìåíÿåòñÿ è îïòèìàëüíûé ïàðàìåòð, ïîýòîìó èìååòñÿ ìåòîä ïîçâîëÿþùèé ïåðåñ÷èòûâàòü åãî ïî íåîáõîäèìîñòè. Îñòàòîê ìîæåò áûòü ðàçáèò íà <I>êîíòåêñòû</I> èëè <I>ðàçäåëû</I>, ó êàæäîãî èç êîòîðûõ áóäåò ñâîé ïàðàìåòð Ðàéñà. <B><TT>flac</TT></B> ïîçâîëÿåò óêàçàòü, êàê íóæíî ïðîèçâîäèòü ðàçáèåíèå, ñ ïîìîùüþ îïöèè <TT>-r</TT>. Îñòàòîê ìîæåò áûòü ðàçáèò íà <I>2^n</I> ðàçäåëà, åñëè èñïîëüçîâàòü <TT>-r n,n</TT>. Ïàðàìåòð <I>n</I> íàçûâàåòñÿ ïîðÿäêîì ðàçäåëà. Òàêæå åíêîäåð ìîæåò èñêàòü â ïðåäåëàõ îò <I>m</I> äî <I>n</I> ïîðÿäêà, âûáèðàÿ ëó÷øèé âàðèàíò, åñëè óêàçàòü <TT>-r m,n</TT>. Îáû÷íî âûáîð <I>n</I> íå âëèÿåò íà ñêîðîñòü êîäèðîâàíèÿ. Îò ðàçíèöû ìåæäó <I>m</I> è <I>n</I> ñèëüíî çàâèñèò âðåìÿ ðàáîòû, ÷åì îíà áîëüøå, òåì áîëüøå âðåìåíè áóäåò çàòðà÷èâàòüñÿ íà ïîèñê ëó÷øåãî ïîðÿäêà. Âûáîð ðàçìåðà áëîêà òàêæå âëèÿåò íà îïòèìàëüíûé ïîðÿäîê ðàçäåëà.</P>
|
|
|
|
|
|
<H4>Ñîñòàâëåíèå ôðåéìîâ</H4>
|
|
|
|
<P>Àóäèîôðåéìó ïðåäøåñòâóåò çàãîëîâîê, êîòîðûé íà÷èíàåòñÿ ñ êîäà ñèíõðîíèçàöèè è ñîäåðæèò ìèíèìóì èíôîðìàöèè, íåîáõîäèìîé äåêîäåðó äëÿ âîñïðîèçâåäåíèÿ ïîòîêà. Ñþäà òàêæå çàïèñûâàåòñÿ íîìåð áëîêà èëè ñýìïëà è âîñüìèáèòíàÿ êîíòðîëüíàÿ ñóììà ñàìîãî çàãîëîâêà. Êîä ñèíõðîíèçàöèè, CRC çàãîëîâêà ôðåéìà è íîìåð áëîêà/ñýìïëà ïîçâîëÿþò îñóùåñòâëÿòü ïåðåñèíõðîíèçàöèþ è ïîèñê äàæå â îòñóòñòâèå òî÷åê ïîèñêà.  êîíöå ôðåéìà çàïèñûâàåòñÿ åãî øåñòíàäöàòèáèòíàÿ êîíòðîëüíàÿ ñóììà. Åñëè áàçîâûé äåêîäåð îáíàðóæèò îøèáêó, áóäåò ñãåíåðèðîâàí áëîê òèøèíû.</P>
|
|
|
|
|
|
<H4>Ðàçíîå</H4>
|
|
|
|
<P>×òîáû ïîääåðæèâàòü îñíîâíûå òèïû ìåòàäàííûõ, áàçîâûé äåêîäåð óìååò ïðîïóñêàòü òåãè ID3V1 è ID3V2, ïîýòîìó èõ ìîæíî ñâîáîäíî äîáàâëÿòü. Òåãè ID3V2 äîëæíû ðàñïîëàãàòüñÿ ïåðåä ìàðêåðîì "fLaC", à òåãè ID3V1 - â êîíöå ôàéëà.</P>
|
|
|
|
<P>Ó <B><TT>flac</TT></B> åñòü îïöèÿ (<TT>-V</TT>) äëÿ ïðîâåðêè âûõîäíûõ äàííûõ ïðè êîäèðîâàíèè.  ýòîì ñëó÷àå äåêîäåð ðàáîòàåò îäíîâðåìåííî ñ åíêîäåðîì è åãî âûõîä ñðàâíèâàåòñÿ ñ îðèãèíàëüíûì ââîäîì. Åñëè áóäåò íàéäåíî îòëè÷èå, <B><TT>flac</TT></B> çàêîí÷èò ðàáîòó ñ ñîîáùåíèåì îá îøèáêå.</P>
|
|
|
|
|
|
<A NAME="flac">
|
|
<H3><B><TT>flac</TT></B></H3>
|
|
|
|
<P><B><TT>flac</TT></B> - ýòî êîäåê, ðàáîòàþùèé èç êîìàíäíîé ñòðîêè. Âõîäîì äëÿ åíêîäåðà è âûõîäîì äëÿ äåêîäåðà äîëæåí áûòü ëèáî äàííûå â ôîðìàòå RIFF WAVE, ëèáî ïîòîê ñýìïëîâ áåç çàãîëîâêà. <B><TT>flac</TT></B> èñïîëüçóåò òîëüêî ëèíåéíûå PCM ñýìïëû (äðóãèìè ñëîâàìè, A-LAW, uLAW, è ò.ï. íå ïîääåðæèâàþòñÿ). Ñëåäóþùèì îãðàíè÷åíèåì ÿâëÿåòñÿ òî, ÷òî âî êîäèðóåìîì ôàéëå ñýìïëû äîëæíû áûòü 8, 16 èëè 24-áèòíûìè. Ýòî íå îãðàíè÷åíèå ôîðìàòà, ïðîñòî òàê ðàáîòàþò áàçîâûé åíêîäåð è äåêîäåð.</P>
|
|
|
|
<P><B><TT>flac</TT></B> ïðåäïîëàãàåò, ÷òî ôàéëû RIFF WAVE èìåþò ñóôôèêñ ".wav"; ýòî óìîë÷àíèå ìîæåò áûòü ïåðåîïðåäåëåíî ñïåöèàëüíûì êëþ÷îì. Äëÿ äàííûõ, ïîñòóïàþùèõ èç ïîòîêà, <B><TT>flac</TT></B> ïûòàåòñÿ îïðåäåëèòü òèï, ïðîñìàòðèâàÿ íà÷àëî ôàéëà â ïîèñêå çàãîëîâêà.  îñòàëüíûõ ñëó÷àÿõ <B><TT>flac</TT></B> íå äåëàåò ïðåäïîëîæåíèé î ñóôôèêñàõ, õîòÿ ïî ñîãëàøåíèþ ôàéëû FLAC èìåþò ñóôôèêñ ".flac" (èëè ".fla" íà ñòàðûõ ôàéëîâûõ ñèñòåìàõ òàêèõ êàê FAT-16).</P>
|
|
|
|
<P>Ïåðåä ïîëíûì îïèñàíèåì êëþ÷åé, èñïîëüçóåìûõ <B><TT>flac</TT></B>, îáðàòèì âíèìàíèå íà òî ÷òî: 1) ïî óìîë÷àíèþ <B><TT>flac</TT></B> ñæèìàåò ôàéëû (äëÿ äåêîäèðîâàíèÿ èñïîëüçóéòå êëþ÷ <TT>-d</TT>); 2) êëþ÷è <TT>-0..-9</TT>, óïðàâëÿþùèå óðîâíåì ñæàòèÿ, ÿâëÿþòñÿ ñèíîíèìàìè äëÿ ðàçëè÷íûõ ãðóïï íàñòðîåê êîäèðîâàíèÿ. Òîãî æå ýôôåêòà ìîæíî äîáèòüñÿ, èñïîëüçóÿ íàáîðû ñîîòâåòñòâóþùèõ êëþ÷åé; 3) ìîäåëü îáðàáîòêè âõîäíûõ è âûõîäíûõ ôàéëîâ ó <B><TT>flac</TT></B> àíàëîãè÷íà <B><TT>gzip</TT></B>.</P>
|
|
|
|
<P><B><TT>flac</TT></B> âûçûâàåòñÿ îäíèì èç ÷åòûðåõ ñïîñîáîâ:</P>
|
|
|
|
<BLOCKQUOTE><UL>
|
|
<LI>Êîäèðîâàíèå:<BR><TT>flac [-s] [--skip #] [<I><A HREF="#format_options"><íàñòðîéêè_ôîðìàòà></A></I>] [<I><A HREF="#encoding_options"><îïöèè_êîäèðîâàíèÿ></A></I>] [âõîäíîé_ôàéë [...]]</TT></LI>
|
|
|
|
<LI>Äåêîäèðîâàíèå:<BR><TT>flac -d [-s] [--skip #] [<I><A HREF="#format_options"><íàñòðîéêè_ôîðìàòà></A></I>] [<I><A HREF="#encoding_options"><îïöèè_êîäèðîâàíèÿ></A></I>] [âõîäíîé_ôàéë [...]]</TT></LI>
|
|
|
|
<LI>Òåñòèðîâàíèå:<BR><TT>flac -t [-s] [âõîäíîé_ôàéë [...]]</TT></LI>
|
|
|
|
<LI>Àíàëèç:<BR><TT>flac -a [-s] [--skip #] [<I><A HREF="#analysis_options"><îïöèè_àíàëèçà></A></I>] [âõîäíîé_ôàéë [...]]</TT></LI>
|
|
</UL></BLOCKQUOTE></P>
|
|
|
|
<P> ëþáîì ñëó÷àå, åñëè âõîäíîé ôàéë íå óêàçàí, ïîäðàçóìåâàåòñÿ ñòàíäàðòíûé ââîä. Åñëè óêàçàí òîëüêî îäèí âõîäíîé ôàéë, òî ýòî ìîæåò áûòü "-" äëÿ ñòàíäàðòíîãî ââîäà (stdin). Êîãäà èñïîëüçóåòñÿ ñòàíäàðòíûé ââîä, <B><TT>flac</TT></B> ïèøåò â ñòàíäàðòíûé âûâîä (stdout).  îñòàëüíûõ ñëó÷àÿõ <B><TT>flac</TT></B> âûïîëíèò óêàçàííûå äåéñòâèÿ äëÿ êàæäîãî âõîäíîãî ôàéëà è çàïèøåò ðåçóëüòàòû â ôàéëû ñ àíàëîãè÷íûìè èìåíàìè (ïðè êîäèðîâàíèè ñóôôèêñ áóäåò çàìåíåí íà ".flac" èëè, åñëè åãî íå áûëî, áóäåò äîáàâëåí; ïðè äåêîäèðîâàíèè ñóôôèêñû òàêæå èçìåíÿþòñÿ â ñîîòâåòñòâèè ñ òèïîì âûõîäíûõ äàííûõ.) Îðèãèíàë óäàëÿåòñÿ, òîëüêî åñëè óêàçàí êëþ÷ <TT>--delete-input-file</TT>.</P>
|
|
|
|
<P>Ñóùåñòâóþò îñîáûå ôîðìû âûçîâà ïðîöåäóð êîäèðîâàíèÿ/äåêîäèðîâàíèÿ èç ñòàíäàíäàðòíîãî ââîäà â ôàéë.</P>
|
|
|
|
<P><BLOCKQUOTE>
|
|
<UL>
|
|
<LI><TT>flac [îïöèè] - âûõîäíîé_ôàéë</TT></LI>
|
|
|
|
<LI><TT>flac -d [îïöèè] - âûõîäíîé_ôàéë</TT></LI>
|
|
</UL>
|
|
|
|
<P>êîòîðûå ëó÷øå ÷åì</P>
|
|
|
|
<UL>
|
|
<LI><TT>flac [îïöèè] > âûõîäíîé_ôàéë</TT></LI>
|
|
|
|
<LI><TT>flac -d [îïöèè] > âûõîäíîé_ôàéë</TT></LI>
|
|
</UL>
|
|
</BLOCKQUOTE></P>
|
|
|
|
<P>òàê êàê â ïåðâîì ñëó÷àå ñîõðàíÿåòñÿ âîçìîæíîñòü ïðîèçâåñòè ïðè íåîáõîäèìîñòè ïîñëåäóþùóþ îáðàáîòêó ôàéëà, íàïðèìåð äëÿ çàïèñè çàãîëîâêîâ <TT>RIFF WAVE</TT> èëè <TT>STREAMINFO</TT>.</P>
|
|
|
|
<P>Äàííûå â ñòàíäàðòíûé âûâîä ìîæíî ïåðåíàïðàâèòü ñ ïîìîùüþ êëþ÷à <TT>-c</TT>.</P>
|
|
|
|
<P>Îïöèè êîäèðîâàíèÿ âëèÿþò íà ñêîðîñòü ðàáîòû è óðîâåíü ñæàòèÿ. Íàñòðîéêè ôîðìàòà îïðåäåëÿþò ðàñïîëîæåíèå ñýìïëîâ, åñëè íà âõîä ïîñòóïàåò ôàéë áåç çàãîëîâêà. Åñëè ó ôàéëà åñòü çàãîëîâîê <TT>RIFF WAVE</TT>, òî íàñòîéêè ôîðìàòà íå íóæíû, òàê êàê îíè áåðóòñÿ èç ôàéëà.</P>
|
|
|
|
<P> ðåæèìå òåñòèðîâàíèÿ <B><TT>flac</TT></B> ðàáîòàåò êàê è ïðè äåêîäèðîâàíèè, òîëüêî âûõîäíîé ôàéë íå çàïèñûâàåòñÿ. Ðåæèìû äåêîäèðîâàíèÿ è òåñòèðîâàíèÿ ïðîâåðÿþò ïîòîê íà íàëè÷èå îøèáîê, à òàêæå ñðàâíèâàþò ïîäïèñü MD5 äåêîäèðîâàííîãî ïîòîêà ñ ñîõðàíåííîé ïîäïèñüþ, äàæå åñëè ôîðìàò ïîòîêà ïðàâèëüíûé.</P>
|
|
|
|
<H4><a name="general_options">Îñíîâíûå êëþ÷è</A></H4>
|
|
<TABLE border=1>
|
|
|
|
<TR><TD width=25%><TT>-d</TT></TD>
|
|
<TD width=75%>Äåêîäèðîâàíèå (ïî óìîë÷àíèþ <B><TT>flac</TT></B> êîäèðóåò). <B><TT>flac</TT></B> çàâåðøèò ðàáîòó ñ êîäîì âûõîäà <TT>1</TT>, åñëè áóäåò âñòðå÷åíà îøèáêà èëè êîíòðîëüíàÿ ñóììà MD5 äåêîäèðîâàííîãî ïîòîêà íå ñîâïàäåò ñ ñîõðàíåííîé. Åñëè îøèáîê íå áóäåò, êîä âîçâðàòà áóäåò ðàâåí <TT>0</TT>.</TD></TR>
|
|
|
|
<TR><TD><TT>-t</TT></TD>
|
|
<TD>Òåñòèðîâàíèå (òî æå ñàìîå, ÷òî è äåêîäèðîâàíèå, òîëüêî âûõîä íå çàïèñûâàåòñÿ â ôàéë). Êîäû âîçâðàòà òå æå.</TD></TR>
|
|
|
|
<TR><TD><TT>-a</TT></TD>
|
|
<TD>Àíàëèç (òî æå ñàìîå, ÷òî è äåêîäèðîâàíèå, òîëüêî âûõîäîì ÿâëÿåòñÿ ôàéë ñòàòèñòèêè). Êîäû âîçâðàòà òå æå. Ðåæèì ïðåäíàçíà÷åí â îñíîâíîì äëÿ ðàçðàáîò÷èêîâ.  âûõîäíîé òåêñòîâûé ôàéë çàïèñûâàåòñÿ èíôîðìàöèÿ î êàæäîì ôðåéìå è ïîäôðåéìå.</TD></TR>
|
|
|
|
<TR><TD><TT>-c</TT></TD>
|
|
<TD>Íàïðàâèòü ðåçóëüòàò â ñòàíäàðòíûé âûâîä (stdout).</TD></TR>
|
|
|
|
<TR><TD><TT>-s</TT></TD>
|
|
<TD>Íå ïîêàçûâàòü ñòàòèñòèêó ïðè êîäèðîâàíèè/äåêîäèðîâàíèè.</TD></TR>
|
|
|
|
<TR><TD><TT>-o ôàéë</TT></TD>
|
|
<TD>ßâíî óêàçàòü èìÿ âûõîäíîãî ôàéëà, ïî óìîë÷àíèþ <B><TT>flac</TT></B> ïðîñòî çàìåíÿåò ñóôôèêñ.</TD></TR>
|
|
|
|
<TR><TD><TT>--output-prefix ñòðîêà</TT></TD>
|
|
<TD>Äîáàâëÿåò ïðåôèêñ ê êàæäîìó èìåíè âûõîäíîìó ôàéëó. Ìîæåò èìñïîëüçîâàòüñÿ äëÿ êîäèðîâàíèÿ/äåêîäèðîâàíèÿ ôàéëîâ â äðóãîé êàòàëîã. Åñëè óêàçàííàÿ ñòðîêà ÿâëÿåòñÿ ÷àñòüþ ïóòè, óáåäèòåñü, ÷òî îíà çàêàí÷èâàåòñÿ ñëýøåì '/'.</TD></TR>
|
|
|
|
<TR><TD><TT>--delete-input-file</TT></TD>
|
|
<TD>Ïîñëå óñïåøíîãî îêîí÷àíèÿ êîäèðîâàíèÿ/äåêîäèðîâàíèÿ âõîäíîé ôàéë áóäåò óäàëåí. Åñëè ïðîèçîéäåò îøèáêà, èñõîäíûé ôàéë îñòàíåòñÿ.</TD></TR>
|
|
|
|
<TR><TD><TT>--skip #</TT></TD>
|
|
<TD>Ïðîïóñòèòü ïåðâûå <TT>#</TT> ñýìïëîâ âõîäíîãî ôàéëà. Ðàáîòàåò äëÿ êîäèðîâàíèÿ è äåêîäèðîâàíèÿ, íî íå äëÿ òåñòèðîâàíèÿ.</TD></TR>
|
|
</TABLE>
|
|
|
|
|
|
<H4><a name="analysis_options">Îïöèè àíàëèçà</H4>
|
|
<TABLE border=1>
|
|
|
|
<TR><TD width=15%><TT>--a-rtext</TT></TD>
|
|
<TD width=85%>Äîáàâëÿåò â ôàéë îñòàòî÷íûé ñèãíàë. Ðåçóëüòèðóþùèé ôàéë ïîëó÷àåòñÿ <B>î÷åíü áîëüøèì</B>.</TD></TR>
|
|
|
|
<TR><TD width=10%><TT>--a-rgp</TT></TD>
|
|
<TD width=90%>Ñîçäàåò ôàéëû-äèàãðàììû äëÿ êàæäîãî ïîäôðåéìà.  êàæäîì ôàéëå áóäåò îñòàòî÷íîå ðàñïðåäåëåíèå äëÿ ïîäôðåéìà. Áóäåò ñîçäàíî <B>î÷åíü ìíîãî</B> ôàéëîâ.</TD></TR>
|
|
</TABLE>
|
|
|
|
|
|
<H4><a name="encoding_options">Îïöèè êîäèðîâàíèÿ</A></H4>
|
|
<TABLE border=1>
|
|
|
|
<TR><TD width=15%><TT>--lax</TT></TD>
|
|
<TD width=85%>Ïîçâîëÿåò åíêîäåðó ñîçäàâàòü ôàéëû, îòâå÷àþùèå ïîäìíîæåñòâó ôîðìàòà FLAC.  ðåçóëüòàòå ðàáîòû áóäåò ïîëó÷àòüñÿ íåïîòîêîâûé ôàéë, ïîýòîìó ýòîò êëþ÷ ñëåäóåò èñïîëüçîâàòü òîëüêî äëÿ àðõèâèðîâàíèÿ. Äåêîäåð áóäåò ïîääåðæèâàòü âîñïðîèçâåäåíèå è ïîèñê â òàêèõ ôàéëàõ.</TD></TR>
|
|
|
|
<TR><TD><TT>--sector-align</TT></TD>
|
|
<TD>
|
|
<P>Ïðè êîäèðîâàíèè íåñêîëüêèõ WAVE ôàéëîâ ôîðìàòà CD-Audio âûðàâíèâàòü èõ íà ãðàíèöó ñåêòîðà. Ýòà îïöèÿ ïðèìåíèìà òîëüêî äëÿ êîäèðîâàíèÿ íåñêîëüêèõ WAVE ôàéëîâ, êàæäûé èç êîòîðûõ äîëæåí èìåòü ÷àñòîòó äèñêðåòèçàöèè 44.1 êÃö è äâà êàíàëà. Åñëè áóäåò óêàçàíà ýòà îïöèÿ åíêîäåð âûðîâíÿåò ïîòîêè .flac òàê,
|
|
÷òî èõ äëèíû áóäóò êðàòíû ðàçìåðó ñåêòîðà CD-Audio (ðàâíû 1/75 ñåêóíäàì èëè 588 ñýìïëàì). Ýòî îñóùåñòâëÿåòñÿ ïåðåíîñîì ÷àñòè ñåêòîðà â êîíöå êàæäîãî WAVE ôàéëà â íà÷àëî ñëåäóþùåãî. Ïîñëåäíèé ïîòîê áóäåò äîïîëíåí äî ãðàíèöû âûðàâíèâàíèÿ íóëÿìè.</P>
|
|
<P>Èñïîëüçîâàíèå ýòîé îïöèè íå ïðèâåäåò íè ê ÷åìó, åñëè ôàéëû óæå âûðîâíåíû (íàïðèìåð, åñëè ïðàâèëüíî ñêîïèðîâàíû ñ àóäèî-CD). <TT><B>flac</B></TT> ìîæåò âûðîâíÿòü òîëüêî íåñêîëüêî ôàéëîâ çà îäèí âûçîâ.</P>
|
|
|
|
<P><B>ÂÍÈÌÀÍÈÅ</B>: Ïîðÿäîê ôàéëîâ èìååò çíà÷åíèå! Åñëè âû ñäåëàåòå ñëåäóþùèé âûçîâ '<TT>flac --sector-align *.wav</TT>', êîìàíäíûé ïðîöåññîð ìîæåò îáðàáîòàòü øàáëîí íå â òîì ïîðÿäêå, â êàêîì âû ðàññ÷èòûâàåòå. Ïîýòîìó ëó÷øå âñåãî âûçûâàòü ïðîãðàììó, ÿâíî óêàçàâ ñïèñîê ôàéëîâ, íàïðèìåð, '<TT>flac --sector-align 8.wav 9.wav 10.wav</TT>'.
|
|
</TD></TR>
|
|
|
|
<TR><TD><TT>-S {#|X|#x}</TT></TD>
|
|
<TD width=90%>Äîáàâëÿåò òî÷êè äëÿ ïîèñêà â òàáëèöó <TT>SEEKTABLE</TT>.
|
|
|
|
<UL>
|
|
<LI><TT># </TT> : ñîçäàåòñÿ òî÷êà ïîèñêà äëÿ ñýìïëà ñ îïðåäåëåííûì íîìåðîì.</LI>
|
|
|
|
<LI><TT>X </TT> : ðåçåðâèðóåìûå òî÷êè (âñåãäà ïîìåùàþòñÿ â êîíöå <TT>SEEKTABLE</TT>).</LI>
|
|
|
|
<LI><TT>#x</TT> : # ðàâíîìåðíî ðàñïðåäåëåííûõ òî÷åê ïîèñêà, ïåðâàÿ ñîîòâåòñòâóåò 0 ñýìïëó.</LI>
|
|
</UL>
|
|
|
|
<P>Îïöèþ <TT>-S</TT> ìîæíî èñïîëüçîâàòü íåñêîëüêî ðàç.  ðåçóëüòàòå ïîëó÷èòñÿ îáúåäèíåííàÿ òàáëèöà, â êîòîðîé áóäóò ïðèñóòñòâîâàòü òîëüêî óíèêàëüíûå çíà÷åíèÿ.<BR>
|
|
Ïî óìîë÷àíèþ <B><TT>flac</TT></B> èñïîëüçóåò <TT>-S 100x</TT>. Åñëè òàáëèöà ïîèñêà íå íóæíà, óêàæèòå <TT>-S-</TT>.<BR>
|
|
<B>ÏÐÈÌÅ×ÀÍÈÅ</B>: <TT>-S #x</TT> íå áóäåò ðàáîòàòü, åñëè åíêîäåð íå ñìîæåò îïðåäåëèòü ðàçìåð âõîäíîãî ôàéëà â íà÷àëå ðàáîòû.<BR>
|
|
<B>ÏÐÈÌÅ×ÀÍÈÅ</B>: åñëè <I>#</I> áîëüøå èëè ðàâåí êîëè÷åñòâó ñýìïëîâ âî âõîäíîì ôàéëå, òî òî÷êè äîáàâëåíû íå áóäóò, åñëè ðàçìåð ìîæíî îïðåäåëèòü äî êîäèðîâàíèÿ, â ïðîòèâíîì ñëó÷àå áóäóò çàïèñàíû ðåçåðâèðóåìûå òî÷êè.</P>
|
|
</TD></TR>
|
|
|
|
<TR><TD><TT>-P #</TT></TD>
|
|
<TD>Eíêîäåð çàïèøåò áëîê ìåòàäàííûõ <TT>PADDING</TT>, óêàçàííîãî ðàçìåðà (â áàéòàõ), ïîñëå áëîêà <TT>STREAMINFO</TT>. <TT>-P 0</TT> óêàçûâàåò, ÷òî áëîê <TT>PADDING</TT> íå íóæåí (çíà÷åíèå ïî óìîë÷àíèþ). Ýòîò áëîê ïîëåçåí, åñëè âû ñîáèðàåòåñü äîáàâèòü òýã â ôàéë ïîçæå. Âìåñòî òîãî, ÷òîáû ïåðåïèñûâàòü ôàéë ïîëíîñòüþ, ìîæíî áóäåò çàïèñàòü èíôîðìàöèþ âìåñòî áëîêà <TT>PADDING</TT>.</TD></TR>
|
|
|
|
<TR><TD><TT>-b #</TT></TD>
|
|
<TD>Óñòàíàâëèâàåò ðàçìåð áëîêà â ñýìïëàõ. Ïî óìîë÷àíèþ <TT>1152</TT> äëÿ <TT>-l 0</TT>, èíà÷å <TT>4608</TT>. Ñòàíäàðòíûå ïîòîêè äîëæíû èñïîëüçîâàòü îäíî èç óêàçàíûõ çíà÷åíèé: <TT>192/576/1152/2304/4608/256/512/1024/2048/4096/8192/16384/32768</TT>. Ñåé÷àñ åíêîäåð èñïîëüçóåò ïîñòîÿííûé ðàçìåð áëîêà äëÿ âñåãî ôàéëà.</TD></TR>
|
|
|
|
<TR><TD><TT>-m</TT></TD>
|
|
<TD>Âêëþ÷àåò ðàçíîñòíîå êîäèðîâàíèå (òîëüêî äëÿ ñòåðåî ïîòîêîâ). Îáû÷íî óâåëè÷èâàåò óðîâåíü ñæàòèÿ íà íåñêîëüêî ïðîöåíòîâ. Äëÿ êàæäîãî áëîêà ñîçäàåòñÿ óñðåäíåííàÿ è ñòåðåî âåðñèÿ áëîêà, ñîõðàíÿåòñÿ áëîê ìåíüøåãî ðàçìåðà. Ñåé÷àñ ðàçíîñòíîå êîäèðîâàíèå äîñòóïíî äëÿ ôàéëîâ, ãäå ñýìïë èìååò ðàçìåð íå áîëüøå 16 áèò.</TD></TR>
|
|
|
|
<TR><TD><TT>-M</TT></TD>
|
|
<TD>Âêëþ÷àåò ñâîáîäíîå ðàçíîñòíîå êîäèðîâàíèå (òîëüêî äëÿ ñòåðåî ïîòîêîâ). Ðàáîòàåò àíàëîãè÷íî <TT>-m</TT>, îäíàêî åíêîäåð ïåðåêëþ÷àåòñÿ ìåæäó íåçàâèñèìûì è óñðåäíÿþùèì êîäèðîâàíèåì àäàïòèâíî. Ìåòîä ðàáîòàåò áûñòðåå, íî óðîâåíü ñæàòèÿ ìåíüøå, òàê êàê <TT>-m</TT> ïðîèçâîäèò ïîëíûé ïåðåáîð âàðèàíòîâ.</TD></TR>
|
|
|
|
<TR><TD><TT>-0..-9</TT></TD>
|
|
<TD>Áûñòðåéøåå ñæàòèå ... ìàêñèìàëüíîå ñæàòèå. Ïî óìîë÷àíèþ <TT>-5</TT>.</TD></TR>
|
|
|
|
<TR><TD><TT>-0</TT></TD>
|
|
<TD>Àíàëîãè÷íî <TT>-l 0 -b 1152 -r 2,2</TT>.</TD></TR>
|
|
|
|
<TR><TD><TT>-1</TT></TD>
|
|
<TD>Àíàëîãè÷íî <TT>-l 0 -b 1152 -r 2,2 -M</TT>.</TD></TR>
|
|
|
|
<TR><TD><TT>-2</TT></TD>
|
|
<TD>Àíàëîãè÷íî <TT>-l 0 -b 1152 -r 3 -m</TT>.</TD></TR>
|
|
|
|
<TR><TD><TT>-3</TT></TD>
|
|
<TD>Àíàëîãè÷íî <TT>-l 6 -b 4608 -r 3,3</TD></TR>
|
|
|
|
<TR><TD><TT>-4</TT></TD>
|
|
<TD>Àíàëîãè÷íî <TT>-l 8 -b 4608 -r 3,3 -M</TT>.</TD></TR>
|
|
|
|
<TR><TD><TT>-5</TT></TD>
|
|
<TD>Àíàëîãè÷íî <TT>-l 8 -b 4608 -r 3,3 -m</TT>.</TD></TR>
|
|
|
|
<TR><TD><TT>-6</TT></TD>
|
|
<TD>Àíàëîãè÷íî <TT>-l 8 -b 4608 -r 4 -m</TT>.</TD></TR>
|
|
|
|
<TR><TD><TT>-7</TT></TD>
|
|
<TD>Àíàëîãè÷íî <TT>-l 8 -b 4608 -r 6 -m -e</TT>.</TD></TR>
|
|
|
|
<TR><TD><TT>-8</TT></TD>
|
|
<TD>Àíàëîãè÷íî <TT>-l 12 -b 4608 -r 6 -m -e</TT>.</TD></TR>
|
|
|
|
<TR><TD><TT>-9</TT></TD>
|
|
<TD>Àíàëîãè÷íî <TT>-l 32 -b 4608 -r 16 -m -e -p</TT>. Ðàáîòàåò î÷åíü ìåäëåííî, íî äîñòèãàåòñÿ ìàêñèìàëüíûé óðîâåíü ñæàòèÿ äëÿ äàííîãî ðàçìåðà áëîêà.</TD></TR>
|
|
|
|
<TR><TD><TT>-e</TT></TD>
|
|
<TD>Ïîëíûé ïîèñê ìîäåëè (ðàáîòàåò ìåäëåííî!). Îáû÷íî åíêîäåð îïðåäåëÿåò ëó÷øóþ ìîäåëü è êîäèðóåò äàëåå îïèðàÿñü íà íåå.  äàííîì ðåæèìå åíêîäåð áóäåò ñîçäàâàòü ïîäôðåéìû âñåõ ïîðÿäêîâ è èñïîëüçîâàòü íàèìåíüøèé. Åñëè ìàêñèìàëüíîå çíà÷åíèå ïîðÿäêà LPC âåëèêî, âðåìÿ êîäèðîâàíèÿ ñóùåñòâåííî âîçðàñòåò. Âûèãðûø îáû÷íî ñîñòàâëÿåò îêîëî 0.5%.</TD></TR>
|
|
|
|
<TR><TD><TT>-l #</TT></TD>
|
|
<TD>Îïðåäåëÿåò ìàêñèìàëüíûé ïîðÿäîê LPC (êîýôôèöèåíòîâ ëèíåéíîãî ïðîãíîçèðîâàíèÿ). ×èñëî äîëæíî áûòü ìåíüøå èëè ðàâíî <TT>32</TT>. Åñëè çíà÷åíèå ðàâíî <TT>0</TT>, åíêîäåð áóäåò èñïîëüçîâàòü âìåñòî îáùåãî ëèíåéíîãî ïðîãíîçèðîâàíèÿ ïîñòîÿííûå êîýôôèöèåíòû. Ýòîò ìåòîä óâåëè÷èâàåò ñêîðîñòü ðàáîòû, íî ôàéëû ïîëó÷àþòñÿ íà 5-10% áîëüøå.</TD></TR>
|
|
|
|
<TR><TD><TT>-q #</TT></TD>
|
|
<TD>Îïðåäåëÿåò òî÷íîñòü äèñêðåòíûõ êîýôôèöèåíòîâ ëèíåéíîãî ïðîãíîçèðîâàíèÿ â áèòàõ. Ïî óìîë÷àíèþ <TT>-q 0</TT>, ÷òî ïîçâîëÿåò åíêîäåðó ïðèíèìàòü ðåøåíèå â çàâèñèìîñòè îò ñèãíàëà. Ëó÷øå îñòàâëÿòü çíà÷åíèå ïî óìîë÷àíèþ.</TD></TR>
|
|
|
|
<TR><TD><TT>-p</TT></TD>
|
|
<TD>Ïðîèçâîäèòü îïòèìèçàöèþ LPC. Ïåðåîïðåäåëÿåò ëþáóþ îïöèþ <TT>-q</TT>. Ñèëüíî çàìåäëÿåò ðàáîòó, è óìåíüøàåò ðàçìåð ôàéëà íà äîëþ ïðîöåíòà. <TT>-q</TT> íå ðàáîòàåò, êîãäà èñïîëüçóåòñÿ <TT>-l 0</TT>.</TD></TR>
|
|
|
|
<TR><TD><TT>-r [#,]#</TT></TD>
|
|
<TD>Óñòàíîâèòü <I>[min,]max</I> ïîðÿäîê ðàçäåëà. Åñëè ìèíèìàëüíîå çíà÷åíèå íå óêàçàíî, òî îíî óñòàíàâëèâàåòñÿ ðàâíûì 0. Ïî óìîë÷àíèþ åíêîäåð îäèí ïàðàìåòð Ðàéñà äëÿ âñåãî îñòàòêà ïîäôðåéìà. Åñëè èñïîëüçîâàòü ýòó îïöèþ, îñòàòîê áóäåò ðàçäåëÿòüñÿ íà <I>2^min#</I> ... <I>2^max</I> ÷àñòåé, äëÿ êàæäîé èç êîòîðûõ áóäåò îïðåäåëåí ñîáñòâåííûé ïàðàìåòð Ðàéñà. Ñ óâåëè÷åíèåì ïàðàìåòðà <I>max</I> âûèãðûø áóäåò âñå ìåíüøå. Íàèáîëåå îïòèìàëüíûé âàðèàíò äîñòèãàåòñÿ ïðè èñïîëüçîâàíèè <TT>-r 2,2</TT> (è áîëüøèõ çíà÷åíèé äëÿ áîëüøèõ ðàçìåðîâ áëîêîâ). Ïðè ýòîì ñæàòèå îáû÷íî óâåëè÷èâàåòñÿ íà 1.5%. Âûáîð îïòèìàëüíîãî çíà÷åíèÿ ìîæíî ïðîèçâåñòè ïî ôîðìóëå <TT>ðàçìåð_áëîêà/(2^n)=128</TT>. Ìàêñèìàëüíûé óðîâåíü ñæàòèÿ äîñòèãàåòñÿ ïðè èñïîëüçîâàíèè <TT>-r 0,16</TT>.</TD></TR>
|
|
|
|
<TR><TD><TT>-R #</TT></TD>
|
|
<TD>Óñòàíîâèòü ïðåäåëû ïîèñêà ïàðàìåòðà Ðàéñà. Ïî óìîë÷àíèþ 0. Êîäåð îñòàòêîâ áóäåò èñêàòü íàèëó÷øèé ïàðàìåòð Ðàéñà â óêàçàííîì ïðåäåëå äëÿ êàæäîãî ðàçäåëà îñòàòêîâ. Èñïîëüçîâàíèå ýòîé îïöèè íå äàåò áîëüøîãî âûèãðûøà, íî ñèëüíî çàìåäëÿåò ðàáîòó.  ðåçóëüòàòå, îïöèè <TT>-0</TT> ... <TT>-9</TT> íå èñïîëüçóþò åå.</TD></TR>
|
|
|
|
<TR><TD><TT>-V</TT></TD>
|
|
<TD>Ïðîâåðÿòü ïðîöåññ ñæàòèÿ.  äàííîì ñëó÷àå <B><TT>flac</TT></B> ñîçäàåò ïàðàëëåëüíûé äåêîäåð, ðàñêîäèðóþùèé âûõîä åíêîäåðà è ñðàâíèâàåò ðåçóëüòàò ñ îðèãèíàëîì. Åñëè áóäåò íàéäåíî íåñîîòâåòñòâèå, êîäèðîâàíèå ïðåêðàòèòñÿ. Âðåìÿ ðàáîòû ñ ýòîé îïöèåé óâåëè÷èâàåòñÿ, îäíàêî, ïðè ýòîì ãàðàíòèðóåòñÿ, ÷òî ôàéë áóäåò ïðàâèëüíî äåêîäèðîâàí.</TD></TR>
|
|
|
|
<TR><TD> </TD>
|
|
<TD><TT>-S-, -m-, -V-, -e-, -p-, --lax-, --delete-input-file-</TT> èñïîëüçóþòñÿ äëÿ îòêëþ÷åíèÿ ñîîòâåòñòâóþùèõ îïöèé.</TD></TR>
|
|
</TABLE>
|
|
|
|
|
|
<H4>Íàñòðîéêè ôîðìàòà</H4>
|
|
<TABLE border=1>
|
|
|
|
<TR><TD width=15%><TT>-fb | -fl</TT></TD>
|
|
<TD width=90%>Îïðåäåëÿåò ïîðÿäîê áàéòîâ â ôàéëå áåç çàãîëîâêà big-endian | little-endian.</TD></TR>
|
|
|
|
<TR><TD><TT>-fc n</TT></TD>
|
|
<TD>Îïðåäåëÿåò êîëè÷åñòâî êàíàëîâ â ôàéëå áåç çàãîëîâêà.</TD></TR>
|
|
|
|
<TR><TD><TT>-fp n</TT></TD>
|
|
<TD>Îïðåäåëÿåò êîëè÷åñòâî áèò íà ñýìïë â ôàéëå áåç çàãîëîâêà.</TD></TR>
|
|
|
|
<TR><TD><TT>-fs n</TT></TD>
|
|
<TD>Îïðåäåëÿåò êîëè÷åñòâî ñýìïëîâ â ñåêóíäó â ôàéëå áåç çàãîëîâêà.</TD></TR>
|
|
|
|
<TR><TD><TT>-fu</TT></TD>
|
|
<TD>Óêàçûâàåò, ÷òî ñýìïëû â ôàéëå áåç çàãîëîâêà áåççíàêîâûå (ïî óìîë÷àíèþ çíàêîâûå).</TD></TR>
|
|
|
|
<TR><TD><TT>-fr</TT></TD>
|
|
<TD>Âîñïðèíèìàòü âõîäíîé (èëè âûõîäíîé ïðè äåêîäèðîâàíèè) ôàéë êàê raw ïîòîê ñýìïëîâ âíå çàâèñèìîñòè îò ñóôôèêñà.</TD></TR>
|
|
|
|
<TR><TD><TT>-fw</TT></TD>
|
|
<TD>Âîñïðèíèìàòü âõîäíîé (èëè âûõîäíîé ïðè äåêîäèðîâàíèè) ôàéë êàê RIFF WAVE âíå çàâèñèìîñòè îò ñóôôèêñà.</TD></TR>
|
|
</TABLE>
|
|
|
|
|
|
<A NAME="metaflac">
|
|
<H3><B><TT>metaflac</TT></B></H3>
|
|
|
|
<P><B><TT>metaflac</TT></B> - ýòî ðåäàêòîð ìåòàäàííûõ, ðàáîòàþùèé èç êîìàíäíîé ñòðîêè. Ñåé÷àñ îí òîëüêî âûâîäèò ñîäåðæèìîå áëîêîâ ìåòàäàííûõ âî .flac ôàéëå, íî ñêîðî ñ åãî ïîìîùüþ ìîæíî áóäåò âñòàâëÿòü, óäàëÿòü è ðåäàêòèðîâàòü áëîêè.</P>
|
|
|
|
<P>Cåé÷àñ <B><TT>metaflac</TT></B> âûçûâàåòñÿ òîëüêî îäíèì ñïîñîáîì:</P>
|
|
|
|
<P><TT>metaflac [-v] âõîäíîé_ôàéë</TT></P>
|
|
|
|
<P>Âõîäíûì_ôàéëîì ìîæåò áûòü "-" äëÿ ñòàíäàðòíîãî ââîäà (stdin). åñëè èñïîëüçîâàòü <TT>-v</TT>, áóäåò ïîëó÷åí áîëåå ïîäðîáíûé îò÷åò.</P>
|
|
|
|
|
|
<A NAME="plugins"><A NAME="xmms_plugin">
|
|
<H3>Ïëàãèí äëÿ XMMS</H3>
|
|
|
|
<P>Äëÿ åãî óñòàíîâêè íåîáõîäèìî ñêîïèðîâàòü <TT>libxmms-flac.so</TT> â êàòàëîã, ãäå íàõîäÿòñÿ ïëàãèíû ââîäà XMMS (îáû÷íî <TT>/usr/lib/xmms/Input</TT>). Áîëüøå íè÷åãî íàñòðàèâàòü íå íàäî. Äëÿ âîñïðîèçâåäåíèÿ .flac ôàéëîâ ïåðåçàïóñòèòå XMMS.</P>
|
|
|
|
|
|
<A NAME="winamp_plugin">
|
|
<H3>Ïëàãèí äëÿ Winamp</H3>
|
|
|
|
<P>Äëÿ åãî óñòàíîâêè íåîáõîäèìî ñêîïèðîâàòü <TT>in_flac.dll</TT> â êàòàëîã, ãäå íàõîäÿòñÿ ïëàãèíû ââîäà Winamp (îáû÷íî <TT>/Plugins</TT>). Áîëüøå íè÷åãî íàñòðàèâàòü íå íàäî. Äëÿ âîñïðîèçâåäåíèÿ .flac ôàéëîâ ïåðåçàïóñòèòå Winamp.</P>
|
|
|
|
|
|
<A NAME="libflac">
|
|
<H3><B><TT>libFLAC</TT></B></H3>
|
|
|
|
<P>Áèáëèîòåêà <B><TT>libFLAC</TT></B> ÿâëÿåòñÿ ðåàëèçàöèåé íà C áàçîâîãî åíêîäåðà è äåêîäåðà. Èñïîëüçóÿ ýòó áèáëèîòåêó è íàïèñàâ íåìíîãî êîäà, ìîæíî äîáàâèòü ïîääåðæêó FLAC â ñâîþ ïðîãðàììó. Óñëîâèÿ ðàñïðîñòðàíåíèÿ - <A HREF="http://www.gnu.org/copyleft/lesser.html">LGPL</A>. Èñõîäíûå êîäû áèáëèîòåêè <B><TT>libFLAC</TT></B>, òàêæå êàê è êîíñîëüíîãî êîäåêà è ïëàãèíîâ äîñòóïíû, è ìîãóò ïîñëóæèòü õîðîøèì ïðèìåðîì äëÿ èñïîëüçîâàíèÿ.</P>
|
|
|
|
<P><B><TT>libFLAC</TT></B> òðåáóåò ñòàíäàðòíóþ è ìàòåìàòè÷åñêóþ áèáëèîòåêè äëÿ ÿçûêà C. Ïîòîêè íå èñïîëüçóþòñÿ, îäíàêî, òàê êàê <B><TT>libFLAC</TT></B> íå èñïîëüçóåò ãëîáàëüíûå ïåðåìåííûå, áèáëèîòåêà äîëæíà áûòü thread-safe.</P>
|
|
|
|
<P>Èíòåðôåéñ <B><TT>libFLAC</TT></B> îïèñàí â ïóáëè÷íûõ çàãîëîâî÷íûõ ôàéëàõ â êàòàëîãå include/FLAC. Äëÿ èñïîëüçîâàíèÿ ñêîìïèëèðîâàííîé áèáëèîòåêè íóæíû òîëüêî ïóáëè÷íûå çàãîëîâêè. Îáðàòèòå âíèìàíèå íà òî, ÷òî êîä èç src/libFLAC/, âêëþ÷àÿ çàùèùåííûå çàãîëîâî÷íûå ôàéëû èç src/libFLAC/include/ íå íóæåí.</P>
|
|
|
|
<P>Â îñíîâíîì èñïîëüçîâàíèå <B><TT>libFLAC</TT></B> ñîñòîèò â ñëåäóþùåì:</P>
|
|
|
|
<OL>
|
|
<LI>Ïðîãðàììà ñîçäàåò ýêçåìïëÿð åíêîäåðà èëè äåêîäåðà ñ ïîìîùüþ ôóíêöèé <TT>*_new()</TT>.</LI>
|
|
|
|
<LI>Ïðîãðàììà óñòàíàâëèâàåò ïàðàìåòðû ýêçåìïëÿðà è ïðåäîñòàâëÿåò åìó îáðàòíûå âûçîâû äëÿ ÷òåíèÿ, çàïèñè, ñîîáùåíèÿ îá îøèáêàõ è ðàáîòû ñ ìåòàäàííûìè ñ ïîìîùüþ ôóíêöèé <TT>*_set_*()</TT>.</LI>
|
|
|
|
<LI>Ïðîãðàììà èíèöèàëèçèðóåò ýêçåìïëÿð, ïðîâåðÿåò ïàðàìåòðû è ãîòîâèòñÿ ê êîäèðîâàíèþ/äåêîäèðîâàíèþ, èñïîëüçóÿ ôóíêöèè <TT>*_init()</TT>.</LI>
|
|
|
|
<LI>Ïðîãðàììà âûçûâàåò ôóíêöèè <TT>*_process_*()</TT> äëÿ êîäèðîâàíèÿ èëè äåêîäèðîâàíèÿ äàííûõ, êîòîðûå â ñâîþ î÷åðåäü äåëàþò îáðàòíûå âûçîâû.</LI>
|
|
|
|
<LI>Ïðîãðàììà çàâåðøàåò ðàáîòó ýêçåìïëÿðà ôóíêöèåé <TT>*_finish()</TT>, êîòîðàÿ ñáðàñûâàåò áóôåðû ââîäà è âûâîäà.</LI>
|
|
|
|
<LI>Ýêçåìïëÿð ìîæåò áûòü èñïîëüçîâàí ñíîâà ëèáî óäàëåí ôóíêöèåé <TT>*_delete()</TT>.</LI>
|
|
|
|
</OL>
|
|
|
|
<P>Äëÿ äåêîäèðîâàíèÿ <B><TT>libFLAC</TT></B> ïðåäîñòàâëÿåò äâà óðîâíÿ äîñòóïà. Íà íèæíåì óðîâíå íàõîäèòñÿ äåêîäåð ïîòîêîâ, à íà âåðõíåì - ôàéëîâ (ÿâëÿþùèéñÿ â ñâîþ î÷åðåäü îáîëî÷êîé äëÿ ïîòîêîâîãî äåêîäåðà). Èíòåðôåéñû îïèñàíû â ôàéëàõ <TT>stream_decoder.h</TT> è <TT>file_decoder.h</TT> ñîîòâåòñòâåííî. Ôàéëîâûé äåêîäåð ñàì îñóùåñòâëÿåò îáðàòíûå âûçîâû äëÿ ÷òåíèÿ è ïðåäîñòàâëÿåò ôóíêöèè ïîèñêà. Åíêîäåð ïîêà ÷òî ðåàëèçîâàí òîëüêî íà ïîòîêîâîì óðîâíå (<TT>stream_encoder.h</TT>).</P>
|
|
|
|
<P>Ñòðóêòóðû è êîíñòàíòû, îòíîñÿùèåñÿ ê ôîðìàòó, îïðåäåëåíû â ôàéëå <TT>format.h</TT>.</P>
|
|
|
|
|
|
<P><B>ÄÅÊÎÄÅÐ ÏÎÒÎÊÎÂ</B></P>
|
|
|
|
<P>Ñíà÷àëà îáñóäèì äåêîäåð ïîòîêîâ. Òèï åãî ýêçåìïëÿðà <TT>FLAC__StreamDecoder</TT>. Îáû÷íî â ïðîãðàììå ýêçåìïëÿð ñîçäàåòñÿ âûçîâîì <TT>FLAC__stream_decoder_new()</TT> è èíèöèàëèçèðóåòñÿ <TT>FLAC__stream_decoder_init()</TT>. Ïðîãðàììà òàêæå ìîæåò ïðåäîñòàâëÿòü óêàçàòåëü client_data íà <TT>FLAC__stream_decoder_init()</TT>, êîòîðûé áóäåò èñïîëüçîâàòüñÿ äëÿ îáðàòíûõ âûçîâîâ.</P>
|
|
|
|
<UL>
|
|
<LI>Îáðàòíûé âûçîâ äëÿ ÷òåíèÿ. Ýòà ôóíêöèÿ âûçûâàåòñÿ, êîãäà äåêîäåðó íåîáõîäèìû äàííûå.  êà÷åñòâå ïàðàìåòðîâ ïåðåäàåòñÿ àäðåñ áóôåðà, êîòîðûé íóæíî çàïîëíèòü, è åãî ðàçìåð â áàéòàõ. Îáðàòíûé âûçîâ ìîæåò âåðíóòü ìåíüøå äàííûõ è èçìåíèòü ñ÷åò÷èê áàéòîâ, íî íå äîëæåí ïåðåïîëíÿòü áóôåð. Êîä âîçâðàòà ïðè âûõîäå âûáèðàåòñÿ èç <TT>FLAC__StreamDecoderReadStatus</TT>.</LI>
|
|
|
|
<LI>Îáðàòíûé âûçîâ äëÿ çàïèñè. Ýòà ôóíêöèÿ âûçûâàåòñÿ ïîñëå äåêîäèðîâàíèÿ îäíîãî ôðåéìà äàííûõ. Äåêîäåð ïåðåäàñò ìåòàäàííûå ôðåéìà, à òàêæå ìàññèâ óêàçàòåëåé (ïî îäíîìó íà êàæäûé êàíàë) íà äåêîäèðîâàííûå äàííûå.</LI>
|
|
|
|
<LI>Îáðàòíûé âûçîâ äëÿ ðàáîòû ñ ìåòàäàííûìè. Ôóíêöèÿ âûçûâàåòñÿ ïîñëå ðàçáîðà áëîêà ìåòàäàííûõ. Äëÿ ïîòîêà âñåãäà äîëæåí ñóùåñòâîâàòü áëîê ìåòàäàííûõ <TT>STREAMINFO</TT>, çà êîòîðûì ìîæåò ñëåäîâàòü ïðîèçâîëüíîå êîëè÷åñòâî äðóãèõ áëîêîâ. Îíè áóäóò âîçâðàùåíû äåêîäåðîì â òîì æå ïîðÿäêå, â êàêîì îíè ðàñïîëîæåíû â ïîòîêå è âñåãäà ïåðåä ïåðâûì àóäèî ôðåéìîì.</LI>
|
|
|
|
<LI>Îáðàòíûé âûçîâ äëÿ ñîîáùåíèÿ îá îøèáêå. Ýòà ôóíêöèÿ âûçûâàåòñÿ, åñëè ïðè äåêîäèðîâàíèè ïðîèñõîäèò îøèáêà.</LI>
|
|
</UL>
|
|
|
|
<P>Êîãäà äåêîäåð èíèöèàëèçèðîâàí, ïðîãðàììà ìîæåò âûçâàòü îäíó èç ñëåäóþùèõ ôóíêöèé äëÿ äåêîäèðîâàíèÿ:</P>
|
|
|
|
<UL>
|
|
<LI><B><TT>FLAC__stream_decoder_process_whole_stream()</TT></B> - Äåêîäåð íà÷èíàåò ðàáîòó è ïðîäîëæàåò îáðàáàòûâàòü ïîòîê ïîêà ôóíêöèÿ îáðàòíîãî âûçîâà ÷òåíèÿ íå ïåðåäàñò êîä <TT>FLAC__STREAM_DECODER_READ_END_OF_STREAM</TT> èëè <TT>FLAC__STREAM_DECODER_READ_ABORT</TT>.</LI>
|
|
|
|
<LI><B><TT>FLAC__stream_decoder_process_metadata()</TT></B> - Äåêîäåð îáðàáàòûâàåò ïîòîê äî ïåðâîãî àóäèî ôðåéìà.</LI>
|
|
|
|
<LI><B><TT>FLAC__stream_decoder_process_one_frame()</TT></B> - Äåêîäåðîâàòü òîëüêî îäèí ôðåéì. Ïåðåä âûçîâîì ýòîé ôóíêöèè âñå ìåòàäàííûå äîëæíû áûòü îáðàáîòàíû.</LI>
|
|
|
|
<LI><B><TT>FLAC__stream_decoder_process_remaining_frames()</TT></B> - Äåêîäèðîâàòü âñå îñòàâøèåñÿ ôðåéìû. Ïåðåä âûçîâîì ýòîé ôóíêöèè âñå ìåòàäàííûå äîëæíû áûòü îáðàáîòàíû. Ïåðåä âûçîâîì ýòîé ôóíöèè òàêæå ìîæåò âûçûâàòüñÿ <TT>FLAC__stream_decoder_process_one_frame()</TT>.</LI>
|
|
</UL>
|
|
|
|
<P>Êîãäà äåêîäåð çàêàí÷èâàåò ðàáîòó, ýêçåìïëÿð îáðàáàòûâàåòñÿ ôóíêöèåé <TT>FLAC__stream_decoder_finish()</TT>, êîòîðàÿ ïðîâåðÿåò ñîñòîÿíèå äåêîäåðà è îñâîáîæäàåò ïàìÿòü. Çàòåì ýêçåìïëÿð ìîæåò áûòü óäàëåí ôóíêöèåé <TT>FLAC__stream_decoder_delete()</TT> èëè èíèöèàëèçèðîâàí çàíîâî äëÿ äåêîäèðîâàíèÿ äðóãîãî ïîòîêà.</P>
|
|
|
|
<P>Îáðàòèòå âíèìàíèå íà òî, ÷òî ïîòîêîâûé äåêîäåð íå èìååò ïðåäñòàâëåíèÿ î ïîçèöèè â ïîòîêå, îí òîëüêî ïðåîáðàçîâûâàåò äàííûå. ×òîáû îñóùåñòâëÿòü ïîèñê â ïîòîêå ôóíêöèè îáðàòíîãî âûçîâà ìîãóò òîëüêî ñáðàñûâàòü äàííûå äåêîäåðà ôóíêöèåé <TT>FLAC__stream_decoder_flush()</TT> è íà÷èíàòü ïîäàâàòü äàííûå ñ íîâîé ïîçèöèè ñ ïîìîùüþ îáðàòíîãî âûçîâà äëÿ ÷òåíèÿ. Äåêîäåð ôàéëîâ ïîñòóïàåò èìåííî òàê.</P>
|
|
|
|
|
|
<P><B>ÄÅÊÎÄÅÐ ÔÀÉËÎÂ</B></P>
|
|
|
|
<P>Äåêîäåð ôàéëîâ - ýòî îáîëî÷êà äåêîäåðà ïîòîêîâ, ïðèçâàííàÿ óïðîñòèòü ïðîöåññ äåêîäèðîâàíèÿ ôàéëîâ. Òèï åãî ýêçåìïëÿðà - <TT>FLAC__FileDecoder</TT>. Îòëè÷èå îò ïîòîêîâîãî äåêîäåðà ñîñòîèò â òîì, ÷òî âìåñòî îáðàòíîãî âûçîâà äëÿ ÷òåíèÿ (êîòîðûé îáðàáàòûâàåò ñàì äåêîäåð) ïðè èíèöèàëèçàöèè óêàçûâàåòñÿ ïóòü ê ôàéëó. Îñòàëüíûå ôóíêöèè àíàëîãè÷íû ýêâèâàëåíòàì â äåêîäåðå ïîòîêîâ.</P>
|
|
|
|
<P>Òàê êàê äåêîäåð ôàéëîâ ñàì óïðàâëÿåò âõîäíûìè äàííûìè, îí ìîæåò ïðåäîñòàâèòü è ïîèñê. Îí îñóùåñòâëÿåòñÿ ìåòîäîì <TT>FLAC__file_decoder_seek_absolute()</TT>.  ëþáîé ìîìåíò ïîñëå èíèöèàëèçàöèè äåêîäåðà ôàéëîâ ïðîãðàììà ìîæåò âûçâàòü ýòó ôóíêöèþ äëÿ ïîèñêà ñýìïëà â ôàéëå. Âïîñëåäñòâèè, ïðè ïåðâîì îáðàòíîì âûçîâå äëÿ çàïèñè îí áóäåò ñîäåðæàòü (âîçæîæíî íåïîëíûé) áëîê, íà÷èíàþùèéñÿ ñ ýòîãî ñýìïëà.</P>
|
|
|
|
<P>Äåêîäåð ôàéëîâ òàêæå ïðåäîñòàâëÿåò ïðîâåðêó ïîäïèñè MD5. Åñëè ýòà âîçìîæíîñòü áóäåò âêëþ÷åíà ïåðåä èíèöèàëèçàöèåé, <TT>FLAC__file_decoder_finish()</TT> ñîîáùèò, åñëè ïîäïèñü MD5 ðàñïàêîâàííûõ äàííûõ íå ñîâïàäåò ñ ñîõðàíåííîé â áëîêå STREAMINFO. Ïðîâåðêà MD5 àâòîìàòè÷åñêè âûêëþ÷àåòñÿ, åñëè â áëîêå STREAMINFO íåò ïîäïèñè èëè ïðè ïîïûòêå îñóùåñòâëåíèÿ ïîèñêà.
|
|
|
|
|
|
<P><B>ÅÍÊÎÄÅÐ ÏÎÒÎÊÎÂ</B></P>
|
|
|
|
<P>Åíêîäåð ïîòîêîâ ðàáîòàåò àíàëîãè÷íî äåêîäåðó, îäíàêî èìååò ìåíüøå îáðàòíûõ âûçîâîâ è áîëüøå îïöèé. Òèï ýêçåìïëÿðà - <TT>FLAC__StreamEncoder</TT>. Äëÿ ñîçäàíèÿ íîâîãî ýêçåìïëÿðà â ïðîãðàììå íóæíî âûçâàòü ôóíêöèþ <TT>FLAC__stream_encoder_new()</TT>, à ÷òîáû ïðîèíèöèàëèçèðîâàòü åãî - <TT>FLAC__stream_encoder_init()</TT>.</P>
|
|
|
|
<P> îòëè÷èå îò ïðîöåññà äåêîäèðîâàíèÿ êîäèðîâàíèå â ôîðìàò FLAC èìååò ìíîæåñòâî îïöèé, âëèÿþùèõ íà ñêîðîñòü è óðîâåíü ñæàòèÿ. Êîãäà ïðîãðàììà âûçûâàåò <TT>FLAC__stream_encoder_init()</TT>, åíêîäåð ïðîâåðÿåò çíà÷åíèÿ, ïîýòîìó íåîáõîäèìî óáåäèòüñÿ, ÷òî âîçâðàùåìîå ýòîé ôóíêöèåé çíà÷åíèå - <TT>FLAC__STREAM_ENCODER_OK</TT>. Äëÿ óñòàíîâêè ïàðàìåòðîâ íóæíî èìåòü íåêîòîðîå ïðåäñòàâëåíèå î ôîðìàòå (ñì. <A HREF="#format">îïèñàíèå ôîðìàòà äëÿ ïîëüçîâàòåëÿ</A> èëè åãî <A HREF="format.html">ôîðìàëüíîå îïèñàíèå</A>). Ñïèñîê íåîáõîäèìûõ ïàðàìåòðîâ ïðèâåäåí çäåñü:</P>
|
|
|
|
<UL>
|
|
<LI><B><TT>streamable_subset</TT></B> - <TT>èñòèíà</TT>, åñëè íåîáõîäèìî, ÷òîáû âûõîä ñîîòâåòñòâîâàë ïîòîêîâîìó <A HREF="format.html#subset">ïîäìíîæåñòâó ôîðìàòà</A>, èíà÷å <TT>ëîæü</TT>.</LI>
|
|
|
|
<LI><B><TT>do_mid_side_stereo</TT></B> - <TT>èñòèíà</TT>, åñëè íóæíî èñïîëüçîâàòü óñðåäíåííîå êîäèðîâàíèå äëÿ ñòåðåî ïîòîêîâ. Çíà÷åíèå <TT>channels</TT> äîëæíî áûòü <TT>2</TT>.</LI>
|
|
|
|
<LI><B><TT>loose_mid_side_stereo</TT></B> - <TT>èñòèíà</TT>, ÷òîáû ïðèìåíèòü àäàïòèâíîå ïåðåêëþ÷åíèå ðåæèìà óñðåäíåííîãî êîäèðîâàíèÿ, èíà÷å ëîæü. <TT>do_mid_side_stereo</TT> äîëæíî áûòü èñòèíà.</LI>
|
|
|
|
<LI><B><TT>channels</TT></B> (êîëè÷åñòâî êàíàëîâ) - äîëæíî áûòü <= <TT>FLAC__MAX_CHANNELS</TT>.</LI>
|
|
|
|
<LI><B><TT>bits_per_sample</TT></B> - êîëè÷åñòâî áèòîâ íà ñýìïë.</LI>
|
|
|
|
<LI><B><TT>sample_rate</TT></B> (÷àñòîòà äèñêðåòèçàöèè) - äîëæíî áûòü <= <TT>FLAC__MAX_SAMPLE_RATE</TT>.</LI>
|
|
|
|
<LI><B><TT>blocksize</TT></B> (ðàçìåð áëîêà) - äîëæåí áûòü ìåæäó <TT>FLAC__MIN_BLOCKSIZE</TT> è <TT>FLAC__MAX_BLOCKSIZE</TT>.</LI>
|
|
|
|
<LI><B><TT>max_lpc_order</TT></B> (ìàêñèìàëüíûé ïîðÿäîê êîýôôèöèåíòîâ ëèíåéíîãî ïðîãíîçèðîâàíèÿ) - <TT>0</TT> óêàçûâàåò, ÷òî åíêîäåð íå äîëæåí èñïîëüçîâàòü LPC, à òîëüêî ïîñòîÿííûå ïðåäèêòîðû. Äîëæíî áûòü <= <TT>FLAC__MAX_LPC_ORDER</TT>.</LI>
|
|
|
|
<LI><B><TT>qlp_coeff_precision</TT></B> - äîëæíî áûòü >= <TT>FLAC__MIN_QLP_COEFF_PRECISION</TT>, èëè <TT>0</TT>, ÷òîáû åíêîäåð ìîã âûáèðàòü êîýôôèöèåíòû â çàâèñèìîñòè îò ðàçìåðà áëîêà. Â òåêóùåé ðåàëèçàöèè ñóììà <TT>qlp_coeff_precision</TT>+<TT>bits_per_sample</TT> äîëæíà áûòü < <TT>32</TT>.</LI>
|
|
|
|
<LI><B><TT>do_qlp_coeff_prec_search</TT></B> - <TT>ëîæü</TT>, ÷òîáû èñïîëüçîâàòü çàäàííîå çíà÷åíèå <TT>qlp_coeff_precision</TT>; <TT>èñòèíà</TT> äëÿ ïîèñêà è âûáîðà ëó÷øåãî çíà÷åíèÿ <TT>qlp_coeff_precision</TT>.</LI>
|
|
|
|
<LI><B><TT>do_exhaustive_model_search</TT></B> (ïðîèçâîäèòü ïîëíûé ïîèñê íàèëó÷øåé ìîäåëè) - <TT>ëîæü</TT>, to use estimated bits per residual for scoring; <TT>èñòèíà</TT> äëÿ ïåðåáîðà âñåõ âîçìîæíûõ âàðèàíòîâ è âûáîðà íàèëó÷øåãî.</LI>
|
|
|
|
<LI><B><TT>min_residual_partition_order</TT></B> (ìèíèìàëüíûé ïîðÿäîê ðàçäåëà îñòàòêîâ), <B><TT>max_residual_partition_order</TT></B> (ìàêñèìàëüíûé ïîðÿäîê ðàçäåëà îñòàòêîâ)= <TT>0</TT>, ÷òîáû îöåíèâàòü ïàðàìåòð Ðàéñà îñíîâûâàÿñü íà äèñïåðñèè îñòàòêîâ; > <TT>0</TT> äëÿ ðàçäåëåíèÿ îñòàòêîâ è îïðåäåëåíèÿ ïàðàìåòðà äëÿ êàæäîãî ðàçäåëà, îñíîâûâàÿñü íà ñðåäíåì. <TT>min_residual_partition_order</TT> è <TT>max_residual_partition_order</TT> îïðåäåëÿþò ìèíèìàëüíûé è ìàêñèìàëüíûé ïîðÿäîê ðàçäåëà Ðàéñà.</LI>
|
|
|
|
<LI><B><TT>rice_parameter_search_dist</TT></B> (èíòåðâàë äëÿ ïîèñêà ïàðàìåòðà Ðàéñà) - <TT>0</TT>, ÷òîáû èñïîëüçîâàòü òîëüêî âû÷èñëåííûé ïàðàìåòð <TT>k</TT>; èíà÷å ïûòàòüñÿ êîäèðîâàòü ñî âñåìè ïàðàìåòðàìè èç èíòåðâàëà [<TT>k</TT>-<TT>rice_parameter_search_dist</TT>..<TT>k</TT>+<TT>rice_parameter_search_dist</TT>] è âûáèðàòü ëó÷øèé âàðèàíò.</LI>
|
|
|
|
<LI><B><TT>total_samples_estimate</TT></B> (êîëè÷åñòâî ñýìïëîâ) - Ìîæåò ðàâíÿòüñÿ <TT>0</TT>, åñëè íåèçâåñòíî. Èíà÷å óêàçûâàåòñÿ êîëè÷åñòâî ñýìïëîâ, êîòîðîå íóæíî çàêîäèðîâàòü. Ýòî ïîçâîëÿåò ñîçäàâàòü áîëåå òî÷íûé áëîê <TT>STREAMINFO</TT> ïðè ïåðâîì æå ïðîõîäå â ñëó÷àå, êîãäà åíêîäåð íå ìîæåò âåðíóòüñÿ ê íà÷àëó âûâîäà, ÷òîáû îáíîâèòü áëîê <TT>STREAMINFO</TT>.</LI>
|
|
|
|
<LI><B><TT>seek_table</TT></B> (òàáëèöà äëÿ ïîèñêà) - ñîçäàòü íåîáÿçàòåëüíóþ òàáëèöó äëÿ ïîèñêà â ôàéëå. <TT>NULL</TT> óêàçûâàåò, ÷òî òàáëèöà íå íóæíà.</LI>
|
|
|
|
<LI><B><TT>padding</TT></B> (ðåçåðâèðîâàíèå ìåñòà) - ðàçìåð áëîêà <TT>PADDING</TT> (ñëåäóåò çà òàáëèöåé äëÿ ïîèñêà); <TT>0</TT> îçíà÷àåò, ÷òî áëîê <TT>PADDING</TT> äîáàâëÿòü íå íóæíî.</LI>
|
|
</UL>
|
|
|
|
<P>Ïðîãðàììà äîëæíà ïðåäîñòàâèòü <TT>FLAC__stream_encoder_init()</TT> àäðåñà äëÿ ñëåäóþùèõ îáðàòíûõ âûçîâîâ:</TT>
|
|
|
|
<UL>
|
|
<LI>Îáðàòíûé âûçîâ äëÿ çàïèñè. Âûçûâàåòñÿ, êîãäà ïîÿâëÿþòñÿ çàêîäèðîâàííûå äàííûå äëÿ çàïèñè. Ýòî ìîãóò áûòü ìåòàäàííûå ñìåøàííûå ñ àóäèî ôðåéìàìè, ïðè÷åì íå ãàðàíòèðóåòñÿ, ÷òî äàííûå áóäóò âûðîâíåíû íà ãðàíèöó áëîêà ìåòàäàííûõ èëè ôðåéìà.</LI>
|
|
|
|
<LI>Îáðàòíûé âûçîâ äëÿ ðàáîòû ñ ìåòàäàííûìè. Âûçûâàåòñÿ îäíàæäû ïî çàâåðøåíèè êîäèðîâàíèÿ ñ populated ñòðóêòóðîé <TT>STREAMINFO</TT>. Ýòî íóæíî äëÿ òîãî, ÷òîáû åíêîäåðû ôàéëîâ ìîãëè âåðíóòüñÿ ê íà÷àëó ôàéëà è çàïèñàòü â áëîê <TT>STREAMINFO</TT> êîððåêòíûå äàííûå î êîäèðîâàíèè, íàïðèìåð ìèíèìàëüíûé è ìàêñèìàëüíûé ðàçìåð ôðåéìà.</LI>
|
|
</UL>
|
|
|
|
<P>Âûçîâ <TT>FLAC__stream_encoder_init()</TT> íåïîñðåäñòâåííî ïðîèçâîäèò îáðàòíûé âûçîâ äëÿ çàïèñè ñèãíàòóðû "fLaC" è âñåõ îïðåäåëåííûõ íà äàííûé ìîìåíò ìåòàäàííûõ.</P>
|
|
|
|
<P>Ïîñëå èíèöèàëèçàöèè ýêçåìïëÿðà ïðîãðàììà ìîæåò ïåðåäàâàòü äàííûå åíêîäåðó äâóìÿ ñïîñîáàìè:</P>
|
|
|
|
<UL>
|
|
<LI>Ðàçäåëåííûìè ïî êàíàëàì ÷åðåç <B><TT>FLAC__stream_encoder_process()</TT></B>.  ýòîì ñëó÷àå íóæíî îïðåäåëèòü ìàññèâ óêàçàòåëåé íà áóôôåðû îäèíàêîâîãî ðàçìåðà, ïî îäíîìó íà êàæäûé êàíàë. Âûðàâíèâàòü ñýìïëû íà ãðàíèöó áëîêà íå íóæíî.</LI>
|
|
|
|
<LI> ÷åðåäóþùèõñÿ êàíàëàõ ÷åðåç <B><TT>FLAC__stream_encoder_process_interleaved()</TT></B>. Ïðîãðàììà äîëæíà ïåðåäàòü îäèí óêàçàòåëü íà àóäèî äàííûå ñ ÷åðåäóþùèìèñÿ êàíàëàìè (íàïðèìåð, <TT>êàíàë0_ñýìïë0, êàíàë1_ñýìïë0, ... , êàíàëN_ñýìïë0, êàíàë0_ñýìïë1, ...</TT>). Äàííûå ìîãóò áûòü íå âûðîâíåíû íà ãðàíèöó áëîêà, íî äîëæíû áûòü âûðîâíåíû íà ãðàíèöó ñýìïëà, ò.å. ïåðâûì çíà÷åíèåì äîëæíî áûòü <TT>êàíàë0_ñýìïëX</TT>, à ïîñëåäíèì - <TT>êàíàëN_ñýìïëY</TT>.</LI>
|
|
</UL>
|
|
|
|
<P>Äëÿ çàâåðøåíèÿ êîäèðîâàíèÿ äàííûõ ïðîãðàììà âûçûâàåò ôóíêöèþ <TT>FLAC__stream_encoder_finish()</TT>, êîòîðàÿ êîäèðóåò îñòàâøèåñÿ äàííûå èç âõîäíîãî ïîòîêà è äåëàåò îáðàòíûé âûçîâ äëÿ ðàáîòû ñ ìåòàäàííûìè ñ êîððåêòíîé ñòàòèñòèêîé î ïðîöåññå êîäèðîâàíèÿ. Ýêçåìïëÿð ìîæåò áûòü óäàëåí ôóíêöèåé <TT>FLAC__stream_encoder_delete()</TT> èëè èíèöèàëèçèðîâàí ñíîâà äëÿ êîäèðîâàíèÿ íîâîãî ïîòîêà.</P>
|
|
|
|
|
|
<P><B>ÐÀÇÍÎÅ</B></P>
|
|
|
|
<P>Íåîáõîäèìî îòìåòèòü, ÷òî êîãäà ïåðåäàþòñÿ óêàçàòåëè íà àóäèî äàííûå, èõ ïîðÿäîê èìååò çíà÷åíèå òîëüêî äëÿ ñòåðåî ïîòîêîâ. Êàíàë <TT>0</TT> ñîîòâåòñòâóåò ëåâîìó êàíàëó, à <TT>1</TT> - ïðàâîìó.</P>
|
|
|
|
|
|
<P><B>ÌÅÒÀÄÀÍÍÛÅ</B></P>
|
|
|
|
<P>Ïðîãðàììû, çàïèñûâàþùèå ñâîè áëîêè ìåòàäàííûõ <TT>APPLICATION</TT>, ìîãóò óêàçàòü åíêîäåðó, ÷òîáû îí çàïèñàë áëîê ìåòàäàííûõ <TT>PADDING</TT> íóæíîãî ðàçìåðà.  ýòîì ñëó÷àå âìåñòî ïåðåçàïèñè âñåãî ïîòîêà ïîñëå êîäèðîâàíèÿ ïðîãðàììà ñìîæåò ïðîñòî çàìåíèòü áëîê <TT>PADDING</TT> íà ñâîé. Åñëè èçâåñòåí òîëüêî ìàêñèìàëüíûé ðàçìåð áëîêà <TT>APPLICATION</TT>, ïðîãðàììà ìîæåò ñîçäàòü ðåçåðâíûé áëîê ÷óòü áîëüøåãî ðàçìåðà, à ïîñëå êîäèðîâàíèÿ ðàçäåëèòü åãî íà áëîêè <TT>APPLICATION</TT> è <TT>PADDING</TT>.</P>
|
|
|
|
<P>Åñëè ðàçìåð áëîêà ìåòàäàííûõ <TT>APPLICATION</TT> èçâåñòåí çàðàíåå, ðàçìåð ðåçåðâèðóåìîé îáëàñòè ìîæåò áûòü ëåãêî âû÷åñëåí. Åñëè ðàçìåð áëîêà <TT>APPLICATION</TT> (íå âêëþ÷àÿ çàãîëîâîê áëîêà) ðàâåí <TT>N</TT> áàéòàì, òî ýêçåìïëÿðó FLAC__StreamEncoder ïåðåä èíèöèàëèçàöèåé íóæíî ïåðåäàòü çíà÷åíèå <TT>N+4</TT>. Ýòî íóæíî, ÷òîáû ó÷åñòü äîïîëíèòåëüíîå ìåñòî íåîáõîäèìîå äëÿ õðàíåíèÿ èäåíòèôèêàòîðà ïðèëîæåíèÿ.</P>
|
|
|
|
<P>Êîãäà èçâåñòåí òîëüêî ìàêñèìàëüíûé ðàçìåð, ñêàæåì, <TT>N</TT> áàéò, íóæíî çàðåçåðâèðîâàòü <TT>N+8</TT> áàéò. ×åòûðå äëÿ ID ïðèëîæåíèÿ è ÷åòûðå äëÿ äîïîëíèòåëüíîãî áëîêà <TT>PADDING</TT>, êîòîðûé çàïîëíèò îñòàâøååñÿ ïðîñòðàíñòâî. Ïî îêîí÷àíèè êîäèðîâàíèÿ, êîãäà ðàçìåð áëîêà äàííûõ <TT>APPLICATION</TT> ñòàíîâèòñÿ èçâåñòíîé è ðàâíîé, äîïóñòèì, <TT>M</TT> áàéòàì, íà ìåñòî ïåðâîíà÷àëüíîãî áëîêà <TT>PADDING</TT> áóäåò çàïèñàí áëîê <TT>APPLICATION</TT> è áëîê <TT>PADDING</TT> äëèíîé <TT>N-M</TT> áàéòîâ.</P>
|
|
|
|
|
|
<A NAME="bugs">
|
|
<H3>Èçâåñòíûå îøèáêè</H3>
|
|
|
|
<P>Îòñëåæèâàíèå îøèáîê âåäåòñÿ íà <A HREF="http://sourceforge.net/bugs/?group_id=13478">ýòîé</A> ñòðàíèöå ïðîåêòà, íàõîäÿùåéñÿ íà SourceForge. Åñëè Âû áóäåòå ñîîáùàòü îá îøèáêå, ïîæàëóéñòà, îñòàâüòå e-mail äëÿ êîíòàêòà.</P>
|
|
|
|
<P> Copyright (c) 2001 Josh Coalson</P>
|
|
|
|
</BODY>
|
|
</HTML>
|