кодирование музыки в mp3 без разрывов
> возможно ли
нет, это собственно основой недостаток mp3
нет, это собственно основой недостаток mp3
может, какие-нибудь аргументы приведешь?
думаю, ты сам их найдешь без особых усилий, я по памяти не вспомню, но вся проблема в алгоритме - при кодировании в mp3 длительность немного увеличивается с начала и с конца, ну если глубоко копнуть, то типа в особенности использования FFT вся трабла заключается, если тебе это интересно - можешь в гугле поискать на эту тему
это понятно, но я как раз понял (поискав, перед тем, как задать вопрос что кодеры вроде lame умеют с этим справляться
только вот не пойму, как использовать
в инете мало примеров, и все они, почему-то, работают не так, как я рассчитываю
только вот не пойму, как использовать
в инете мало примеров, и все они, почему-то, работают не так, как я рассчитываю
Поставь CoolEdit и спасти все с точностью до тысячной доли секунды.
я не в курсе... поробуй почитать ман к лэйму
cooledit-like tool у меня есть, однако все дело в автоматизации
, поэтому нужно делать с помощью ком. строки
2: жаль
а ман я, конечно, читал, но тот мне не помог
надо будет на свежую голову еще попробовать
, поэтому нужно делать с помощью ком. строки2: жаль
а ман я, конечно, читал, но тот мне не помог
надо будет на свежую голову еще попробовать

Проблема в том, чтобы сделать это без перекодирования ?
да хоть как-нибудь
Тогда не вижу проблемы. Попробуй каким-нибудь ***Edit'ом, типа того что Ден предлагает.
Какая разница что там кодер приписал к файлу, это всегда можно обрезать. Вопрос в том, чтобы восстановить максимально точно исходный звук - для этого навалом средств.
раз это приписано спец. образом, то вероятно, что можно автоматически определить это и убрать
***edit-ом не подходит, потому что нужен человек
а описанная задача будет выполняться часто, считай, каждый день, поэтому все должно быть автоматически
***edit-ом не подходит, потому что нужен человек
а описанная задача будет выполняться часто, считай, каждый день, поэтому все должно быть автоматически
Тогда sox
Он умеет обрезать, но что-то мне кажется, что это не потребуется. Ибо декодер сам может обрезать, и я не вижу для него причины этого не делать.
Он умеет обрезать, но что-то мне кажется, что это не потребуется. Ибо декодер сам может обрезать, и я не вижу для него причины этого не делать.
да не, тут не все так просто...
нужно же знать, что отрезать...
кстати, я нашел здесь, что --nogap у lame - это нечто другое, чем я ожидал (ему нужно отдавать raw-files, а он из них сделает mp3-шки, которые можно играть без gap-ов; полезно для концертных записей)
т.о. с mp3 уже не сделать этим ничего...
еще нашел древний фак по lame, там 6 вопросов, самый главный вот
нужно же знать, что отрезать...
кстати, я нашел здесь, что --nogap у lame - это нечто другое, чем я ожидал (ему нужно отдавать raw-files, а он из них сделает mp3-шки, которые можно играть без gap-ов; полезно для концертных записей)
т.о. с mp3 уже не сделать этим ничего...
еще нашел древний фак по lame, там 6 вопросов, самый главный вот
1. Why is a decoded MP3 longer than the original .wav file?последнее меня огорчило, но, мб, за 5 лет что-то изменилось...
Because LAME (and all other MDCT based encoders) add padding to the
beginning and end of each song. For an explination of why,
see the questions below.
LAME embeds the amount of padding in the ancillary data of the
first frame of the MP3 file. (LAME INFO tag). The LAME decoder
will use this information to remove the leading padding of an MP3 file.
Modifications to the decoder so that it will also remove the
trailing padding have not yet been made.
Прямой эксперимент показывает, что ничего не изменилось 
Есть перловый модуль для чтения INFO tag, есть прога mp3info. Обои два не выдают нужных значений. Остается только патчить
Должно быть несложно.

Есть перловый модуль для чтения INFO tag, есть прога mp3info. Обои два не выдают нужных значений. Остается только патчить
Должно быть несложно.что патчить-то?


Перловку, наверное, проще. Мне. Тебе - не знаю 
Чтоб выдавала значения padding. Потом в sox можно будет по ним обрезать.
Спецификация где-то в интернете валялась.

Чтоб выдавала значения padding. Потом в sox можно будет по ним обрезать.
Спецификация где-то в интернете валялась.
я не совсем тебя понимаю
перловый скрипт выдает padding в начале, а mp3info - в конце? или как?
перловый скрипт выдает padding в начале, а mp3info - в конце? или как?
Оба не выдают ничего. Зато они показывают много других полей, откуда я сделал вывод, что достать нужную информацию будет несложно.
lame --decode --verbose выдает padding в начале. Возможно, проще будет пропатчить его.
lame --decode --verbose выдает padding в начале. Возможно, проще будет пропатчить его.
с отступом вначале проблемы почти нет - lame сам при декодировании пропускает эти сэмплы
а вот что делать с добавленными в конец?
mp3info судя по всему читает всякие там тэги и этим ограничивается тех. инфа
а как называется перловый модуль?
кстати, а правильно я понимаю, что даже если буду резать raw как надо, то это не поможет?
т.е. если у меня будет 1152, он мне добавит еще 288
если будет 1152+288, он добавит еще 288*3, чтобы делилось на 1152?
проверить не могу, т.к. не знаю как посчитать длину sample у raw-файла и те же ли это сэмплы в mp3?
вообще не понимаю, какой смысл в этом сдвиге (п.1)... все сэмплы одинаковы по сути
а вот что делать с добавленными в конец?
mp3info судя по всему читает всякие там тэги и этим ограничивается тех. инфа
а как называется перловый модуль?
кстати, а правильно я понимаю, что даже если буду резать raw как надо, то это не поможет?
3. Why does LAME add silence to the end of each song?
Extra padding at the end of a file can be caused by a couple of things:
1. Because the MDCT's are overlapped, it looks something like this:
<--576 MDCT coefficients--><--576 MDCT coefficients--><--576 MDCT coefficients-->
<-- 576 samples PCM output --><-- 576 samples PCM output -->
So no matter where you truncate your MP3 file, the last 288 samples of
that granule will not be decoded. So LAME appends 288 samples of
padding to the input file to guarantee all input samples will be
decoded.
2. If the number of samples is not an exact multiple of 1152,
then last frame of data is padded with 0's so that it has 1152 samples.
Before lame3.56, we just added a few extra frames to make sure all
internal buffers would be flushed. In lame3.56, we tried to pad
with the exact minimum number of samples needed. And in lame3.80,
we finally fixed the bitstream flushing so that the final mp3
frame is properly padded with ancillary data.
т.е. если у меня будет 1152, он мне добавит еще 288
если будет 1152+288, он добавит еще 288*3, чтобы делилось на 1152?
проверить не могу, т.к. не знаю как посчитать длину sample у raw-файла и те же ли это сэмплы в mp3?
вообще не понимаю, какой смысл в этом сдвиге (п.1)... все сэмплы одинаковы по сути
еще есть такая идея:
1. я знаю, какой длины был raw
2. я знаю padding в начале
=> могу декодировать, отрезать кусок от начала, а потом взять нужное мне кол-во байт с начала
как думаете, прокатит?
конечно, это walkaround, т.к. п.1 не всегда известен в общем случае
1. я знаю, какой длины был raw
2. я знаю padding в начале
=> могу декодировать, отрезать кусок от начала, а потом взять нужное мне кол-во байт с начала
как думаете, прокатит?
конечно, это walkaround, т.к. п.1 не всегда известен в общем случае
lame --decode --verbose выдает padding в начале.оказывается, что фигню он выдает, а не padding
короче, закодировал файл длиной 115200 байт, сэмпл - 4 байта
$ lame --decode --verbose w.mp3
input: w.mp3 (44.1 kHz, 2 channels, MPEG-1 Layer III)
output: w.mp3.wav (16 bit, Microsoft WAVE)
skipping initial 1105 samples (encoder+decoder delay)
Frame# 27/27 128 kbps
открываю в audacity (***edit)
визуально 2250 сэмплов в начале и 60 сэмплов в конце
checksum: 115200/4 + 2250 + 60 ~= 31104 - столько сэмплов в mp3
а на глаз определять тишину - это не дело
Оставить комментарий
a10063
был у меня raw-файлразбил я его на 5 файлов и закодировал в mp3 отдельно
возможно ли слить mp3-шки вместе, чтобы результат был как от кодирования целого raw-файла, т.е. без разрывов (gapless encoding)?
у lame есть опция --nogap, но я так и не понял, как ей воспользоваться