LINUX.ORG.RU

shntool перестал распознавать 24-битные файлы

 , ,


0

3

Доброго времени суток.

Собственно, сабж.

Пару дней назад столкнулся с тем, что shtool, которым пользовался для распила на треки 24-битных аудиофайлов, вдруг перестал это делать с ошибкой:

shninfo: warning: unsupported format 0xfffe (Unknown) while processing file: <имя файла> 

Вместо shninfo - любая из утилит пакета (shninfo, shnsplit, shnlen и т.д.).

<имя файла> - 24-битный wav или flac.

Сам файл не поврежден, другие программы (audacity, mpv) его открывают и воспроизводят. Пакет flac установлен. flac -t ошибок не выдает. Попытка распаковать файл и сжать снова к успеху не привела.

16-битные файлы обрабатываются на ура.

Гуглинг не помог. Или я плохо формулирую запрос.

Система Debian testing, обновляется регулярно, но сам пакет shntools в дебиане последний раз обновлялся несколько лет назад, так что возможно проблема не в нем. Насколько я понимаю для обработки wav используется внутренний функционал, для flac и прочего - внешние программы (но см. выше - пакет flac установлен и функционирует). Более никаких зависимостей у пакета shntool вроде бы нет и ломаться нечему, но тем не менее сломалось.

Вопросы традиционные: кто виноват и что делать.

Сам файл не поврежден, другие программы (audacity, mpv) его открывают и воспроизводят.

Это не даёт полной гарантии, что файл не повреждён. Подойди с другой стороны, проверь, как работает shntool на других 24-битных файлах. Лучше всего скачай свежий откуда-нибудь.

Ну или выложи свой файл, на котором shntool спотыкается, куда-нибудь, а я его скачаю и посмотрю.

aeralahthu ()
Ответ на: комментарий от aeralahthu

проверь, как работает shntool на других 24-битных файлах

Проверил больше десяти разных flac'ов и wav'ов разного происхождения. Shntool спотыкается на всех, всякие mpv, audacity и т.д. открывают, редактируют, воспроизводят, сохраняют...

flac -t выдает ОК.

McSeam ()

Re: проверь, как работает shntool на других 24-битных файлах

Проверил

Ок, верю, что файлы не при чём. Но тогда даже не знаю, что ещё тебе посоветовать, извини. Могу только выразить моральную поддержку, поскольку сам активный пользователь shntool.

Попробуй, на всякий случай, глянуть, от каких динамических библиотек зависит shntool:

objdump -p `which shntool` | grep NEEDED

У меня он, вообще-то, только от libc зависит. По идее, у тебя должно быть так же, но мало ли…

aeralahthu ()
Ответ на: комментарий от aeralahthu

или выложи свой файл, на котором shntool спотыкается

Вообще, он спотыкается на любом 24-битном файле, но

https://yadi.sk/d/NUFErjecWbeBEQ - это сам винил-рип https://yadi.sk/d/5_f5F6NT9cHF_w - это cue к нему

На самом деле всё ещё интереснее. Я нашел спецификацию формата wav, там черным по белому прописано, что 0xfffe - это никакой не unknown, а самый что ни на есть определенный формат, называемый WAVE_FORMAT_EXTENSIBLE и который, судя по документации, должно использовать всегда, когда в wav-файле больше 16 бит, или больше 2-х каналов, или присутствуют еще некоторые описанные условия. Так что этот указатель на формат совершенно правильный и помещен в файл создавшей его программой абсолютно правильно, но почему shntool на нем спотыкается - загадка.

Больше того, если, например, в Audacity создать звуковой файл (или открыть существующий) и экспортировать его как 24-битный wav, то Audacity почему-то лепит ему в заголовок формат не 0xfffe, а 0x0001 (Microsoft PCM, что вообще-то неправильно) и тогда shntool с этим файлом нормально работает.

Полная фигня....

McSeam ()
Ответ на: комментарий от aeralahthu

выложи свой файл

На всякий случай:

вместо кривого винил-рипа сомнительного происхождения, да к тому же еще здоровенного...

https://yadi.sk/d/j7mCZehClZ6wrA - небольшой 24-битный flac, скачанный с bandcamp'а. Полный официал, файл не левый, всё чики-пуки...

Что скажет про него ваш shninfo ?

McSeam ()
Ответ на: выложи свой файл от McSeam

