2018/08/17

aaceditで正のdelayって

delay値が正だった場合、aaceditの実装はなぜか「ファイル末尾を削る」になっています。
なんででしょうね?
僕のイメージでは「ファイル先頭に無音を挿入」なのですが。

で、FakeAACWavは「先頭に無音を挿入したうえで末尾を削る」になっています。

・・・末尾を削る必要はあるんですか?よくわかりません・・・

とか思いつつ、aaceditに無音を挿入する変更を加えてました。

元々は某アニメで直前の番組が5.1chだったので音声先頭10フレームぐらいが5.1ch、その後2ch、となっていて、切り出したaacでは音声がちゃんと再生されなかった、というのを治そうと思っただけのはずなのですが、なんか全然違う方向に脱線してました・・・

そして、別にFAW使えば良いんじゃね? という真実。いや、知ってたけど。


ライセンスが不明なので差分だけ
aacedit.c
129,130c129
<         //printf("編集非対応ファイルです。\n");    mod
<         errorexit("編集非対応ファイルです。",FALSE);
---
>         printf("編集非対応ファイルです。\n");
141c140
<             /*if (delay > 0) {
---
>             if (delay > 0) {
143c142
<                 editinfotop->endframe = max(allaacframe - delay, 0);    //delayが正の時は終了フレームを削る→なんかおかしくね?
---
>                 editinfotop->endframe = max(allaacframe - delay, 0);
145c144
<                 editinfotop->startframe = -delay;    //常に正
---
>                 editinfotop->startframe = -delay;
147,151c146
<             }*/
<             //mod delayが正の値の場合は無音を挿入
<             editinfotop->startframe = -delay;
<             editinfotop->endframe = allaacframe;
<
---
>             }
263d257
<                     nState = 1 ;
265c259
<                 else if(( c >= '0' ) & ( c <= '9' )){
---
>                 if(( c >= '0' ) & ( c <= '9' )){
269d262
<                     nState = 1 ;
270a264
>                 nState = 1 ;
543,545c537,538
<             //mod startnumがマイナスの場合は無音挿入
<             //else if (startnum < 0)
<             //    editip->startframe = startnum = 0;
---
>             else if (startnum < 0)
>                 editip->startframe = startnum = 0;
591,595d582
<     //無音AAC 1frame分 FAWより抜き出し
<     unsigned char silentbuff0[16]={0xFF,0xF9,0x4C,0x00,0x02,0x1F,0xFC,0x21,0x00,0x49,0x90,0x02,0x19,0x00,0x23,0x80};    //0ch 破損時?
<     unsigned char silentbuff1[13]={0xFF,0xF9,0x4C,0x40,0x01,0xBF,0xFC,0x00,0xC8,0x40,0x80,0x23,0x80};                    //1ch mono
<     unsigned char silentbuff2[16]={0xFF,0xF9,0x4C,0x80,0x02,0x1F,0xFC,0x21,0x00,0x49,0x90,0x02,0x19,0x00,0x23,0x80};    //2ch stereo
<     unsigned char silentbuff6[33]={0xFF,0xF9,0x4D,0x80,0x04,0x3F,0xFC,0x00,0xC8,0x00,0x80,0x20,0x84,0x01,0x26,0x40,0x08,0x64,0x00,0x82,0x30,0x04,0x99,0x00,0x21,0x90,0x02,0x18,0x32,0x00,0x20,0x08,0xE0}; //5.1ch
613,646d599
<
<         //mod 正のdelayは無音を挿入
<         if(editip->startframe < 0){
<             printf("無音フレーム挿入(d>0) (%u frame)\n", -(editip->startframe));
<
<             aacdata = aacdatalist[0];    //最初ので判定
<             //5.1chと2ch,1chしか対応してない
<             if ( (aacdata->header->channel) == 1){
<                 writebuf = silentbuff1;
<                 writechunk = sizeof(silentbuff1);
<             }
<             else if ( (aacdata->header->channel) == 2){
<                 writebuf = silentbuff2;
<                 writechunk = sizeof(silentbuff2);
<             }
<             else if ( (aacdata->header->channel) >= 6){
<                 writebuf = silentbuff6;
<                 writechunk = sizeof(silentbuff6);
<             }
<             else{    // (aacdata->header->channel) == 0
<                 writebuf = silentbuff0;
<                 writechunk = sizeof(silentbuff0);
<             }
<            
<             //1frameずつ挿入するので効率が悪いのと、ちゃんとしたaacではない(?)ので挿入部分が長いとバッファ処理とかで再生時に不具合があるかも・・・
<             for (int ii=0;ii < -(editip->startframe);ii++){
<
<                 WriteFile(hWriteAACFile, writebuf, writechunk, &writechunk, NULL);
<                 writebyte += writechunk;
<                 framenum++;
<             }
<             editip->startframe =0;
<         }
<
aacedit.h
36c36
<     int startframe;
---
>     unsigned int startframe;

0 件のコメント:

コメントを投稿