foobar2000 v1.5.0

Список разделов foobar2000 Новости плеера

Описание: Новости мира foobar2000, включая обновления плеера и бета-версии.

Сообщение #1 VEG » 09.07.2019, 19:42

Вышла финальная версия foobar2000 v1.5.0! Предыдущая версия: foobar2000 v1.4.8.

  • New and improved Properties dialog, with the ability to manipulate attached pictures as well as scan and modify ReplayGain values.
  • Greatly improved Selection Properties performance for large track lists.
  • Various prompts (such as delete/recycle) now come with a “do not show this again” checkbox.
  • Restored pre-1.4 behavior of main-window-hidden/notification-icon-only status being remembered after foobar2000 restart.
  • Added logging of Media Library scanning errors - “show errors” button in Media Library Preferences.
  • Added Advanced Preferences option for flushing playback queue on manual track change (default: on).
  • Made “Open containing folder” command work with tracks in archives - opens folder containing the archive.
  • Added an option to preserve last-modified timestamps of tracks when updating tags.
  • Additional safeguards against corrupted configuration in case of a system crash while saving (FlushFileBuffers).
  • File Operations: delete/recycle prompt always says “Delete” rather than “Recycle”, since not every volume supports recycle action.
  • FFmpeg 3.4.6, now compiled with MS compiler, binary size reduced due to DLL runtime.
  • FLAC 1.3.3
  • Implemented reading of cue+bin audio CD images.
  • Implemented asynchronous drag&drop, for less stalls when dragging tracks from foobar2000 to another program.
  • Removed transacted filesystem support. There are no known benefits to it and even Microsoft documentation says not to use it.
  • Improved programming interfaces for External Tags and Skip Track components.
  • Made album art loading/resizing operations in Default User Interface asynchronous. Large pictures no longer make the app momentarily unresponsive.
  • Converter: Added Opus encoder selection for –music / –speech modes.
  • Converter: New list control in various dialogs. Column sizes are remembered.
  • Improved playback position reporting with Skip Silence and similar DSP effects.
  • Made possible to check for updates of components listed but not hosted on foobar2000.org.
  • Enabled embedded cuesheet support for MP3 files.
  • Made WavPack/DSD MD5 visible - using another field so Verifier doesn't try to verify it.

Скачать: http://www.foobar2000.org/old
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 273
С нами: 11 лет 10 месяцев


Сообщение #41 iPhoneSasuke » 12.11.2019, 02:45

Ребят, а что вообще вы пытаетесь улучшить? Вот у меня 1.4.8, и чем версия 1.5.0 в стабильном виде будет интереснее?

Мне вот например не хватает в Splitter Setting возможности искать текст (Ctrl+F).
Приходится в блокнот копировать скрипт и искать слова.

Может, имело бы смысл разблокировать интерфейс после нажатия кнопки Apply? Допустим, я подгоняю параметр кнопки Resize под себя, и мне каждый раз приходится жать Apply, закрывать окно, проверять результат, и если что-то не понравилось, опять заползать в скрипт, искать нужную строчку, короче круг ада. Пускай интерфейс будет заблокирован только пока есть несохраненные изменения. Это разумно.
P.S. После нажатия Apply можно было бы заодно добавить (+разблокировать) кнопку сворачивания окна скрипта в верхнем правом углу.
Чтобы не приходилось каждый раз уводить его от интерфейса для проверки изменений.

P.P.S. Есть прекрасный плагин Write Audio CD, который записывает Audio CD из созданного плейлиста, если он укладывается в 120 минут. Но есть у него недостаток: зависим от наличия Nero 8 на винде. Логично предположить, что когда-нибудь восьмая Неро перестанет поддерживаться операционкой (а на 9 и более новые плагин не реагирует). М.б. есть варианты универсальнее? И кстати, этот вариант работает только с относительно современными устройствами; если брать какой-нибудь винтажный сидюк, то он не понимает болванки (даже каноничные CD-R, а не мутные RW) писанные таким способом. Несколько раз так прогорал на прослушке акустики.
Вложения
Скриншот 12-11-2019 014000.png
iPhoneSasuke M
Аватара
Репутация: 3
С нами: 9 лет 2 месяца