Re: выложи свой файл

Что скажет про него ваш shninfo ?

Работает без ошибок:

$ shninfo 10.\ Double\ Cups\ \(featuring\ Stephen\ _Finesse_\ Moore\).flac
-------------------------------------------------------------------------------
File name:                    10. Double Cups (featuring Stephen _Finesse_ Moore).flac
Handled by:                   flac format module
Length:                       4:00.000
WAVE format:                  0x0001 (Microsoft PCM)
Channels:                     2
Bits/sample:                  24
Samples/sec:                  44100
Average bytes/sec:            264600
Rate (calculated):            264600
Block align:                  6
Header size:                  44 bytes
Data size:                    63504000 bytes
Chunk size:                   63504036 bytes
Total size (chunk size + 8):  63504044 bytes
Actual file size:             53745577
File is compressed:           yes
Compression ratio:            0.8463
CD-quality properties:
  CD quality:                 no
  Cut on sector boundary:     n/a
  Sector misalignment:        n/a
  Long enough to be burned:   n/a
WAVE properties:
  Non-canonical header:       no
  Extra RIFF chunks:          no
Possible problems:
  File contains ID3v2 tag:    no
  Data chunk block-aligned:   yes
  Inconsistent header:        no
  File probably truncated:    unknown
  Junk appended to file:      unknown
  Odd data size has pad byte: n/a

Не поленился скачать также и «здоровенный кривой винил-рип сомнительного происхождения»:

$ shninfo Argo\ -\ 1981-Svet.flac
-------------------------------------------------------------------------------
File name:                    Argo - 1981-Svet.flac
Handled by:                   flac format module
Length:                       38:32.400
WAVE format:                  0x0001 (Microsoft PCM)
Channels:                     2
Bits/sample:                  24
Samples/sec:                  96000
Average bytes/sec:            576000
Rate (calculated):            576000
Block align:                  6
Header size:                  44 bytes
Data size:                    1331942400 bytes
Chunk size:                   1331942436 bytes
Total size (chunk size + 8):  1331942444 bytes
Actual file size:             880395620
File is compressed:           yes
Compression ratio:            0.6610
CD-quality properties:
  CD quality:                 no
  Cut on sector boundary:     n/a
  Sector misalignment:        n/a
  Long enough to be burned:   n/a
WAVE properties:
  Non-canonical header:       no
  Extra RIFF chunks:          no
Possible problems:
  File contains ID3v2 tag:    no
  Data chunk block-aligned:   yes
  Inconsistent header:        no
  File probably truncated:    unknown
  Junk appended to file:      unknown
  Odd data size has pad byte: n/a

Что интересно, в обоих случаях у меня shninfo говорит: WAVE format: 0x0001 (Microsoft PCM).

aeralahthu ()

Re: или выложи свой файл, на котором shntool спотыкается

Где твои патчи?

Какие ещё патчи?

У ТСа внезапно перестал работать shntool, который до этого прекрасно работал. Причём сам shntool уже лет 10 не обновлялся. В довершение картины, у меня тот же shntool 10-летней давности по-прежнему продолжает прекрасно работать.

А ты о чём?

aeralahthu ()

При чём тут эта приблуда?

Название топика прочитай.

я говорю о audacity

И как ты предлагаешь угадывать, патчи к чему в треде о shntool ты пришёл требовать?

aeralahthu ()
Ответ на: WAVE format: 0x0001 (Microsoft PCM). от McSeam

ещё идеи

Можно попробовать собрать shntool вручную. Он легко должен собираться, зависимостей у него никаких. Для сборки нужен только компилятор с libc, да make.

В Debian testing на него наложено несколько патчей. Но без этих патчей, насколько я их посмотрел, shntool вполне должен нормально собираться и работать.

Если какие вопросы по процессу сборки, могу подсказать. (Там стандартное ./configure && make и на выходе получается один бинарник.)

aeralahthu ()
Ответ на: комментарий от aeralahthu

Ладно, у меня тоже не работает аналогичным образом. Если в wav файле спродуцированном flac поменять 2 байта (0xfffe на 0x0001), начинает работать. Предлагаю пропатчить shntool, чтобы он воспринимал 0xfffe, как 0x0001. И отправьте уже патчи в audacity, это не дело.

anonymous ()
Ответ на: комментарий от anonymous

