Репл — крохотный открытый плеер для Мака

image

Некоторое время назад я перешел на Мак и стал подбирать себе софт для повседневного использования. Проблема возникла с аудиоплеером. Я перепробовал множество плееров, но ни один меня не устраивал. Поэтому я решил написать свой собственный. Заодно мне было интересно попробовать разработку на Objеctive-C под Мак.

В результате, у меня получился плеер Репл, что означает "резидентный плеер":

Требования к аудиоплееру


По поводу того, каким должен быть аудиоплеер, у меня имеются следующие соображения:

1. Аудиоплееру не нужен графический интерфейс.

Звук идет в фоне, смотреть на него не нужно, поэтому нет никакой необходимости делать для аудиоплеера какой-либо графический интерфейс. Конечно, плеером нужно как-то управлять, но все управление можно свести всего к четырем кнопкам — меню, пуск/пауза, следующий и предыдущий трек.

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

2. Аудиоплееру не нужна собственная библиотека.

Организация хранилища музыки отлично выполняется с помощью файловой системы. В подавляющем большинстве случаев коллекция музыки имеет иерархическую структуру (например, Жанр — Исполнитель — Альбом — Трек), которая без проблем воспроизводится с помощью вложенных папок файловой системы. Более того, из папок можно создать более развесистую структуру, чем из ограниченного набора id3-тегов.

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

3. Аудиоплееру не нужны плейлисты.

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

Не нужно делать прослойку между файлами и плеером, плеер должен просто играть содержимое диска «как есть».

Разработка


До этого момента я никогда не программировал под Мак вообще и на Objective-C в частности. Так что плеер я писал параллельно с изучением Objective-C.

Как оказалось, статей по разработке под Мак на русском языке в сети очень мало. Родная Эпловская документация, вероятно, могла бы дать многое, но очень уж она объемистая, мне ее по-английски сложно читать. Большую часть информации, в основном примеры кода, мне пришлось почерпнуть на англоязычных ресурсах типа StackOverflow.

Я точно знал, каким должен быть плеер, как должен выглядеть и какой должен иметь функционал. Поэтому у меня не было какого-то обдумывательного, проектировочного этапа. Я просто по шагам находил решения для каждого возникающего вопроса и тут же писал код. В процессе я даже написал несколько заметок у себя в ЖЖ — как настроить Xcode, как засунуть иконку приложения в статус-бар, как прочитать файлы и.т.д. Этакий учебник для самого себя.

Самым сложным вопросом оказалось воспроизведение звука. Я начал эксперименты с класса NSSound. Я так понял, это некий «стандартный» класс для воспроизведения звука в Objective-C. Сначала у меня долго не получалось заставить этот класс воспроизводить звук, потом не получалось отловить момент окончания трека, чтобы запустить следующий. У меня начало складываться впечатление, что класс NSSound вообще не предназначен для использования в плеере, скорее он нужен для однократного воспроизведения какого-нибудь короткого звука, типа сигнала об окончания закачки файла, или типа того.

Тогда я решил попробовать разобраться с фреймворком AV Foundation, уж на нем-то точно можно написать плеер. Однако, как-то так получилось, что мне подсказали способ заставить NSSound издавать звуки, а отлавливать момент окончания трека я научился сам. И я сделал плеер на основе NSSound.

К сожалению, этот класс со страшной силой жрет память. На проигрывание каждого нового трека выделяется некоторое количество памяти, а после окончания трека память не освобождается. Тут либо я чего-то не понимаю и просто криво написал код, либо NSSound действительно предназначен только для однократного воспроизведения одного фиксированного звука. Я был бы крайне признателен, если бы разбирающиеся в вопросе подсказали мне, как победить эту проблему.

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

Результат


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

Репл — открытый и совершенно бесплатный плеер. Все исходники находятся на Гитхабе, там же есть небольшой список фич, которые я еще хочу прикрутить к Реплу.

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

UPD. Я таки переписал плеер на AVFoundation.
UPD2. Эта статья около года была в черновиках, поэтому некоторые старые комментарии могут быть уже неактуальными.
Поделиться публикацией