Сообщение #42 VEG » 12.11.2019, 21:15

Beta 21

  • Fixed beta 20 crash bug regressions related to changing DSP settings.
  • Fixed resampler DSP crashing when asked to resample to 0 Hz.
  • File Operations: added pause.
  • File Operations: more consistent behaviors when cancelled while moving files.
  • File Operations: made file modification time etc transferred when copying files.
  • Fixed flashing current-item display in generic progress window.
  • Included new Visual Studio runtime libraries.
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 273
С нами: 11 лет 10 месяцев

Сообщение #43 BU1153Y3 » 14.11.2019, 00:20

Заметил одно ухудшение в работе плеера.
Когда регулируешь ползунок громкости ( Изображение ), в этот момент программа проглючивает, заметно если включены визуализации.
В прошлых версиях такого не было. :ill:
BU1153Y3 M
Аватара
Репутация: 1
С нами: 6 лет 7 месяцев

Сообщение #44 seriousstas » 14.11.2019, 21:34

BU1153Y3:Заметил одно ухудшение в работе плеера.
Когда регулируешь ползунок громкости ( Изображение ), в этот момент программа проглючивает, заметно если включены визуализации.
В прошлых версиях такого не было. :ill:
/viewtopic.php?p=73524#p73524
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #45 Azaza » 15.11.2019, 03:40

iPhoneSasuke:Есть прекрасный плагин Write Audio CD, который записывает Audio CD из созданного плейлиста, если он укладывается в 120 минут. Но есть у него недостаток: зависим от наличия Nero 8 на винде.
С добрым утром! Плагины надо иногда обновлять. Зависимости от Nero 8 нет уже с версии плагина 3.0, вышедшей то ли в 2009, то ли в 2010 году. Для XP нужно было устанавливать в систему IMAPIv2.0 redistributable, на VIsta SP1 и выше всё работает "из коробки".

iPhoneSasuke:М.б. есть варианты универсальнее?
Есть EAC, ImgBurn, Burrrn, а, вообще, программ для записи Audio CD куча.

iPhoneSasuke:И кстати, этот вариант работает только с относительно современными устройствами; если брать какой-нибудь винтажный сидюк, то он не понимает болванки (даже каноничные CD-R, а не мутные RW) писанные таким способом.
Дело не в способе записи, а самих винтажных сидюках.
Azaza M
Аватара
Репутация: 393
С нами: 7 лет 6 месяцев

Сообщение #46 iPhoneSasuke » 15.11.2019, 05:37

Azaza:С добрым утром! Плагины надо иногда обновлять. Зависимости от Nero 8 нет уже с версии плагина 3.0, вышедшей то ли в 2009, то ли в 2010 году.
Спасибо! Не знаю, как так сложилось. Возможно, издержки того, что допиливаю под себя древнюю-древнюю сборку Alex Realist, ядро которой было несовместимо с версией 3+, а обновить плеер, сохранив дизайн и прошлое в начале истории (которой уже сам не помню сколько лет) было непосильной задачей.
Azaza:Есть EAC, ImgBurn, Burrrn, а, вообще, программ для записи Audio CD куча.
Я имел ввиду встроенные в fb2k, чтобы всё в одном месте было. Ответ выше прочитал. Еще раз спасибо. Вывели из невидимого тупика.
Azaza:Дело не в способе записи, а самих винтажных сидюках.
Я в курсе, что там лазеры слабенькие и потому не могут читать мутные CD-RW. Другое дело, что однажды также лоханулся с типом болванки и пришлось записывать диск на месте у человека. После записи моим методом (версия burninate 2) диск не читался сидюком, несмотря на то, что болванка была CD-R, а чел записал через свою софтину на такую же болванку и у него прочиталось. Не то, что бы сейчас это было очень актуально, но почему бы и нет, если ничему не мешает. Надо будет третью версию плагина на этот счет при случае протестить.
iPhoneSasuke M
Аватара
Репутация: 3
С нами: 9 лет 2 месяца

