Как исправить ошибку спектра из-за иероглифов?

Список разделов foobar2000 Есть вопрос!

Описание: У вас проблемы с foobar2000 и вам необходима помощь? Спрашивайте здесь!
Правила раздела: Одна тема — один вопрос или группа связанных вопросов. Обязательно формируйте внятный заголовок, максимально отражающий суть. Подробно описывайте проблему. Не забывайте указать версию плеера, название сборки, по возможности добавить скриншоты проблемы.

Сообщение #1 iPhoneSasuke » 25.03.2018, 01:51

Привык уже по жиру двумя кнопками получать картинку со спектром частот, но иногда не срабатывает...
Закономерность такова — когда в названиях альбома, исполнителя и названия трека используются иероглифы.
Если в том же самом файле поправить теги, убрав иероглифы, то спектр рисуется как ни в чем ни бывало.
Но этот вариант неприемлем. Как исправить этот недочет?
Вложения
Скриншот 25-03-2018 005038.png
iPhoneSasuke M
Автор темы
Аватара
Репутация: 3
С нами: 9 лет 2 месяца

Сообщение #2 iPhoneSasuke » 25.03.2018, 15:47

Надеюсь, понятно, что речь идет о нарисовке спектра для раздач?
Вложения
spectrum.jpg
iPhoneSasuke M
Автор темы
Аватара
Репутация: 3
С нами: 9 лет 2 месяца

Сообщение #3 MC Web » 25.03.2018, 17:18

Альтернатива, я ей пользуюсь:

Изображение

Настройки Spek (Анализатор спектра)
MC Web
Репутация: 248
С нами: 10 лет 7 месяцев

Сообщение #4 iPhoneSasuke » 25.03.2018, 17:32

Не получается установить «внешние компоненты», т.к. в ходе моих махинаций в реестре (очевидно) не достает связки между .fb2l-component и самим плеером. Есть файл (можете сделать), чтоб кликом восстановить ассоциации? А то плеер опять переколхозить придется. Надо бы свой установочник уже мутить.
iPhoneSasuke M
Автор темы
Аватара
Репутация: 3
С нами: 9 лет 2 месяца

Сообщение #5 MC Web » 25.03.2018, 17:45

Файл *.fb2l-component - это ZIP архив. Распаковываете и копируете, если у вас старая версия плеера.
MC Web
Репутация: 248
С нами: 10 лет 7 месяцев

Сообщение #6 iPhoneSasuke » 25.03.2018, 17:49

MC Web
Я обновил плеер, сейчас 1.3.47. В общем, сохранил свою сборку, установил по новой плеер, скинул в него свою сборку. Теперь ассоциация компонентов работает. Так вот — где бы взять ключик, чтоб самому восстанавливать такую ассоциацию? Или как оно в фубаре реализовано...

Запустил прогу. Работает. Но 2 вопроса:
а) планируется ли улучшение дизайна? Спектр из моего скрина неиллюзорно доставляет больше.
б) можно вызвать функцию быстрее и удобнее? У меня над пространством над обложкой ПКМ жмешь и кликаешь на спектр.
Вложения
Скриншот 25-03-2018 164945.png
iPhoneSasuke M
Автор темы
Аватара
Репутация: 3
С нами: 9 лет 2 месяца

Сообщение #7 MC Web » 25.03.2018, 18:39

1. Если речь про Spek, то как есть. Насчет того что больше, не совсем понял. Если про количество отображаемых на картинке каналов, то тут один - во втором нет смысла, практически идентичны. Если про размер - растягивайте как угодно.
2. Для этого назначить Клавиши быстрого вызова, либо прописывайте для кнопки Спектр команду запуска данной проги, по аналогии назначения Клавиши быстрого вызова (в контекстном меню).
MC Web
Репутация: 248
С нами: 10 лет 7 месяцев

Сообщение #8 iPhoneSasuke » 15.11.2019, 19:47

Товарищи, подскажите, как заставить SOX убирать temp файлы после снятия файла спектра?

