Получите случайный файл из папки и добавьте его в список воспроизведения iTunes.

Я просмотрел некоторые ответы, которые говорят мне, как получить случайные файлы из папок, и некоторые из них могут работать с плейлистами iTunes. Не смог совместить это.

То, что я ищу, - это способ (я думал в AppleScript) получить 200 песен в моей папке плейлиста Folk на моем жестком диске, случайным образом выбрать 20 из этих песен, а затем добавить их в плейлист iTunes.

Я знаю, что умные плейлисты могут сделать это, но я хочу делать это как можно чаще вне iTunes, потому что большая часть моей музыки находится в папках, а не в iTunes как таковом.

Буду очень признателен за любую помощь:

  1. Получение 20 случайных файлов из папки И
  2. Затем запихнуть их в плейлист.

Мне было интересно, есть ли способ получить количество файлов в процентах (20% файлов в Folk), но на самом деле это не проблема!

Заранее спасибо всем, кто может мне помочь!

опоздание


person tardy pigeon    schedule 14.11.2015    source источник
comment
Насколько я знаю, вы не можете добавить файл в список воспроизведения iTunes, которого нет в базе данных iTunes, я имею в виду, что вам все равно придется импортировать файлы в iTunes.   -  person vadian    schedule 14.11.2015
comment
Вадиан, я думал, может быть, использовать автоматическое действие для импорта файлов в iTunes.   -  person tardy pigeon    schedule 14.11.2015


Ответы (2)


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

property RList : "my random list" -- name of the random list
property ListGenres : {"Rock", "Pop", "Soundtrack", "Jazz"} -- your list of genres
property NumPerGenre : {3, 2, 5, 4} -- the number of songs per genre

tell application "iTunes"
if exists user playlist RList then -- check if the playlsit exists or not
    delete tracks of user playlist RList -- delete all current tracks of the play list
    repeat while (number of tracks of playlist RList) > 0
        delay 0.1 -- wait for the library to clear out, because iTunes is asynchronous !
    end repeat
else -- creation of the play list
    set MyPlayList to make new user playlist with properties {name:RList}
end if

repeat with I from 1 to (count of ListGenres) -- loop per genre
    set ListTracks to (tracks whose genre is (item I of ListGenres))
    repeat with J from 1 to (item I of NumPerGenre) -- loop to add x tracks per genre
        set TheTrack to item (random number from 1 to (count of ListTracks)) of ListTracks
        duplicate TheTrack to playlist RList
    end repeat -- loop for all tracks per genre
end repeat -- loop by Genre
play playlist RList -- start to play !  
end tell

Я написал много комментариев, чтобы было понятно (надеюсь). В этом примере у меня 4 жанра, и я получу 3 песни первого жанра, 2 песни второго жанра, ...и так далее. вы можете изменить эти свойства, если в списке жанров содержится то же количество элементов, что и в списке numpergenre.

К сожалению, начиная с iTunes 11, атрибут случайного воспроизведения не может быть установлен с помощью скрипта, вы должны установить его вручную в iTunes для случайного воспроизведения списка (его можно установить один раз для всех)

person pbell    schedule 21.11.2015
comment
Удивительный. Спасибо. Могу я спросить, как вы научились задавать эти имена переменных и команды? Я пытался использовать словарь AppleScript, но задавался вопросом, есть ли книга, в которой я мог бы найти все это, вместо того, чтобы использовать поисковые системы, чтобы найти один бит здесь, другой бит там и т. д.? - person tardy pigeon; 22.11.2015
comment
Просто запустил его в яблочном скрипте (не как приложение) и, похоже, выполнил свою работу, но оставляет Applescript вращающимся и вынужден принудительно выйти. Должен ли я поставить где-нибудь строку «сдаться после»? - person tardy pigeon; 22.11.2015
comment
Это может быть связано с огромным количеством треков. Мой iTunes насчитывает всего около 7000, и это нормально. Я никогда не тестировал (и не могу) с 20000 дорожек. если вы запустите скрипт из редактора, отобразите события/результаты в нижней части окна и добавьте несколько строк инструкций журнала в разных местах, чтобы увидеть, в чем проблема. Инструкция журнала аналогична шагу 1 трассировки журнала. Глядя в нижнее окно редактора скриптов, вы увидите все трассы, одну за другой, вплоть до точки, которую они блокируют. делая это, вы увидите, где он висит. - person pbell; 22.11.2015

чтобы воспроизвести треки, вы должны сначала импортировать их в iTunes, как сказал Вадиан. лучше импортировать их в список воспроизведения (легче потом удалить). сценарий ниже делает это:

set MyRatio to 0.2 -- the % of files randomly selected over the total file of the selected folder
set MyFolder to choose folder "select folder with your musics"
tell application "Finder" to set MyList to every file of MyFolder