Сообщение #47 BU1153Y3 » 15.11.2019, 22:51

seriousstas, да, я видел этот пост.
всё ж понадеюсь что пофиксят.
BU1153Y3 M
Аватара
Репутация: 1
С нами: 6 лет 7 месяцев

Сообщение #48 VEG » 29.11.2019, 20:36

Вышла финальная версия.
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 273
С нами: 11 лет 10 месяцев

Сообщение #49 LUR » 29.11.2019, 20:43

Дождались)
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #50 iPhoneSasuke » 06.12.2019, 23:48

Посмотрим, что нафиксят в 1.5.1 :no: :yes:
iPhoneSasuke M
Аватара
Репутация: 3
С нами: 9 лет 2 месяца

Сообщение #51 LUR » 07.12.2019, 03:08

iPhoneSasuke:Посмотрим, что нафиксят в 1.5.1
Может сразу в 1.6?)
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #52 iPhoneSasuke » 07.12.2019, 13:29

LUR:Может сразу в 1.6?)
1.6 это спустя время при очень глобальных изменениях. А 1.5.1 это, очевидно, подгорающий хотфикс)
Спойлер
Если что, это просто шутка, не ставил целью никого обидеть. Вчера перешел на 1.5 final, больше всего понравилось, что FFMPEG удалил и плеер весит теперь не 70, а 50 Мб. Properties, правда, как было так себе, так таким и осталось.
iPhoneSasuke M
Аватара
Репутация: 3
С нами: 9 лет 2 месяца

Сообщение #53 VEG » 07.12.2019, 15:11

В 1.6 вроде как планируют перейти на WASAPI по умолчанию.
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 273
С нами: 11 лет 10 месяцев

Сообщение #54 Azaza » 07.12.2019, 21:07

iPhoneSasuke:roperties, правда, как было так себе, так таким и осталось.
К слову, появился компонент Classic Properties Dialog, позволяющий использовать Properties таким, каким оно было до 1.5.
Azaza M
Аватара
Репутация: 393
С нами: 7 лет 6 месяцев

Сообщение #55 iPhoneSasuke » 08.12.2019, 13:54

Azaza:К слову, появился компонент Classic Properties Dialog, позволяющий использовать Properties таким, каким оно было до 1.5.
Быстро же) Но это глупо. Лучше дождаться светлых времен, когда запилят нормальный дизайн этому окну. И тот и другой вариант юзабельный.
VEG:В 1.6 вроде как планируют перейти на WASAPI по умолчанию.
Вот ентое правильно. Но какой? Обычный или shared?
Кстати, есть ли смысл в DSD и DS, если есть WASAPi?

Ребят, поделитесь своими наблюдениями: мне одному кажется, что WASAPi event звучит почище, чем shared?
Не то, что бы разница критичная, а учитывая, сколько геморроя в компе это снимает — и подавно, но всё же.
iPhoneSasuke M
Аватара
Репутация: 3
С нами: 9 лет 2 месяца

Сообщение #56 VEG » 08.12.2019, 16:04

iPhoneSasuke:Вот ентое правильно. Но какой? Обычный или shared?
Обычный - это и есть shared. Режим exclusive программы почти не используют. Исходя из того, что автор foobar2000 всегда демонстрировал рациональный взгляд на цифровое аудио, будет использоваться обычный WASAPI shared, а возможность выбрать exclusive останется в качестве опции для тех кому зачем-то так хочется.