Кстати вот это всё что есть в shntool, как он мог работать я не знаю и 0xfffe нигде не вижу. Патчи потерялись?

``` #define WAVE_FORMAT_UNKNOWN (0x0000) #define WAVE_FORMAT_PCM (0x0001) #define WAVE_FORMAT_ADPCM (0x0002) #define WAVE_FORMAT_IEEE_FLOAT (0x0003) #define WAVE_FORMAT_ALAW (0x0006) #define WAVE_FORMAT_MULAW (0x0007) #define WAVE_FORMAT_OKI_ADPCM (0x0010) #define WAVE_FORMAT_IMA_ADPCM (0x0011) #define WAVE_FORMAT_DIGISTD (0x0015) #define WAVE_FORMAT_DIGIFIX (0x0016) #define WAVE_FORMAT_DOLBY_AC2 (0x0030) #define WAVE_FORMAT_GSM610 (0x0031) #define WAVE_FORMAT_ROCKWELL_ADPCM (0x003b) #define WAVE_FORMAT_ROCKWELL_DIGITALK (0x003c) #define WAVE_FORMAT_G721_ADPCM (0x0040) #define WAVE_FORMAT_G728_CELP (0x0041) #define WAVE_FORMAT_MPEG (0x0050) #define WAVE_FORMAT_MPEGLAYER3 (0x0055) #define WAVE_FORMAT_G726_ADPCM (0x0064) #define WAVE_FORMAT_G722_ADPCM (0x0065) ```

anonymous ()
Ответ на: комментарий от anonymous

Кстати, вот это всё что есть в shntool, как он мог работать я не знаю и 0xfffe нигде не вижу. Патчи потерялись?

#define WAVE_FORMAT_UNKNOWN             (0x0000)
#define WAVE_FORMAT_PCM                 (0x0001)
#define WAVE_FORMAT_ADPCM               (0x0002)
#define WAVE_FORMAT_IEEE_FLOAT          (0x0003)
#define WAVE_FORMAT_ALAW                (0x0006)
#define WAVE_FORMAT_MULAW               (0x0007)
#define WAVE_FORMAT_OKI_ADPCM           (0x0010)
#define WAVE_FORMAT_IMA_ADPCM           (0x0011)
#define WAVE_FORMAT_DIGISTD             (0x0015)
#define WAVE_FORMAT_DIGIFIX             (0x0016)
#define WAVE_FORMAT_DOLBY_AC2           (0x0030)
#define WAVE_FORMAT_GSM610              (0x0031)
#define WAVE_FORMAT_ROCKWELL_ADPCM      (0x003b)
#define WAVE_FORMAT_ROCKWELL_DIGITALK   (0x003c)
#define WAVE_FORMAT_G721_ADPCM          (0x0040)
#define WAVE_FORMAT_G728_CELP           (0x0041)
#define WAVE_FORMAT_MPEG                (0x0050)
#define WAVE_FORMAT_MPEGLAYER3          (0x0055)
#define WAVE_FORMAT_G726_ADPCM          (0x0064)
#define WAVE_FORMAT_G722_ADPCM          (0x0065)

Сорян за прошлый псто, пора бы уже автоматом угадывать разметку. Только и могут что ёлочками комменты поганить.

anonymous ()
Ответ на: комментарий от anonymous

Если чо вот для генты, особо не смотрел, но вроде норм пашет:

homepc ~ # cat /etc/portage/patches/media-sound/shntool/waveextended.patch
--- a/src/core_wave.c 2009-03-11 20:18:01.000000000 +0300
+++ b/src/core_wave.c 2019-09-18 01:24:17.746709086 +0300
@@ -169,6 +169,8 @@
   switch (info->wave_format) {
     case WAVE_FORMAT_PCM:
       break;
+    case (0xfffe):
+      break;
     default:
       st_warning("unsupported format 0x%04x (%s) while processing file: [%s]",
             info->wave_format,format_to_str(info->wave_format),info->filename);
homepc ~ # echo -e '\nsrc_prepare() {\n\tepatch /etc/portage/patches/media-sound/shntool/waveextended.patch\n}' >> /var/db/repos/gentoo/media-sound/shntool/shntool-3.0.10-r1.ebuild
homepc ~ # ebuild /var/db/repos/gentoo/media-sound/shntool/shntool-3.0.10-r1.ebuild digest
homepc ~ # emerge media-sound/shntool

И больше не обновляйте. EAPI=4 у него и мне лень нормальный ебилд писать. Вроде работает, на флаках тоже.

anonymous ()
Ответ на: комментарий от anonymous

Кстати, вот это всё что есть в shntool, как он мог работать я не знаю и 0xfffe нигде не вижу.

Я, кажется, понял, как он мог работать (и до сих пор работает у меня). Похоже, дело во флаке. У меня всё ещё flac-1.3.2, а у вас с топикстартером, я подозреваю, flac-1.3.3. А флак до 1.3.3 для 24bit при распаковке в WAV писал WAVE_FORMAT_PCM, а не WAVE_FORMAT_EXTENSIBLE. Но после вот этого коммита всё изменилось.

Так что да, спасибо за патч. Вероятно, после обновления flac’а, мне тоже придётся shntool патчить.

aeralahthu ()
Ответ на: комментарий от aeralahthu

проблема во флаке

Проблема во флаке, между версиями 1.3.2 и 1.3.3 (у меня последняя) что-то поменялось в формате вывода.

Во-первых, параллельно у меня тут перестал работать flacon и после переписки с разработчиками выяснилось то, что написано в первом предложении :)

Во-вторых, (кстати, с этого по большому счёту надо было начинать, так что сам дурак) я скачал 24-битный APE и с ним, и с полученными из него wav'ами shntool прекрасно работает.

$ shninfo '/L12BONG25.ape' 
-------------------------------------------------------------------------------
File name:                    /L12BONG25.ape
Handled by:                   ape format module
Length:                       28:08.604
WAVE format:                  0x0001 (Microsoft PCM)
Channels:                     2
Bits/sample:                  24
Samples/sec:                  96000
Average bytes/sec:            576000
Rate (calculated):            576000
Block align:                  6
Header size:                  44 bytes
Data size:                    972635826 bytes
Chunk size:                   972635862 bytes
Total size (chunk size + 8):  972635870 bytes
Actual file size:             562676816
File is compressed:           yes
Compression ratio:            0.5785
CD-quality properties:
  CD quality:                 no
  Cut on sector boundary:     n/a
  Sector misalignment:        n/a
  Long enough to be burned:   n/a
WAVE properties:
  Non-canonical header:       no
  Extra RIFF chunks:          no
Possible problems:
  File contains ID3v2 tag:    no
  Data chunk block-aligned:   yes
  Inconsistent header:        no
  File probably truncated:    unknown
  Junk appended to file:      unknown
  Odd data size has pad byte: n/a
$ shninfo '/04 - Barrel Of A Gun (United Mix).wav' 
-------------------------------------------------------------------------------
File name:                    /04 - Barrel Of A Gun (United Mix).wav
Handled by:                   wav format module
Length:                       6:33.604
WAVE format:                  0x0001 (Microsoft PCM)
Channels:                     2
Bits/sample:                  24
Samples/sec:                  96000
Average bytes/sec:            576000
Rate (calculated):            576000
Block align:                  6
Header size:                  44 bytes
Data size:                    226715826 bytes
Chunk size:                   226715862 bytes
Total size (chunk size + 8):  226715870 bytes
Actual file size:             226715870
File is compressed:           no
Compression ratio:            1.0000
CD-quality properties:
  CD quality:                 no
  Cut on sector boundary:     n/a
  Sector misalignment:        n/a
  Long enough to be burned:   n/a
WAVE properties:
  Non-canonical header:       no
  Extra RIFF chunks:          no
Possible problems:
  File contains ID3v2 tag:    no
  Data chunk block-aligned:   yes
  Inconsistent header:        no
  File probably truncated:    no
  Junk appended to file:      no
  Odd data size has pad byte: n/a
McSeam ()
Ответ на: комментарий от anonymous

Поздравляю пользователей генты... Осталось понять, что делать пользователям дебиана. Проще всего, видимо, забить на shntool, который никто уже не будет ремонтировать, и резать flacon'ом, автор которого обещал ошибку исправить.

PS Если кто не любит gui - в принципе ffmpeg наверное можно заставить резать файл по cue....

McSeam ()
Ответ на: проблема во флаке от McSeam

Re: проблема во флаке

Проблема во флаке