Комментарии 144

    +16
    А удобно так по выпадающим меню скакать для выбора трека? Это же ад адовый.
      –6
      Очень удобно. Значительно удобнее, чем прокручивать просто список.
        +1
        Вместо выпадающих списков я бы предпочел простенький gui в две зависимых колонки, тоже в виде всплывающего сообщения из трея
        | исполнитель | трек |
          0
          Мне недостаточно двух уровней иерархии. С другой стороны, если нужно сделать два уровня, то можно разложить музыку на диске именно так — папки исполнителей, а в них треки. И Репл покажет это практически так же, как вы говорите.
            +3
            Зачем раскладывать? Я имею в виду нечто такое

              0
              Как зачем раскладывать? Чтобы создать иерархию. У нас есть два варианта — либо иерархия берется из файловой системы, либо из id3-тегов. Я предпочитаю первый вариант — файловую систему.

              На Вашей картинке изображено то же самое, что выдаст Репл при расклыдывании музыки по папкам с исполнителями.

              Вот, например:

              habrastorage.org/storage2/4a2/6f5/88d/4a26f588d0f530f44fe25f1e02f27c6b.png
                0
                На будущее. Отображать расширение файла не обязательно
                  0
                  Да, конечно. Просто пока названия треков берутся из названий файлов. Потом я разберусь, как читать id3-теги и буду выводить название из тега.
                    0
                    Убрать все символы до точки с справой стороны. Тут id3 не нужен.
                      0
                      Это понятно, но просто ни к чему, все-равно буду id3 читать.
                        +1
                        А какой смысал в id3 тегах если иерархия строится по файловой системе (папка — папка — название файла). Вы же только что в ручную создали папку с именем артиста, папку с именем альбома, а в имени файла прописали название трека.
                          0
                          Имена файлов я не всегда исправляю. Часто они остаются в том виде, в каком откуда-нибудь скопировались, и могут быть какие попало. Особенно если это сотня файлов какого-нибудь сборника. И тут надежда на то, что теги проставлены правильно.

                          Если же и теги неправильные, то теги все-равно нужно проставить, они считываются на всяких других устройствах — на телефоне или плеере.
                  0
                  — Зачем раскладывать? — Как зачем раскладывать?
                  Имелось в виду зачем раскладывать в два уровня (т.е без альбомов)
                  Музыка у меня каталогизирована изумительно по принципу Исполнитель — Альбом — Трек
                  Но я не об этом говорил, а о выпадающих меню, вложенность которых является безусловным злом в интерфейсе.
                  Лучше сделать два списка:
                  В левом первый уровень — исполнитель
                  В правом все остальные уровни вложенности по принципу заголовок — содержимое. Т.е

                  -Альбом
                  --Трек
                  --Трек
                  -Альбом
                  ---Некий каталог
                  ----Трек в каталоге
                  ----Трек в каталоге
                  --Трек
                  --Трек

                    0
                    Понял. Но, мне кажется, это будет не слишком удобно, вторая колонка будет очень длинной. Возьмем ДДТ — у них одних альбомов 20 штук, и в каждом… ну пусть по 10 песен. Итого это будет список в 200 пунктов. Нет, слишком длинно.
                      0
                      М… Дерево?
                        0
                        Так Репл и показывает дерево. Свернутое. Наведение мышки на любой узел разворачивает этот узел. Считаю, что так лучше, чем показывать сразу развернутое дерево на 200 пунктов.
                          0
                          У вас там лишний узел «треки»
                          И если я открываю только одну какую-то папку это то же лишний узел.
                          Сначала я перехожу на «Треки» потом, например «ДДТ» (ведь я выбрал только одну папку ДДТ). Только потом я получаю долгожданный список альбомов или треков.
                            0
                            Да, есть такое. Тут я не придумал, как толковее поступить. Узел «треки» нужен, так как это пункт верхнего уровня меню, там еще и другие пункты есть. Убрать узел «треки» и пихать открываемые папки сразу в верхний уровень меню я счел неприемлемым.

                            И лишний узео при открытии только одной папки тоже не придумал как разрулить. Я писал об этом подробнее у себя в ЖЖ — m-ivanov.livejournal.com/30209.html
                            0
                            Репл показывает выпадающие списки, это не дерево. Дерево в проводнике, например, когда контент узла разворачивается непосредственно в список. Вот так, тогда. Кстати имеет смысл подумать об аккордеоне

                              0
                              Такой вариант еще ближе к Реплу получается. Точно так же нужно развернуть альбом. Но в Репле при этом остальные альбомы никуда не уезжают, мне такое поведение нравится больше, как-то стабильнее, что ли:)
                                +1
                                Okay. Last chance. Classic.



                                Стабильнее некуда.

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

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

                                А если еще поисковое поле-фильтр добавить, то мммм… Но это уже совсем другая история :)

                                Даа, а еще обязательно нужна запись на cd, dvd, vhs, встроенный аудиоконвертер, аудиоредактор, онлайн плеер и возможность загрузки плеера вместо операционной системы с live-flash...
                                  0
                                  Главное что бы поиск активировался сразу при печати, а не после клика в строку поиска.
                                    0
                                    Да вы шутите:) У Вас теперь вообще один в один получился Репл. То же самое, что у меня на заглавном скриншоте. Только «скин» погламурнее.
                                      0
                                      Парам пам. Вы не слышите о чем я говорю.
                                        0
                                        Видимо, да. Я не понимаю, в чем разница.
                                        +1
                                        Разница колоссальная. У вас выпадающие списки
                                          0
                                          У него тоже выпадающие списки. Либо я не понимаю, что там нарисовано. Действующий пример есть?
                                            0
                                            Это не выпадающие, а зависимые списки. Т.е они не выпадают, в них не надо целиться. Они отображаются сразу все одновременно, но если в родительском списке изменить выбор, то все дочерние меняют свой контент.
                                              0
                                              Простите, не понимаю. Вот у Вас в левой колонке фокус на Muse. Если изменить фокус на Pianochocolate, вторая колонка изменится? Если да, то не вижу разницы. Если нет, то что произойдет?
                                                +2
                                                Если изменить фокус на первой — изменятся вторая и третья колонки, да.
                                                Еще раз — проблема не в засисимостях, проблема в интерфейсе, в юзабилити.
                                                В вашем случае нужно быть очень осторожным, чтобы выбрать нужный трек путешествуя по выпадалкам и случайно их не закрыть, не свернуть, не переместить фокус. drew верно назвал закон Фиттса на который нужно обратить внимание. Вот статья на хабре о нем.

                                                Я же предлагаю избавиться от пиксельхантинга путем отображения всех списков сразу.

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

                                                  Хоть убей не понимаю, почему то же самое нельзя сказать про Ваш вариант. Точно так же у Вас надо быть аккуратным, чтобы не перенести фокус куда-то не туда, чтобы случайно не закрыть, не свернуть и так далее.

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

                                                  Ну или давайте так: скажите последовательность действий, которая в моем и Вашем варианте приведет к разным результатам.
                                                    +1
                                                    Вы про щелчок говорите?
                                                    Разумеется про щелчок. Юзеркейс идентичен файндеру.

                                                    Как вариант — по наведению можно менять контент, но фиксировать выбор по щелчку.
                                                      0
                                                      Ну, со щелчком понятно. Щелчок можно сделать и в моем варианте.
                  +2
                  Многоуровневая навигация всегда будет порождать огромное количество ошибок. Для справки: Закон Фиттса.
                    0
                    Да, верю. Но лучшего решения не знаю. Там выше коллега shara предлагает варианты, но мне они кажутся менее удобными, чем мое решение.
                      0
                      Может вообще отказаться от треков? Пойти по принципу работы iPod Shuffle.
                        0
                        Не могу. Люблю периодически включать что-то конкретное:)
                          0
                          Это сарказм?
                          В доке весить приложение которое при запуске сразу начинает рендомно проигрывать треки из библиотеки айтюнса. Без всякого «чяго бы сегодня бы послушать», без всяких менюшек, ползунков. Я хочу =)
                            0
                            Такое реализиуемо на AppleScript довольно элементарно. Попробуй?
                  0
                  FLAC бы ещё, а то пока нет смысла вместе с iTunes держать.
                    0
                    Да, согласен. Но NSSound не умеет FLAC, а с AVFoundation я еще не разобрался, к сожалению.
                      0
                      И прочие форматы сжатия звука без потерь были бы очень кстати.
                        0
                        Понял. Буду работать над этим.
                          +3
                          И самое страшное — поддержка CUE файлов.

                          Вообще опенсорсный Cog (cogx.org) вам в помощь — он все это умеет. Сам ним пользуюсь.
                            +1
                            Огромное вам человеческое спасибо за Cog! А то я намучился уже и с Vox, и с Songbird (про тунец даже не упоминаю).
                              +1
                              Пожалуйста. Благодарите автора Cog.

                              Был бы там еще эквалайзер — цены б ему не было. Жаль проигрывание, похоже, по большей части осуществляется средствами ОС, и просто так «прикрутить» эквалайзер не получится.
                              0
                              Cog я использовал, пока не написал свой Репл:)
                              • НЛО прилетело и опубликовало эту надпись здесь
                                  0
                                  Я обычно просто закрываю iTunes, и управляю next/previous клавишами. А play/pause делаю через шорткат специальный для Cog (там можно задать в preferences), потому что нажатие play/pause по умолчанию запускает iTunes обратно.

                                  К сожалению этот шорткат не всегда срабатывает (например в Unreal Tournament 2004 до Cog он не «пробивается»). Если это сильно мешает — есть разные трюки помогающие отучить iTunes запускатся автоматически, но я давно их не пробовал (со времен OS X 10.6.5 где-то), хотя в свое время делал это путем редактирования plist файла внутри iTunes (изменял CFBundleIdentifier).

                                  Этот вариант + другие трюки описаны здесь:
                                  superuser.com/questions/31925/what-can-i-do-to-stop-the-play-pause-button-from-opening-itunes
                                  lifehacker.com/5531707/free-your-macs-media-keys-from-itunes-grasp

                                  P.S. Заметил на Суперюзере и тут же опробовал вариант с запущенным quick time player без открытых файлов — сносный воркерануд в целом.
                          0
                          А мне понравился плеер. Хочу такой же, но с плейлистами ВК. А в эту версию FLAC нужен, да
                            0
                            Репл играет локальные файлы, поддержка ВК или других сетевых сервисов пока не планируется.

                            На счет FLAC я уже понял, да, надо делать.
                            +2
                              0
                              Я думал сделать такую индикацию, но она очень много места занимает. На скриншоте у Ильи всего три коротких слова, а в реальности текст бывает длиннее — «Калинов мост — Мелодия голых ветвей». Плюс четыре кнопки управления. В общем, решил пока не делать. Но, вероятно, сделаю, в виде опции, включемой галочкой.
                                0
                                Индикация названия трека не нужна. Если вдруг стало интересно что это за трек — можно отображать информацию во всплывающем меню. Здорово, если бы там можно было сразу клацнуть на лайк ❤ и прописать тем самым в теги эту пометку. Нравится этот функционал у Rhytmbox
                                  0
                                  Во всплывающем меню сделаю, я так и планировал.

                                  Про лайк не понял — как там дальше этот лайк в Ритмбоксе используется?
                                    0
                                    Потом можно отсортировать все треки по «любимости» и получить плейлист.
                                    Здесь плейлист составлять не нужно, но рейтинг композиции пометить было бы полезно, особенно когда слушаешь дискографию незнакомого исполнителя
                                      0
                                      Понял. Но это требует специального хранилища для хранения этих лайков. Для Репла это неприемлемо, там главная фича именно в том, что кроме самих файлов ничего не нужно.
                                        0
                                        Но это требует специального хранилища для хранения этих лайков
                                        Nope. В id3 тегах есть специальное поле rating
                                          0
                                          Ок, подумаю.
                                          0
                                          Прикрутите возможность использовать медиатеку айтюнса как источник музыки, но не сами папки и файлы айтюнса, которые, кстати, там отсортированы как раз в иерархии исполнитель-альбом-трек:
                                          Скриншот
                                          файлы в айтюнсе сложены по папочкам исполнитель-альбом-трек

                                          А именно медиатеку, со всеми плейлистами, рейтингами, статистикой прослушивания и т.п.
                                            +1
                                            Нет, ни в коем случае. Это принципиальный вопрос. Репл задуман и сделан как этакий аудио-интерфейс к файловой системе. Он просто играет то, что лежит в файловой системе, один в один. Никакой специальной медиатеки. Воткнул флешку, открыл ее в Репле — и все, музыка поехала, никуда ничего не импортирую и вне зависимости от наличия плейлистов, тегов и чего бы то ни было еще.

                                            Собственно, можно Реплом открыть папку, где айтюнс хранит файлы треков. И репл покажет иерархию исполнитель-альбом-трек.
                                            0
                                            можно внутри .app хранить БД с лайками
                                  0
                                  если идет звонок по скайпу — музыка останавливается? и продолжает играть по его завершению аналогично айтюнсу?
                                    0
                                    Нет, такого я пока не умею. Взял на заметку.
                                    0
                                    После смерти релизной Vox это самое близкое к тому, что мне хочется! Добавьте, пожалуйста, поддержку FLAC и возможность накидывать плейлисты — будет вообще «пэрсык» ©
                                      0
                                      Да, Вокс вызывал у меня недоумение — ну что им стоило доделать проигрывание вложенных папок? Теперь Репл будет вместо Вокса:) Вот с FLAC'ом и прочими форматами без потерь разберусь и ух!..
                                        +1
                                        coppertino.com/vox/ вполне бодрячком
                                          0
                                          Ого! Спасибо, не знал. Видео прям цепляет, такое ощущение что в IMAX сидишь :) правда снова бета («PUBLIC BETA SIGN-UP»), но любопытно что изменилось с прошлой версии
                                        0
                                        Плейлисты всё же хотелось бы. У меня музыка отсортирована и каталогизирована, но я, к примеру, частенько делают так: пару альбомов этого исполнителя, один вон того, а потом ещё пару вот этого. Делаю это один раз и поехали.
                                        Если я понял правильно, то в случае Репла мне придется каждый альбом включать руками по окончанию воспроизведения предыдущего. Это так, или я что-то упустил?
                                          0
                                          Нет, каждый альбом по окончанию другого включать не надо. Все нужные альбомы или треки можно выбрать сразу. И вперемешку можно — и альбомы и треки.

                                          Но указать Реплу, какие именно альбомы и треки нужно открыть, придется руками, да.
                                            0
                                            Ок, тогда заценим.
                                            Спасибо!
                                          +3
                                          Человеку проще воплотить привычное, чем принять новое — простор для психологических исследований ツ
                                          Это не про автора лично, а общее наблюдение.
                                            0
                                            :)

                                            Да ну, бросьте, ч то там нового. Эта манера — импортировать коллекцию музыки в собственную библиотеку плеера и сортировать по id3-тегам — не специфична для Мака. Мне это не нравилось ни в Винде, ни в *никсах.
                                              +1
                                              Дайте угадаю, вы не делали этого по тому, что в вашей коллекции 80% треков с криво заполненными полями id3?
                                              Тунец достаточно удобен, и даже гибок *при условии* что все поля граммотно заполнены (например как в треках купленных в их магазине).
                                                0
                                                Нет, все теги у меня заполнены, я это еще до перехода на Мак сделал. И Репл будет выводить названия треков именно из тегов, а не из имени файла (но пока не выводит, так как я еще не научился работать с тегами).

                                                Я предпочитаю файловую систему, потому что в ней структуру можно сделать развесистее. И работать с отсортированными файлами удобнее, чем с экспортом из библиотеки.
                                                  0
                                                  См. коммент ниже. Просто попробуйте попользоваться iTunes на маке, скажем месяц. Думаю, что вам потом не захочется пользоваться чем-то другим. Это на самом деле очень приятная штука, тем более если с тегами у вас проблем нет.
                                                    0
                                                    Я и пользовался тунцом, пока искал подходящий плеер. Мне он неудобен.

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

                                                    Предлагаете не импортировать это в тунец? Но иногда это все-таки бывает нужно послушать. А если не импортировать — нафиг тогда мне тунец?

                                                    А вот Репл мне как-раз удобен — что надо послушать, то и открываешь. И файлы копировать туда-сюда удобно.
                                                      0
                                                      Понятно, просто лично для себя нашел оптимальный вариант (может кому на заметку будет): в папку Музыка из загрузок складываю всю музыку так, что я знаю где у меня что, новое сразу добавляю без копирования в медиатеку iTunes, а слушаю, в основном, по плейлистам. Смарт-плейлисты, которые автоматом собирают треки по указанным заранее значениям – классная штука, например: показать музыку жанра Trance, при этом исключить ATB и альбом Tri-State. Дальше он будет сам все делать, в том числе если вы добавите в медиатеку пару новых альбомов в жанре Trance – плейлист сразу обновится без вашего участия. Крайне удобная штука с большим простором для настроек :))
                                                        0
                                                        Да, с плейлистами в тунце все ок. Репл просто из другой оперы — это просто такая аудио-надстройка над файлами, играет с диска ровно то, что на диске лежит, без фокусов.
                                                          0
                                                          Скажите пожалуйса ваши слова«без фокусов» и «Он просто играет то, что лежит в файловой системе, один в один» что вообще означает?
                                                            0
                                                            Плеер никак не организовывает коллекцию. Не имеет ни фильтров, ни плейлистов, ни вообще каких бы то ни было средств для управления структурой коллекции. Он показывает структуру точно так, как она организована в файловой системе.

                                                            Можете открыть Файндер и открыть рядом меню Репла — увидите одно и тоже содержимое. И проигрываться будет ровно то же, что видно. Это и на заглавном скриншоте специально отображено.

                                                            А теперь откройте Файндер и Айтюнс. Видно разное, в разных видах, а если включить смарт-плейлисты, так и вообще начинаются фокусы.
                                                              0
                                                              Это все фенечки интерфейса. Вы говорите, что проигрыватель играет без фокусов и один в один. Что это значит не понятно.

                                                              Открыл
                                                              image
                                                              Смарт-плейлисты и в файндере можно «включить».
                                                              Вы не понимаете что такое смарт-плейлисты?
                                                                0
                                                                В левой колонке Файндера, вверху вижу папки, отсутствующие в Айтюнсе. Почти наверняки треки из этих папок где-то в айтюнсе видны, но не по имени папки, а по тегам, которые не соответствуют названию папки.

                                                                Кроме того, это у вас структура на диске близко соответствует «исполнитель-альбом-трек». А добавьте туда папки «мое», «жены» и «новогоднее».

                                                                Cмарт-плейлисты? Ну, фильтры это.
                                                                  0
                                                                  Сортировка идет по буквам потом по цифрам.
                                                                  Артикли в сортировке не участвуют
                                                                    0
                                                                    Не понял. Где, скажем, исполнитель 65daysofstatic?
                                                                      0
                                                                      >А добавьте туда папки «мое», «жены» и «новогоднее».
                                                                      Я перекину нужные треки, альбомы в плейлист.
                                                                      Да. Не вижу способа как скопировать треки из плейлиста сохраняя структуру каталога. Простое перетягивание сразу копирует весь список файлов в одну кучу. Но любой плеер, с помощью id3тегов, должен уже сам разобрать эту скопированую кучу файлов на каталог артистов и альбомов.

                                                                      >Не понял. Где, скажем, исполнитель 65daysofstatic?
                                                                      В конце списка
                                                                        0
                                                                        >Я перекину нужные треки, альбомы в плейлист.

                                                                        Но сами они останутся там, где были. И вам потребуется выключать их из проигрывания в других плейлистах. Ну, чтобы не слушать треки «жены», когда слушаете «мое». Этак вам придется кучу плейлистов на все случаи нагенерировать. Я же предлагаю выбросить эту прослойку между файлами и плеером и проигрывать сразу файлы.
                                                                          0
                                                                          Этой прослойкой вы занялись когда начали создавать папки Мое Жены Новогоднее и добавлять туда треки.

                                                                          Ну если так преперло, что мне нужно жестко делить треки на несколько категорий… Пропишу в, например, комментариях(или группа) файла ключевую фразу. Создам смарт-плейлист с исключенеим по ключевой фразе.
                                                                          Тегов там кстати нет.

                                                                          А как вы выходите из ситуации когда вам и вашей жене нравится одна музыка =)? Делаете дубликаты файлов в своих папках?
                                                                    0
                                                                    Кстати в OSX10.9 появились теги, которые претендуют на хорошую замену папкам для категоризации вида «мое»/«жены»/«новогоднее». При использовании папок то какая-то музыка может дублироваться в нескольких местах, что не очень правильно.
                                                              0
                                                              Ну да, тут вы правы, безусловно. А переключатели музыки сами реализовывали, это из вашего плеера или это что-то стороннее?
                                                                0
                                                                Переключатели? В смысле кнопки вперед/назад? Это кнопки самого плеера, да.
                                                            0
                                                            Таким вот образом (смарт-плейлистом или обычным плейлистом), кстати, и решается ваша задача как послушать редкое что-либо: просто добавить это в конкретный плейлист или убрать из тех, которые вы слушаете постоянно. По сути плейлист – та же папка на вашем диске, просто вы один раз вбили его в тунце и все уже под рукой, не нужно по папкам бродить, да и копировать файлы можно простым перетягиванием прямо из iTunes.
                                                              0
                                                              Музыку с флешки, принесенной на пять минут послушать, вы как айтюнсом запустите? Папку из айтюнса вы как перетянете?

                                                              В общем-то, я на самом деле не хочу разбираться, как это сделать в айтюнсе и можно ли вообще. Я люблю файлы:)
                                                        0
                                                        Не маковод, но отвечу: так делают очень многие.
                                                        Мне очень близка парадигма работы с ФС, принятая в Фубаре
                                                        Большой скриншот
                                                        На ноуте, где у меня никсы, я пользуюсь DeaDBeeF, который открыто клонирует фубаровые подходы, а после установки одного-единственного плагина для навигации по ФС — полностью ему уподобляется.
                                                          0
                                                          Был бы дедбиф под мак рабочий — вообще здорово было бы.
                                                          +1
                                                          Кстати да! Я, как и автор, искал после перехода с Win на Mac аналог Winamp/Aimp, очень разочаровался, когда ничего устраивающего не нашел ну и начал по тихой грусти пользоваться iTunes. Поначалу плевался, так как привык напихать в плейлист всякого в разном порядке и слушать так. Когда немного подправил теги и привел в порядок аудио библиотеку понял, что iTunes крайне удобная и крутая штука, которая работает в отличие от Win на маке очень шустро!
                                                          Единственное, что советую: выключить в Настройках –> Дополнения –> Копирование в папку iTunes Media при добавлении в медиатеку, чтобы не плодить дубликаты. А для переключения треков кнопочками в баре есть отличное приложение You Control Tunes, ничего лишнего, работает отменно, при этом бесплатное.
                                                            –1
                                                            >Единственное, что советую: выключить в Настройках –> Дополнения –> Копирование в папку iTunes Media при добавлении в медиатеку, чтобы не плодить дубликаты.

                                                            Вот заметьте — Вы все-равно храните коллекцию в виде обычных файлов. И даже специально Айтюнс настраиваете, чтобы он в свою библиотеку все не тащил. А раз уж коллекция все-равно в файлах, так пусть уж плеер не заморачивается вопросами структурирования, а просто играет файлы «как есть».
                                                              +1
                                                              А кто будет замарчиваться вопросами структурирования? Я сам? Увольте.
                                                              Что плохого в том, что айтюнс копирует музыку в свою библиотеку? Кинул папку в айтюнс, удалил оригиналы.
                                                                0
                                                                Да, сам. В том и смысл. Нет, ну я понимаю, кому-то лень. Но мне не лень, мне как-раз очень нравится разложить все как надо, а не как там себе айтюнс думает. Репл для тех, кому не лень:)

                                                                >Что плохого в том, что айтюнс копирует музыку в свою библиотеку? Кинул папку в айтюнс, удалил оригиналы.

                                                                Плохо то, что структуры там в айтюнсе нет. Моей структуры.
                                                                  0
                                                                  > кому не лень
                                                                  и много свободного времени.

                                                                  Только не говорите что вы создаете папку жанр как указано у вас в тексте поста
                                                                    0
                                                                    Да, что такого? Конкретно папок жанров у меня три — «рок», «попса» и «классика».

                                                                    Плюс папки «детское», «саундтреки», «аудиокниги» и тому подобное, в которых свои исполнители, альбомы и треки.

                                                                    Плюс папки типа «рингтоны», новогоднее", «квартет И» и подобные, где сразу идут треки.

                                                                    Да много всякого. У меня не только музыка, у меня куча всякого аудио.
                                                                      0
                                                                      а если это детская попса?
                                                                  0
                                                                  У меня просто не так часто появляется новая музыка, поэтому я ее и складываю, например, по году, когда она ко мне прибыла, ну или на несколько больших папок типа Soundtrack, Electronic, Ambient, Pop. Мне так просто проще иногда бывает найти желаемый трек, типа: ох, по-ходу это из старых песен что-то, залез на диск в папку старое, покрутил, нашел трек, включил в iTunes :))
                                                                    0
                                                                    Можно создать плейлист по дате добавления в библиотеку айтюнса.
                                                                    У меня обычно смартплейлисты: новое за последнюю неделю, за месяц, не прослушанное
                                                                0
                                                                Вообще пришел к выводу, что когда речь идет о часто используемых приложениях, проще адаптироваться под использование стандартных, чем изобретать велосипед.
                                                                  0
                                                                  попробуйте Clementine и Cog, я тоже мучался как вы проблемой похожего на AIMP и вот они нашлись, iTunes удалил сразу же.
                                                            0
                                                            Вы бы по-адекватнее что-ли музыку бы добавили перед тем, как снимать скриншоты для сайта :)
                                                              +1
                                                              Я соавтор этой музыки, это такая шутка «для своих»:)
                                                                +2
                                                                Упс....)
                                                                  +2
                                                                  Хм, а можете в таком случае рассказать — почему группа называется «ПассатижЫ», а на обложке

                                                                  image

                                                                  кусачки?
                                                                    +1
                                                                    Да просто потому, что я не нашел красивой картинки с пассатижами:) Физического носителя альбома не существует, никаким оформлением никто не занимался, я просто прикрутил картинку из Гугла, когда заливал файлы на Саундлауд.
                                                                      0
                                                                      Нечаянно минус вместо плюса влепил, прошу прощения
                                                                        0
                                                                        Кстати, на правах оффтопика:
                                                                        Это не что иное, как картина Евгения Рухина под названием… Пассатижи.
                                                                        Впрочем, это не помешало продать картину за пачку мертвых президентов 12 тысяч долларов.
                                                                  0
                                                                  Охххх… Сообщения к коммитам на русском, вы серьезно?
                                                                    +4
                                                                    Я знаю русский значительно лучше английского. Я не готов мучаться с переводом. Серьезно.
                                                                      0
                                                                      Странно: по вашему резюме на hh у меня сложилось впечатление об обратном — 1) Развитие сети платежных терминалов в странах Латинской Америки; 2) Работа в аутсорсинговом проекте для американской компании Omniture.
                                                                        0
                                                                        То есть музыку по папочкам распихать не лень, а переводить — лень? Странно.
                                                                          0
                                                                          Дело в том что я пару раз сталкивался с такой проблемой: нашел либу на гитхабе, по названию что-то интересное, посмотрел код — выглядит весьма неплохо. Но readme и коммиты на японском.
                                                                          Потому иногда приходится забивать на хорошие вещи из-за языкового барьера.
                                                                        0
                                                                        Добавьте, пожалуйста, скробблинг в ласт.фм. По-сути, скробблинг ничуть не усложнит интерфейс (кроме возникающей 1 раз формы логина).
                                                                          0
                                                                          Попробую с этим разобраться.
                                                                            0
                                                                            Если вдруг Вам еще интересно — я добавил скробблинг в ласт.фм :)
                                                                            0
                                                                            Мечта а не плейер, спасибо огромное! Поддержка lossless форматов — и цены вообще не будет
                                                                              0
                                                                              Спасибо, это приятно:) Форматами без потерь займусь в первую очередь, оказалось, это многим требуется.
                                                                                0
                                                                                Спустя год должен с горечью признать, что так и не разобрался с lossless форматами:(

                                                                                Нет сил и времени вчитываться в англоязычные спецификации, а на русском ничего не нашел, к сожалению.
                                                                                +2
                                                                                Эти кнопки есть в на клавиатуре. Зачем они в статус баре?

                                                                                Ваши выпадающие списки это графический интерфейс. Графический интерфейс зло, выпадающие списки зло (с этим даже спорить не надо). Плеер двойное зло.

                                                                                В доке «кнопачка» по больше будет.
                                                                                  0
                                                                                  >Эти кнопки есть в на клавиатуре. Зачем они в статус баре?

                                                                                  Это хороший вопрос. Горячие клавиши (и мультимедиа-клавиши) я обязательно сделаю. А в статусбаре — потому что я лично люблю мышку и не люблю горячие клавиши.

                                                                                  >Ваши выпадающие списки это графический интерфейс

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

                                                                                  >В доке «кнопачка» по больше будет.

                                                                                  Что? Простите, не понял.
                                                                                    0
                                                                                    «Не люблю горячие клавиши» это что то из разряда вредных привычек.

                                                                                    Я не думаю что кто-то добавит в плеер (или откроет через плеер) всю свою библиотеку. Пользователь будет бить точечно: 2-3 альбома или дискография одного исполнителя. Для таких случаях лучше использовать одноколоночную ленту с разделителями по альбому или автору как предложил пользователь shara.
                                                                                    Возможно плееру лучше научиться определять что я открыл. и подстраиваться под одноколоночную ленту или выпадающие списки.

                                                                                    >>В доке «кнопачка» по больше будет.
                                                                                    >Что? Простите, не понял.
                                                                                    Да легче в айтюнс тыкнуть и там разбераться с выбором и порядком воспроизведения. =)

                                                                                    Про плейлисты. Вся сила в смарт плейлистах. Например такой извращенец как я составляет их по датам добавления в библиотеку или по кол-ву или отсутствию прослушивания.
                                                                                      0
                                                                                      >«Не люблю горячие клавиши» это что то из разряда вредных привычек.

                                                                                      Да, каюсь. Поэтому Репл будет поддерживать горячие клавиши.

                                                                                      >Я не думаю что кто-то добавит в плеер (или откроет через плеер) всю свою библиотеку. Пользователь будет бить точечно: 2-3 альбома или дискография одного исполнителя.

                                                                                      Вот тут как-раз у меня противоположное мнение. Я практически всегда открываю всю коллекцию и слушаю музыку в фоне, все подряд, в случайном порядке. При этом постоянно возникает желание запустить какой-то конкретный трек — и вот в Репле очень удобно его найти и запустить. Мне нужен быстрый обзор всей коллекции и легкий доступ к любому треку.

                                                                                      >Про плейлисты. Вся сила в смарт плейлистах. Например такой извращенец как я составляет их по датам добавления в библиотеку или по кол-ву или отсутствию прослушивания.

                                                                                      Верю. Но не согласен:)
                                                                                  +1
                                                                                  Логично отображать в статус баре состояние обьекта, а не добавлять туда функции управления
                                                                                    0
                                                                                    Функции управления там тоже удачно помещаются. Это место всегда доступно, и пользоваться кнопками управления там очень удобно.

                                                                                    Что касается состояния, то сейчас состояние «играет/не играет» отображается — кнопка пуск/пауза меняет вид в зависимости от состояния.
                                                                                      0
                                                                                      К нам не желаете отправить?
                                                                                        0
                                                                                        Не слышал про вас раньше. Но сейчас прочитал и хочу:)
                                                                                          0
                                                                                          отправьте из приложения или на editor@hack-store.com с подробной информацией и скринами и наши ребята добавят :)
                                                                                            0
                                                                                            Я отправил, год назад, но мне ничего не ответили:(
                                                                                    0
                                                                                    >Кроме того, с обычными файлами значительно удобнее производить разные манипуляции, не связанные собственно с прослушиванием. Скажем, существенно проще напрямую скопировать пару папок с файлами, чем предварительно делать экспорт из библиотеки, или искать, где именно хранятся файлы, отображаемые в библиотеке.

                                                                                    Экспорт? Можно открыть любой из плейлистов/исполнителей/чего угодно в iTunes, и просто перетащить оттуда мышкой музыку в любую папку.

                                                                                    Для меня прелесть библиотеки iTunes именно в том, что я, наконец, могу забыть про файлы и сосредоточиться на музыке. Автоматическая сортировка по жанрам, поиск по исполнителю, Genius-плейлисты и миксы, не говоря уже о том, что музыка доступна через облако на всех девайсах… :)
                                                                                      0
                                                                                      Занятно. Я как раз считаю, что текущая система ID3-тегов, где жанр задаётся только одним тегом, неудобна и ограниченна, а ведь она куда более функциональна, чем организация музыки в виде иерархической файловой системы.
                                                                                      На мой взгляд, самое удобное — когда одного и того же исполнителя (скажем, Amesoeurs) можно найти по тегам French, Shoegaze, Black Metal, Post-Black Metal. Когда буквально за пять секунд можно поставить на проигрывание все песни в аудиотеке, написанные в семидесятых. Иерархическая файловая система такого не позволяет.
                                                                                        0
                                                                                        Я считаю, что один исполнитель работает в одном жанре. Ну, в основном. Поэтому мне вполне достаточно одного тега на уровень иерархии.

                                                                                        Много тегов — это граф с произвольными связями, по нему перемещаться неудобно. А по дереву — удобно. Опять же, дерево, в каком-то смысле, упрощает муки выбора — структура проста и понятна, мозг нагружать не надо:)
                                                                                          0
                                                                                          Даже если говорить об одной композиции, она может характеризоваться помимо исполнителя сочинителем, жанром, поджанром, какой-либо специфической школой, страной происхождения, десятилетием написания и ещё множеством разных тегов.
                                                                                          Много тегов — это возможность гибкого составления блеклистов.
                                                                                          Дерево, кстати, создаёт муки выбора уже в процессе создания. Например, если мы решили делать первым уровнем иерархии делать жанр, то что делать с альбомом, на котором есть песни в разных жанрах? Что делать с совместным альбомом двух исполнителей, каждый из которых уже есть в аудиотеке? Любое решение будет неверным.
                                                                                        0
                                                                                        Есть данные по загрузке ЦП при воспроизведении / влиянии воспроизведения на расход батареи?
                                                                                        Вопрос возник потому, что если класс NSSound не предназначен для постоянного воспроизведения музыки, то возможно он плохо оптимизирован (ну к примеру неоптимально использует железо для декодирования mp3).
                                                                                        И насколько существенны утечки памяти при непрерывном например 10-часовом воспроизведении?
                                                                                          0
                                                                                          Я переписал плеер на AVFoundation.
                                                                                          +3
                                                                                          Оффтоп, конечно, но хочется добавить.

                                                                                          Я заметил за собой наоборот некое безразличие к файловой системе, когда пересел за мак. До этого тоже бережно относился к структуре папочек, все раскладывал, переименовывал и т.д. Это относилось и к музыке и к фоткам. Помнится, более 10ГБ фоток и почти 80ГБ музыки. Сейчас как вспомню, так жутко — сколько времени впустую терял. И все это по одной единственной причине — не было под рукой удобного интерфейса, который вместо папочек и файлов с фотками и музыкой позволял бы мне работать непосредственно с самими фотками и музыкой. На маке с ITunes, Picasa (и позже iPhoto) я вообще забыл про файловую систему, мне стало абсолютно все равно, как там хранятся файлы. Вот у меня есть папки «Музыка» и «Фото», я знаю что там лежит, но как — не знаю, потому что я их не открываю. Я открываю iTunes и слушаю музыку, делаю плэйлисты или включаю радио. Я открываю iPhoto и скидываю последние фотки с телефона (хотя последнее время уже редко — все перетекло в онлайн).

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

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

                                                                                            Да и не получается как-то забыть про файлы, даже если стараться. Понадобилось, допустим, загрузить ребенку в андроидо-планшет или в просто-без-операционки-плеер пару сказок. Как это сделать, не оперируя файлами?
                                                                                            0
                                                                                            К сожалению, этот класс со страшной силой жрет память. На проигрывание каждого нового трека выделяется некоторое количество памяти, а после окончания трека память не освобождается. Тут либо я чего-то не понимаю и просто криво написал код, либо NSSound действительно предназначен только для однократного воспроизведения одного фиксированного звука.

                                                                                            Судя по всему NSSound работает через OpenAL, значит перед проигрыванием загружает трек в память. Это хорошо для случаев, когда важен низкий лаг при проигрывании (эффекты в играх типа выстрелов), но в вашем приложении актуальнее использовать AVAudioPlayer. Отслеживание окончания воспроизведения песни легко реализуется через его делегат.
                                                                                            Но в любом случае, после окончания трека память нужно освобождать удаляя объект NSSound или AVAudioPlayer, подробнее напишу в ЛС.
                                                                                              0
                                                                                              Простите, по прошествии времени я уже запутался, кто что мне писал по поводу AVAudioPlayer… В общем, в итоге я таки переделал плеер на AVAudioPlayer. На всякий случай — спасибо:)

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

                                                                                            Самое читаемое