DirectSound использовался по умолчанию для поддержки Windows XP. Уж не знаю, останется ли опция использования DirectSound, или автор планирует в 2020 году отказаться от поддержки XP совсем. Не стал спрашивать. Самый последний тулкит MSVC++ уже не поддерживает XP, так что в принципе шаг ожидаемый.

iPhoneSasuke:Ребят, поделитесь своими наблюдениями: мне одному кажется, что WASAPi event звучит почище, чем shared?
Они звучат одинаково.

Добавлено спустя 10 минут 46 секунд:
Небольшой ликбез по WASAPI.

Этот API является основным средством вывода звука в Windows начиная с Windows Vista.

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

Также предлагается два способа заполнения буфера. Timer Driven или Event Driven. В Timer Driven программа сама считает сколько миллисекунд звука она записала в буфер, и сама решает на сколько миллисекунд потоку нужно заснуть, чтобы проснуться и успеть записать следующую порцию данных в буфер до того как система запнётся из-за нехватки звуковых данных. То есть, буфер на 100мс звука, программа просыпается по таймеру каждые 75мс и дозаписывает в буфер данных для воспроизведения. В Event Driven программа просит систему дёргать некий коллбэк когда система будет подходить к концу доступных данных для воспроизведения в буфере, то есть система сама будет просить иногда программу дозаписать ещё данных. Это влияет только на то как организован код, не более. Деталь, которую пользователю вообще незачем знать, так как этот выбор существует только для удобства программиста, чтобы он мог выбрать то что удобнее применить в его программе.

Таким образом, сравнивать в одном предложении shared и event driven смысла нет - эти вещи ортогональны друг другу.
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 273
С нами: 11 лет 10 месяцев

Сообщение #57 iPhoneSasuke » 08.12.2019, 17:40

Ребят, ткните, где в 1.5 зашит ffmpeg? Думал, что просто обновлением плеера можно удалить ffmpeg.exe и будут спектры рисоваться, а оказалось, что это мне показывался старый .png в папке, а новых он без .exe не генерирует. Надо бы переделать...

Спойлер
Код: Выделить всё
var empty_rating = gdi.Image(fb.FoobarPath + "images/similar_wmp_12/STAR1.png");
var empty_rating2 = gdi.Image(fb.FoobarPath + "images/similar_wmp_12/STAR2.png");
var checked_rating = gdi.Image(fb.FoobarPath + "images/similar_wmp_12/STAR3.png");
var g_font = gdi.Font("Segoe UI", 11, 0);
var focus_playing = false;
var in_library = false;
var g_move = null;
var xpos;
var ypos;
var g_timer = window.CreateTimerInterval(500);

var property_spectrum = window.GetProperty("Spectrum.Enabled", true);
var property_tmp_auto = window.GetProperty("Spectrum.TmpDir.Auto", true);
var property_tmp_dir = window.GetProperty("Spectrum.TmpDir.String", "G:\\TEMP\\spectrum\\");

// Flags, used with GdiDrawText()
DT_LEFT = 0x00000000;
DT_RIGHT = 0x00000002;
DT_END_ELLIPSIS = 0x00008000;