Скрипт в плеере:
Код: Выделить всё
}
function spectrum(){
   var g_focus_metadb = fb.GetFocusItem();
   if(g_focus_metadb!=null){
      var subsong=fb.TitleFormat("%subsong%").EvalWithMetadb(g_focus_metadb);
      if(subsong==0){
         var workdir = fb.FoobarPath+"\spectrum\\";
         if(property_tmp_auto) var tmpdir = workdir;
            else var tmpdir = property_tmp_dir;
         var batname = tmpdir+"spectrum.bat";
         var filename = fb.TitleFormat("%path%").EvalWithMetadb(g_focus_metadb);
         var lenght = " ("+fb.TitleFormat("%length%=%length_seconds%").EvalWithMetadb(g_focus_metadb)+")";
         
var fso = new ActiveXObject("Scripting.FileSystemObject");
if (fso.fileexists(batname)==true) var ts = fso.OpenTextFile(batname, 2);
else var ts = fso.CreateTextFile(batname, 1);
ts.WriteLine('@echo off');
ts.WriteLine('"'+workdir+'ffmpeg.exe" -y -i '+shortname(filename)+' "'+tmpdir+'spectrum.wav"');
ts.WriteLine('"'+workdir+'sox.exe" "'+tmpdir+'spectrum.wav" -n spectrogram -x 739 -Y 568 -w Hann -S 0 -c "Generated with SOX in foobar2000 by Alex Realist" -o "'+tmpdir+'spectrum_tmp.png"');
ts.WriteLine('copy "'+tmpdir+'spectrum_tmp.png" "'+tmpdir+'spectrum.png"');
ts.WriteLine('"'+tmpdir+'spectrum.png"');
ts.WriteLine('exit');
ts.Close();
         
         var WshShell = new ActiveXObject("WScript.Shell");
         WshShell.run('cmd /c start "spectrum.bat" /min cmd /c "'+batname+'"');
      }
      else fb.ShowPopupMessage("Spectrum for multiple tracks within single physical file is unreleased in this version.","Information");
   }
}
function shortname(filespec){
   var fso2 = new ActiveXObject("Scripting.FileSystemObject");
   return(fso2.GetFile(filespec).ShortPath);
}

Батник:
Код: Выделить всё
@echo off
"C:\Program Files (x86)\foobar2000\spectrum\ffmpeg.exe" -y -i I:\_____V~1\2019-1~1.AAC "C:\Program Files (x86)\foobar2000\spectrum\spectrum.wav"
"C:\Program Files (x86)\foobar2000\spectrum\sox.exe" "C:\Program Files (x86)\foobar2000\spectrum\spectrum.wav" -n spectrogram -x 739 -Y 568 -w Hann -S 0 -c "Generated with SOX in foobar2000 by Alex Realist" -o "C:\Program Files (x86)\foobar2000\spectrum\spectrum_tmp.png"
copy "C:\Program Files (x86)\foobar2000\spectrum\spectrum_tmp.png" "C:\Program Files (x86)\foobar2000\spectrum\spectrum.png"
"C:\Program Files (x86)\foobar2000\spectrum\spectrum.png"
exit
iPhoneSasuke M
Автор темы
Аватара
Репутация: 3
С нами: 9 лет 2 месяца

Сообщение #9 Azaza » 15.11.2019, 20:22

Ну так в батник дописать их удаление стандартной командой del
del "C:\Program Files (x86)\foobar2000\spectrum\spectrum.wav"
del "C:\Program Files (x86)\foobar2000\spectrum\spectrum_tmp.png"
Azaza M
Аватара
Репутация: 393
С нами: 7 лет 6 месяцев

Сообщение #10 iPhoneSasuke » 15.11.2019, 20:37

Azaza:del "C:\Program Files (x86)\foobar2000\spectrum\spectrum.wav"
del "C:\Program Files (x86)\foobar2000\spectrum\spectrum_tmp.png"
Если вписать в батник, то плеер его переписывает в ходе использования (убирает те строчки) и временные файлы не стираются.
Если в папке есть темп файлы и запустить отредактированный батник, он их стирает.
При запуске через плеер опять батник редактируется и ничего не удаляет.

Разобрался. Надо писать в скрипте плеера. Добавил по аналогии:
Код: Выделить всё
ts.WriteLine('del "'+tmpdir+'spectrum_tmp.png" "'+tmpdir+'spectrum.wav"');
iPhoneSasuke M
Автор темы
Аватара
Репутация: 3
С нами: 9 лет 2 месяца

Сообщение #11 Azaza » 15.11.2019, 20:47

Упс, да. Значит дописать в скрипт. Строки вставить перед строкой ts.WriteLine('exit');
Код: Выделить всё
ts.WriteLine ('del "'+tmpdir+'spectrum_tmp.png")
ts.WriteLine ('del "'+tmpdir+'spectrum.wav")

Долго писал :biggrin:

То, как Вы реализовали простую генерацию спектрограмм - яркий пример оверинжиниринга.
Azaza M
Аватара
Репутация: 393
С нами: 7 лет 6 месяцев

Сообщение #12 iPhoneSasuke » 15.11.2019, 21:08

Azaza:То, как Вы реализовали простую генерацию спектрограмм - яркий пример оверинжиниринга.
Я НЕ МОГ это реализовать сам)) Это Alex Realist в свое время замутил. Мне нравится. Никуда убегать не надо, чтобы спектрограмму получить.
Теперь оно еще и мусора за собой не оставляет.
iPhoneSasuke M
Автор темы
Аватара
Репутация: 3
С нами: 9 лет 2 месяца


Вернуться в Есть вопрос!