-- build the random list
set SongList to {}
set MaxCount to (MyRatio * (count of MyList)) as integer
set MyCount to 0
repeat until MyCount = MaxCount
set MyItem to random number from 1 to (count of MyList)
set NewFile to (item MyItem of MyList) as string
if NewFile is not in SongList then
    copy NewFile to the end of SongList
    set MyCount to MyCount + 1
end if
end repeat

-- add the files to iTunes new playlist
tell application "iTunes"
set MyPlayList to make new user playlist with properties {name:"my Import"}
repeat with I from 1 to count of SongList
    add ((item I of SongList) as alias) to MyPlayList
end repeat
play MyPlayList -- start to play the play list
end tell
person pbell    schedule 14.11.2015
comment
Это гениально, пбелл. Я очень ценю приложенные вами усилия, и я уверен, что смогу использовать этот код в своих целях, немного подправив его! - person tardy pigeon; 16.11.2015
comment
Единственное, в чем я не уверен, так это в том, что это выглядит рекурсивно в папке или только на верхнем уровне? Очень хотелось бы копнуть поглубже. - person tardy pigeon; 16.11.2015
comment
измените 3-ю строку, добавив все содержимое: скажите приложению Finder установить MyList для каждого файла всего содержимого MyFolder, расширение имени которого находится в {mp3, aif}. Вы должны заполнить список возможными расширениями файлов. - person pbell; 16.11.2015
comment
Большое спасибо! Все ваши комментарии оценены. Определенно решил мою проблему. - person tardy pigeon; 18.11.2015
comment
Я понимаю, что причиняю боль, но я попытался повозиться с кодом, чтобы превратить его в приложение, которое проходит через множество папок и получает разные числа из каждой, но я упал при первом же препятствии. Я изменил код, чтобы он запустился: скажите приложению Finder установить MyList для каждого файла всего содержимого псевдонима Macintosh HD: General Music: 02 Rock: 02E Rock 2010-2020: расширение имени которого находится в {mp3, m4a, aif, mp4 }. Кажется, время ожидания истекло, прежде чем перейти к этапу случайного списка. Любая идея, как я могу получить 15 треков из моей папки Rock 2010-2020, а затем 5 из другой? - person tardy pigeon; 18.11.2015
comment
Время ожидания может быть связано с тем, что у вас слишком много файлов в папках/подпапках. идея может состоять в том, чтобы получить случайную подпапку, и в этой подпапке получить случайные файлы (с каждым разом меньше элементов), но чтобы помочь вам больше, пожалуйста, объясните структуру вашей папки/подпапки/песни. Также другой способ взглянуть на это - понять, почему вы не хотите перемещать их все в iTunes и делать случайные отсюда. - person pbell; 18.11.2015
comment
Мне очень нравится, когда все папки организованы по-моему, а не в iTunes». Я организую по жанрам и поджанрам, и иногда в этих папках жанры пересекаются, а иногда нет. Основная причина вопроса, который я задаю, заключается в том, чтобы попытаться ограничить его определенными папками, что намного проще, когда у вас есть, скажем, 11 папок, в которых нужно указать ему искать. Мне также не нравится, когда вся эта музыка находится в iTunes — у меня много вещей, которые я не хочу просматривать случайно. - person tardy pigeon; 18.11.2015
comment
Если это слишком обременительно для системы и приведет к тайм-аутам, может быть, вы могли бы предложить сделать это в iTunes? - person tardy pigeon; 18.11.2015
comment
Если число слева — это количество песен, а жанр — справа, я хотел бы иметь возможность вызывать случайным образом выборку из папок, содержащую микс, например: 2 Классика ‹br/› 3 Регги 3 Джаз модерн 4 Фолк 5 Джаз 6 Рок 1970-х 6 Рок 1980-х 8 Популярная песня 15 Соул и рэп 15 Рок 50-60-х 15 Рок 2000-х 18 Рок 2010-х - person tardy pigeon; 18.11.2015
comment
И я склонен организовывать их следующим образом: Общая музыка › Рок › Рок 1980-х › The Smiths › Альбомы (и песни, не входящие в альбомы) - person tardy pigeon; 18.11.2015
comment
в настройках iTunes, на расширенной панели, вы можете снять флажок, оставьте iTunes упорядочивать свои файлы и копировать в папку iTunes Media .... таким образом, я думаю, вы можете оставить свои файлы и папки там, где они есть, и они по-прежнему будут видны в iTunes . тогда вы можете задать случайное воспроизведение в iTunes напрямую без скрипта. - person pbell; 19.11.2015
comment
Спасибо пбелл. Но как мне добиться соотношения мелодий - например. 2% Классика, 3% Рок - или даже просто 2 классических произведения, 3 роковых, 4 джазовых и т.д.? Просто лучше все это делать через умную систему папок? - person tardy pigeon; 21.11.2015