function RGB(r,g,b){
   return (0xff000000|(r<<16)|(g<<8)|(b));
}
function on_paint(gr){
   var title_back_color = RGB(200,225,250);
    var title_fore_color = RGB(0,41,99);
   var back_color = window.GetColorCUI(3);
   var text1_color = window.GetColorCUI(0);
   var text2_color = RGB(0,100,200);
   
   var ww = window.Width;
   var wh = window.Height;
   
   gr.FillSolidRect(0, 0, ww, wh, back_color);
   gr.SetTextRenderingHint(5);
   
   gr.FillGradRect(4, 1, ww-4, 14, 0, title_back_color, back_color);
   gr.FillRoundRect(1, 0, 4, 15, 2, 2, title_back_color);
   gr.GdiDrawText("›› General Information", g_font, title_fore_color, 4, 1, ww, 14, DT_LEFT);
   gr.FillGradRect(122, 8, ww-124, 1, 0, text1_color, back_color);
   gr.FillSolidRect(122, 8, 1, 1, text1_color);
   
   gr.GdiDrawText("Codec:", g_font, text1_color, 5, 14, 70, 14, DT_RIGHT);
   gr.GdiDrawText("Bitrate:", g_font, text1_color, 5, 28, 70, 14, DT_RIGHT);
   gr.GdiDrawText("Channels:", g_font, text1_color, 5, 42, 70, 14, DT_RIGHT);
   gr.GdiDrawText("Sample Rate:", g_font, text1_color, 5, 56, 70, 14, DT_RIGHT);
    gr.GdiDrawText("Bit Depth:", g_font, text1_color, 5, 70, 70, 14, DT_RIGHT);
//  gr.GdiDrawText("Tool:", g_font, text1_color, 5, 98, 70, 14, DT_RIGHT);
//   gr.GdiDrawText("Codec Profile:",g_font, text1_color, 5, 84, 70, 14, DT_RIGHT);
   gr.GdiDrawText("File Size:", g_font, text1_color, 5, 84, 70, 14, DT_RIGHT);
   
   gr.FillGradRect(4, 106, ww-4, 14, 0, title_back_color, back_color);
   gr.FillRoundRect(1, 105, 4, 15, 2, 2, title_back_color);
   gr.GdiDrawText("›› Playback Statistics", g_font, title_fore_color, 4, 106, ww, 14, DT_LEFT);
   gr.FillGradRect(110, 113, ww-112, 1, 0, text1_color, back_color);
   gr.FillSolidRect(110, 113, 1, 1, text1_color);
   
   gr.GdiDrawText("First Played:", g_font, text1_color, 5, 121, 70, 14, DT_RIGHT);
   gr.GdiDrawText("Last Played:", g_font, text1_color, 5, 135, 70, 14, DT_RIGHT);
   gr.GdiDrawText("Played:", g_font, text1_color, 5, 148, 69, 14, DT_RIGHT);
   
   gr.FillGradRect(4, 170, ww-4, 14, 0, title_back_color, back_color);
   gr.FillRoundRect(1, 169, 4, 15, 2, 2, title_back_color);
   gr.GdiDrawText("›› Rating", g_font, title_fore_color, 4, 169, ww, 14, DT_LEFT);
   gr.FillGradRect(52, 176, ww-54, 1, 0, text1_color, back_color);
   gr.FillSolidRect(52, 176, 1, 1, text1_color);
   
   var key_playing = fb.TitleFormat("%path%\\%subsong%").Eval();
   focus_playing = false;
   in_library = false;
   
   var g_focus_metadb = fb.GetFocusItem();
   if(g_focus_metadb!=null){
      var key_focus = fb.TitleFormat("%path%\\%subsong%").EvalWithMetadb(g_focus_metadb);
      if(key_focus==key_playing) focus_playing = true;
      
      var string1 = fb.TitleFormat("[%codec%][ '('$info(encoding)')']").EvalWithMetadb(g_focus_metadb);
      if(focus_playing) string2 = fb.TitleFormat("$if($strcmp(%codec_profile%,CBR),,~)%bitrate% kbit").Eval();
         else var string2 = fb.TitleFormat("$if($strcmp(%codec_profile%,CBR),,~)$info(bitrate) kbit").EvalWithMetadb(g_focus_metadb);
      var string3 = fb.TitleFormat("$caps($if3(%__mp3_stereo_mode%,[%channels%]))").EvalWithMetadb(g_focus_metadb);
      var string4 = fb.TitleFormat("[%samplerate%' Hz']").EvalWithMetadb(g_focus_metadb);
      var string5 = fb.TitleFormat("[%__bitspersample% bit]").EvalWithMetadb(g_focus_metadb);
//      var string6 = fb.TitleFormat("$if(%__tool%,$caps($if($strcmp($left(%__tool%,4),LAME),$insert(%__tool%,' ',4),%__tool%)),n/a)").EvalWithMetadb(g_focus_metadb);
//      var string7 = fb.TitleFormat("[%codec_profile%]").EvalWithMetadb(g_focus_metadb);
      var string6 = fb.TitleFormat("$insert(%filesize_natural%,,$sub($len(%filesize_natural%),2))").EvalWithMetadb(g_focus_metadb);      gr.GdiDrawText(string1, g_font, text2_color, 78, 14, ww-80, 14, DT_END_ELLIPSIS);
      gr.GdiDrawText(string2, g_font, text2_color, 78, 28, ww-80, 14, DT_END_ELLIPSIS);
      gr.GdiDrawText(string3, g_font, text2_color, 78, 42, ww-80, 14, DT_END_ELLIPSIS);
      gr.GdiDrawText(string4, g_font, text2_color, 78, 56, ww-80, 14, DT_END_ELLIPSIS);
      gr.GdiDrawText(string5, g_font, text2_color, 78, 70, ww-80, 14, DT_END_ELLIPSIS);
//      gr.GdiDrawText(string6, g_font, text2_color, 78, 84, ww-80, 14, DT_END_ELLIPSIS);
//      gr.GdiDrawText(string7, g_font, text2_color, 78, 98, ww-80, 14, DT_END_ELLIPSIS);
      gr.GdiDrawText(string6, g_font, text2_color, 78, 84, ww-80, 14, DT_END_ELLIPSIS);
      if(fb.IsMetadbInMediaLibrary(g_focus_metadb)){
         in_library = true;
         
         var string7 = fb.TitleFormat("$if(%first_played%,$day_of_month(%first_played%)'.'$month(%first_played%)'.'$year(%first_played%)' '$substr(%first_played%,12,16),Never Played)").EvalWithMetadb(g_focus_metadb);
         var string8 = fb.TitleFormat("$if(%last_played%,$day_of_month(%last_played%)'.'$month(%last_played%)'.'$year(%last_played%)' '$substr(%last_played%,12,16),Never Played)").EvalWithMetadb(g_focus_metadb);
         var string9 = fb.TitleFormat("'x '$if3(%play_count%,0)").EvalWithMetadb(g_focus_metadb);
      }
      else{
         var string7 = "[DOESN'T HAVE ANY MATTER]";
         var string8 = "";
         var string9 = "";
      }
      gr.GdiDrawText(string7, g_font, text2_color, 78, 121, ww-80, 14, DT_END_ELLIPSIS);
      gr.GdiDrawText(string8, g_font, text2_color, 78, 135, ww-80, 14, DT_END_ELLIPSIS);
      gr.GdiDrawText(string9, g_font, text2_color, 78, 147, ww-80, 14, DT_END_ELLIPSIS);
      
      xpos = Math.floor((ww-65)/2);
      ypos = 191;
      if(g_move) var now_check = g_move;
         else var now_check = fb.TitleFormat("$if2(%rating%,0)").EvalWithMetadb(g_focus_metadb);
      for (i = 0; i < now_check; i++){
         gr.DrawImage(checked_rating, xpos+i*13, ypos, 13, 13, 0, 0, 13, 13);
      }
      for (j = now_check; j < 5; j++){
         if(g_move) gr.DrawImage(empty_rating2, xpos+j*13, ypos, 13, 13, 0, 0, 13, 13);
            else gr.DrawImage(empty_rating, xpos+j*13, ypos, 13, 13, 0, 0, 13, 13);
      }
   }
}
function on_item_focus_change(){
   window.Repaint();
}
function on_mouse_move(x,y){
   if(focus_playing && in_library){
      if(xpos<=x && x<xpos+65 && ypos<=y && y<ypos+13){
         g_move = Math.floor((x-xpos)/13)+1;
         window.Repaint();
      }
      else{
         if(g_move){
            g_move = null;
            window.Repaint();
         }
      }
   }
}
function on_mouse_leave(){
   g_move = null;
   window.Repaint();
}
function on_mouse_lbtn_down(x,y){
   if(focus_playing && in_library){
      if(xpos<=x && x<xpos+65 && ypos<=y && y<ypos+13){
         g_move = Math.floor((x-xpos)/13)+1;
         fb.RunContextCommand("Playback Statistics/Rating/" + g_move);
      }
   }
}
function on_mouse_rbtn_down(x,y){
   var _menu = window.CreatePopupMenu();
   if(focus_playing && in_library){
      var current_rating = fb.TitleFormat("$if2(%rating%,0)").Eval();
      if(current_rating>0){
         _menu.AppendMenuItem(0x00000000, 1, "Delete rating");
         _menu.AppendMenuItem(0x00000800, 0, 0);
      }
   }
   if(property_spectrum && fb.GetFocusItem()!=null){
      _menu.AppendMenuItem(0x00000000, 2, "Spectrum");
      _menu.AppendMenuItem(0x00000800, 0, 0);
   }
   _menu.AppendMenuItem(0x00000000, 3, "Properties");
   _menu.AppendMenuItem(0x00000000, 4, "Configure...");
   ret = _menu.TrackPopupMenu(x, y);
   switch (ret){
      case 1:
         fb.RunContextCommand("Playback Statistics/Rating/<not set>");
         break;
      case 2:
         spectrum();
         break
      case 3:
         window.ShowProperties();
         break;
      case 4:
         window.ShowConfigure();
   }
   _menu.Dispose();
}
function on_timer(id){
   window.Repaint();
}
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 1280 -Y 720 -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('del "'+tmpdir+'spectrum_tmp.png" "'+tmpdir+'spectrum.wav"');
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);
}
//EOF
iPhoneSasuke M
Аватара
Репутация: 3
С нами: 9 лет 2 месяца

