AIMP Forum

AIMP for PC => Вопросы / Questions => Topic started by: foppa on February 14, 2025, 21:51:37

Title: ФАЙЛ ПРОПУСКАЕТСЯ ДО ЗАВЕРШЕНИЯ ПЕСНИ
Post by: foppa on February 14, 2025, 21:51:37
Привет, извините, если русский плохой, так как я не говорю по-русски и мне пришлось воспользоваться переводчиком. У меня есть альбом (Life Is But A Dream), который я слушал. Длина файлов нормальная в других приложениях, но AIMP. Например, "Mattel" - это 5:30, но в приложении он указан как 5:06 и будет воспроизводиться только до 5:06. Как это исправить?
Title: Re: ФАЙЛ ПРОПУСКАЕТСЯ ДО ЗАВЕРШЕНИЯ ПЕСНИ
Post by: Artem on February 14, 2025, 23:53:28
Can you share this track for analysis?
Title: Re: ФАЙЛ ПРОПУСКАЕТСЯ ДО ЗАВЕРШЕНИЯ ПЕСНИ
Post by: foppa on February 15, 2025, 17:34:35
Can you share this track for analysis?

https://www.dropbox.com/scl/fi/l4pxmhpap3mxyrvh10l8v/02.-Mattel.mp3?rlkey=gd1eyts8b0uexvob7iwdyk8rk&st=ghn8bsd4&dl=0
Title: Re: ФАЙЛ ПРОПУСКАЕТСЯ ДО ЗАВЕРШЕНИЯ ПЕСНИ
Post by: Artem on February 17, 2025, 11:40:12
It seems the file is corrupted:

Code: [Select]
Last frame truncated.
Frame 12650 (bytes 14216034-13221161) was -994873 bytes long (expected 1045 bytes)

So, AIMP's MP3 decoder skips the last frame.
Title: Re: ФАЙЛ ПРОПУСКАЕТСЯ ДО ЗАВЕРШЕНИЯ ПЕСНИ
Post by: CkopoxoD on February 20, 2025, 20:43:40
It seems the file is corrupted:

Code: [Select]
Last frame truncated.
Frame 12650 (bytes 14216034-13221161) was -994873 bytes long (expected 1045 bytes)

So, AIMP's MP3 decoder skips the last frame.