Ну, проблема таки не во флаке, а, как нам любезно продемонстрировал требовательный анон, в shntool. Просто flac при переходе с версии 1.3.2 на 1.3.3 стал более соответствовать спецификации WAV. Вот проблемы shntool и выявились.

что-то поменялось в формате вывода.

Не «что-то», а совершенно конкретно, flac стал при декодировании 24-битных файлов писать в полученный WAV тип WAVE_FORMAT_EXTENSIBLE, т.е. 0xfffe, а не WAVE_FORMAT_PCM (0x0001), как раньше. Согласно спецификации WAV. Я же давал там ссылку на коммит.

я скачал 24-битный APE и с ним, и с полученными из него wav’ами shntool прекрасно работает

А mac, которым shntool распаковывает APE, видимо всё ещё по старинке пишет в полученный WAV WAVE_FORMAT_PCM.

Прошу прощения у собравшихся, если всем всё это и так понятно. Просто я зануда люблю всё раскладывать по полочкам.

aeralahthu ()
Ответ на: комментарий от McSeam

забить на shntool, который никто уже не будет ремонтировать

Ну почему же. Мейнтейнеры дебиана же его ремонтируют иногда, судя по наличию там патчей. Могут и ещё один патчик накинуть. Напиши им багрепорт.

Если кто не любит gui - в принципе ffmpeg наверное можно заставить резать файл по cue….

Я не люблю gui. Но flac и сам может резать. Если в него запихнуть cue, то даже прямо по cue, хоть и не так удобно, как shnsplit. Но, в любом случае, можно скриптик написать, который будет брать из cue-файла временные отметки (cuebreakpoints из cuetools это умеет) и самим flac’ом нарезать по ним.

Я как-то сталкивался с какими-то ещё проблемами у shntool и скриптик такой уже собирался написать, но руки не дошли.

aeralahthu ()
Ответ на: Re: проблема во флаке от aeralahthu

Ну да, не проблема, а причина.

flac стал лучше, а мир оказался к этому не готов :)

Но вообще - офигеть. Программа, которой уже сильно больше десяти лет, не соответствует базовым спецификациям стандарта данных, для работы с которыми она предназначена. Страшно подумать, что там еще скрыто от глаз пользователей.

Багрепорт в shntool я, наверное, все-таки напишу. Проблема в том, что многие еще пользуются старой версией flac'а (в дебиан stable пока еще 1.3.2) и, видимо, надо будет делать проверку версии. А там, глядишь, и разработчики APE проснутся.... В-общем, скучно не будет :)

McSeam ()
Ответ на: комментарий от McSeam

Программа, которой уже сильно больше десяти лет, не соответствует базовым спецификациям стандарта данных, для работы с которыми она предназначена.

Тут надо уточнять по времени. Вполне возможно, что когда shntool активно развивался (т.е. больше 10 лет назад), 0xfffe ещё не было в спецификации.

Или вот ещё что. Может быть, shntool в принципе не предназначался для работы с 24-битными wav’ами. Мне память смутно подсказывает, что там ещё какие-то проблемы вроде бы были.

А вообще, многие, мне кажется, не в курсе, что shntool изначально писался, в первую очередь, для работы с почти не используемым сейчас форматом Shorten.

Багрепорт в shntool я, наверное, все-таки напишу.

Сдаётся мне, там все умерли. Даже сайты, с которых раньше скачивался shntool, уже не работают.

Проблема в том, что многие еще пользуются старой версией flac’а (в дебиан stable пока еще 1.3.2) и, видимо, надо будет делать проверку версии.

flac-1.3.2 будет прекрасно работать с патченным shntool, там нечему ломаться. Или ты под «проверкой версий» что-то другое имеешь в виду?

aeralahthu ()
Ответ на: Re: проблема во флаке от aeralahthu

Фикс

Столкнулся сегодня с этой проблемой, может еще актуально будет кому. https://github.com/max619/shntool/tree/fix/flac_format_value_fffe

Сюда запушил код обновленный, можете собрать из исходников и будет робить с 24 битными файлами

max619 ()

0x0001 Microsoft PCM нормально работает

Да, некоторым старым прогам нужен формат WAV, а не WAVEX. Я и на оффтопике такое встречал. К примеру, Foobar создает в старом формате, по сравнению с ffmpeg - это доставляет меньше проблем. А стандарты когда кого волновали?

anonymous ()