Сообщение #58 LUR » 08.12.2019, 18:15

iPhoneSasuke, а чего он их должен генерить без .exe, если в скрипте черным по белому прописан его запуск?
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #59 iPhoneSasuke » 08.12.2019, 18:32

LUR:а чего он их должен генерить без .exe, если в скрипте черным по белому прописан его запуск?
Это понятно. Значит надо в библиотеку залезть или еще что-то сделать.
iPhoneSasuke M
Аватара
Репутация: 3
С нами: 9 лет 2 месяца

Сообщение #60 Azaza » 09.12.2019, 21:20

iPhoneSasuke, ничего такого сделать нельзя. Возвращайте ffmpeg.exe и будет Вам счастье. А "встроенный" ffmpeg используется ТОЛЬКО для декодирования mp3, aac, vorbis. И используется аж с версии плеера 1.2.

VEG:Они звучат одинаково.
На самом деле, бывают случаи, при которых exclusive и shared будут звучат разному. К примеру, если создать существенный клиппинг, накрутив эквалайзер, или просто воспроизводить lossy с существенным клиппингом. При этом из-за вывода с плавающей точкой в shared будет срабатывать лимитер windows, что может привести к заметному на слух плаванию громкости. При выводе же через exclusive получится просто клиппинг. Т.е. разница будет очевидна. Кроме того, в общем режиме лимитер windows срабатывает даже тогда, когда не должен, т.е. при отсутствии клиппинга (https://youtu.be/U5_QnV3Vk8U , https://youtu.be/dsYcJPhbnqE), но в этом случае вероятность слышимых изменений, конечно, крайне сомнительна. Также для некоторых звуковых карт есть возможность накрутить настройки в драйвере, которые влияют на звук, но в exclusive режиме игнорируются.
Azaza M
Аватара
Репутация: 393
С нами: 7 лет 6 месяцев

Пред.След.

Вернуться в Новости плеера