Меня заинтересовал этот случай огромным отрицательным значением длины, поэтому проанализировал файл вручную. Если в чём-то ошибся, то поправьте, пожалуйста.
По указанному смещению 14216034 + 1045 = 14217079 (0x00D8EF77) находится сигнатура APETAGEX, а аудиоданные перед ней не имеют признаков повреждения.
Согласно спецификации (https://wiki.hydrogenaud.io/index.php?title=APEv2_specification):
Code: [Select]
Preamble 41 50 45 54 41 47 45 58 APETAGEX
Version D0 07 00 00              0x000007D0 = 2000 (2.000)
Tag Size 21 38 01 00              0x00013821 = 79905 bytes
Item Count 16 00 00 00              0x00000016 = 22 items
Tags Flags 00 00 00 A0              0xA0000000 = 0b10100000000000000000000000000000
Reserved 00 00 00 00 00 00 00 00
Флаг 0b1010... указывает, что это хедер (бит 29 установлен = This is the header, not the footer).
Этой правкой (https://wiki.hydrogenaud.io/index.php?title=Ape_Tags_Flags&diff=27567&oldid=13445) в вики было инвертировано значение бита 30. Я не знаю, почему. Первоисточник (http://www.personal.uni-jena.de/~pfk/mpp/sv8/apetag.html) недоступен, но есть зеркало (https://hydrogenaud.io/musepack/klemm/www.personal.uni-jena.de/~pfk/mpp/sv8/apetagflags.html).
Сейчас вики противоречит ему в этой части. Ссылаясь на эту статью, разработчики могут реализовать противоположную логику флага наличия футера.
После хедера должно быть 79905 байтов данных. Но там ещё 1 сигнатура APETAGEX:
Code: [Select]
Preamble 41 50 45 54 41 47 45 58 APETAGEX
Version D0 07 00 00              0x000007D0 = 2000 (2.000)
Tag Size 6E 32 0F 00              0x000F326E = 995950 bytes
Item Count 16 00 00 00              0x00000016 = 22 items
Tags Flags 00 00 00 A0              0xA0000000 = 0b10100000000000000000000000000000
Reserved 00 00 00 00 00 00 00 00
Судя по флагу, это снова хедер. И опять после него нет данных APEv2, а начинается ID3v1 (сигнатура TAG).

В данном файле очевидно кривые теги APEv2. Они пустые, но указана большая длина. По идее, их нужно читать на основе флага: от хедера - вперёд, от футера - отступив назад. Причём длина данных APEv2 не включает длину хедера, но включает длину футера, т.е.:
- если мы нашли футер, то начало данных будет на <Tag Size> назад от конца футера
- если мы нашли хедер, то конец данных будет на <Tag Size> вперёд от конца хедера
А если из этого не выходит ничего хорошего, то такие теги стоит игнорировать.

Но происходит нечто совсем другое:
- вторая APETAGEX начинается по смещению 14217111 (0x00D8EF97)
- если из него вычесть 995950, то и получим упомянутый выше якобы конец фрейма 13221161
Т.е. происходит вычитание <Tag Size> от начала хедера. Там до конца файла меньше байтов, чем указана длина, тег очевидно испорчен, почему вообще предпринимается попытка отступить в обратную сторону, да ещё неправильно? Это декодер так работает с APE-тегами, которых не должно быть в mp3?
Title: Re: ФАЙЛ ПРОПУСКАЕТСЯ ДО ЗАВЕРШЕНИЯ ПЕСНИ
Post by: MCW on February 21, 2025, 14:53:20
It seems the file is corrupted:

Код: [Выделить]
Last frame truncated.
Frame 12650 (bytes 14216034-13221161) was -994873 bytes long (expected 1045 bytes)

So, AIMP's MP3 decoder skips the last frame.
Согласен и разные программы указывают на ошибки, но проверил исходный файл на разных проигрывателях (включая VUPlayer от 2007) - играют все 5:30.

Это декодер так работает с APE-тегами, которых не должно быть в mp3?
После удаления APE-тегов, разные проигрыватели воспроизводят только 5:05.

Видимо декодер AIMP более негативно относится к таким ошибкам.
Title: Re: ФАЙЛ ПРОПУСКАЕТСЯ ДО ЗАВЕРШЕНИЯ ПЕСНИ
Post by: Artem on February 21, 2025, 14:54:52
Видимо декодер AIMP более негативно относится к таким ошибкам.

да
Title: Re: ФАЙЛ ПРОПУСКАЕТСЯ ДО ЗАВЕРШЕНИЯ ПЕСНИ
Post by: CkopoxoD on February 21, 2025, 16:22:47
После удаления APE-тегов, разные проигрыватели воспроизводят только 5:05.
Это смотря как удалять. Если откусить в hex-редакторе 2 выделенных на скриншоте APE-тега, то будет почти 5:31.
Title: Re: ФАЙЛ ПРОПУСКАЕТСЯ ДО ЗАВЕРШЕНИЯ ПЕСНИ
Post by: MCW on February 21, 2025, 19:02:58
Это смотря как удалять. Если откусить в hex-редакторе 2 выделенных на скриншоте APE-тега, то будет почти 5:31.
Как то странно ведёт себя декодер AIMP:

Title: Re: ФАЙЛ ПРОПУСКАЕТСЯ ДО ЗАВЕРШЕНИЯ ПЕСНИ
Post by: CkopoxoD on February 21, 2025, 19:41:16
AIMP теперь показывает 5:31, а воспроизводит 5:30
Это нормально, он всегда округляет в большую сторону. В QTE можно посмотреть более точно: 5:30.449
Title: Re: ФАЙЛ ПРОПУСКАЕТСЯ ДО ЗАВЕРШЕНИЯ ПЕСНИ
Post by: MCW on February 21, 2025, 19:58:38
В QTE можно посмотреть более точно: 5:30.449
(https://i124.fastpic.org/big/2025/0221/42/222744e3a6893be692c681705b5c2942.png)

(https://i124.fastpic.org/big/2025/0221/8d/5df84f5047af2baefd4f45d936b6ef8d.png)
Title: Re: ФАЙЛ ПРОПУСКАЕТСЯ ДО ЗАВЕРШЕНИЯ ПЕСНИ
Post by: Rarogoff on March 03, 2025, 00:04:34
Такая же проблема с дискографией Type O Negative на рутрекере, при добавлении в редакторе тегов текста песни, меняется размер файла в меньшую сторону, срезается в районе 5 секунд с каждой песни с измененными тегами. Пробовал и mp3tag - результат такой же, коррапт файлов при правке тегов. Способа починить не нашёл.
Title: Re: ФАЙЛ ПРОПУСКАЕТСЯ ДО ЗАВЕРШЕНИЯ ПЕСНИ
Post by: Artem on March 03, 2025, 07:59:33
Проблема скорее всего в кривопрописанном APEv2, единственный вариант - это вручную выстригать его из файлов
Title: Re: ФАЙЛ ПРОПУСКАЕТСЯ ДО ЗАВЕРШЕНИЯ ПЕСНИ
Post by: Rarog on March 03, 2025, 09:05:49
А какими инструментами это можно сделать?