- Руководство по консольному аудиоплееру CMus
- Особенности CMus
- Использование CMus
- Режим библиотеки
- Режим сортированной библиотеки
- Команды и клавиатурные сочетания CMus
- Использование тем (цветовых схем)
- Активация подписок Last.fm и Libre.fm
- Компиляция и установка CMus в Debian 5.0 Lenny
- Десять консольных музыкальных плейеров для Linux
- mp3blaster
- Herrie
- mplayer
- PyTone
- PyRadio
- ogg123
- mpg123
- MOCP — Music On Console Player
- Содержание
- Установка
- Интерфейс и управление
- Псевдографический интерфейс
- Управление из командной строки
- Графическое управление
- Интеграция с conky
- Настройка
- Консольный проигрыватель .wav для pc-speaker в Linux
Руководство по консольному аудиоплееру CMus
CMus — это мощный свободный консольный аудиоплеер, использующий библотеку ncurses . CMus поддерживает разные музыкальные форматы файлов, включая Ogg Vorbis, FLAC, MP3, WAV, Musepack, WavPack, WMA, AAC и MP4. Хотя CMus — не единственный плеер для терминала (есть также MOC , Herrie или mp3blaster ), я предпочитаю его из-за уникальных клавиатурных сочетаний и мощных функциональных возможностей.
Особенности CMus
Ниже представлены основные возможности CMus:
- воспроизведение без пауз между треками;
- поддержка ReplayGain;
- потоковое воспроизведение mp3 и Ogg с SHOUTcast или Icecast;
- поддержка плейлистов с мощными фильтрами;
- очередь воспроизведения;
- файловый браузер;
- поддержка подписок на Last.fm или Libre.fm (с помощью скриптов);
- семь различных режимов пользовательского интерфейса;
- цветовые темы;
- клавиатурные комбинации в стиле Vi.
Использование CMus
Для начала добавим несколько песен в нашу медиа библиотеку. CMus использует команды в стиле Vi, поэтому все они начинаются с двоеточия. Например, чтобы добавить аудио файл в директорию
/music, используется следующая команда:
Чтобы выйти из CMus, используется команда :q (или клавиша Q ).
CMus имеет семь режимов интерфейса, которые переключаются с помощью клавиш 1-7:
- библиотека — вид по умолчанию, включающий две вкладки, на одной из которых отображаются исполнители/альбомы, на другой — список треков из выделенного альбома;
- сортированная библиотека, плейлист, позволяющий переходить между заданными треками;
- плейлист с возможностью его редактирования;
- очередь воспроизведения;
- файловый браузер;
- фильтры, список фильтров, заданных пользователем;
- настройки, здесь показаны горячие клавиши и команды.
Режим библиотеки
Два режима, которые обычно используются чаще всего, это первый и второй. Для начала посмотрим на первый:
На левой вкладке отображаются исполнители и их альбомы. Для перемещения используются клавиши со стрелками вверх/вниз или J и K . Чтобы развернуть пункт в древовидную структуру, используется пробел. При выделении альбома его треки отображаются на правой вкладке. Переключившись между вкладками с помощью клавиши TAB , можно запустить воспроизведение текущей песни клавишей Enter . Еще несколько полезных клавиш:
TAB — переключение между вкладками
X — запуск воспроизведения
V — остановка воспроизведения
C — пауза
— уменьшение громкости на 10%
+ увеличение громкости на 10%
Режим сортированной библиотеки
Второй режим (сортированная библиотека) позволяет быстро перемещаться между треками, нажав клавишу / (слэш) и слово или несколько символов из названия трека, который вы хотите найти. Дважды нажмите Enter для воспроизведения песни или N для поиска следующего совпадения.
Команды и клавиатурные сочетания CMus
Используя стиль Vi, CMus позволяет вводить команды, начинающиеся с двоеточия, и поддерживает автодополнение по TAB. Ниже приведены некоторые полезные команды (полный список доступен в режиме 7 или в man-странице программы):
- :set softvol=true — включить программное управление громкостью;
- :add /path/to/music/dir — добавить все аудио файлы из /path/to/music/dir в библиотеку;
- :clear — очистить плейлист;
- :save playlist.pls — сохранить текущий плейлист;
- :load playlist.pls — загрузить playlist.pls
- :set status-display-program=/path/to/scrobbler — задает скрипт для подключения подписки Last.fm
Использование тем (цветовых схем)
CMus поддерживает несколько цветовых схем, которые включаются с помощью команды :colorscheme . Например, :colorscheme xterm-white выглядит так:
Активация подписок Last.fm и Libre.fm
Хотя CMus по умолчанию не включает возможности подключаться к Last.fm, на официальном сайте программы выложены несколько скриптов, которые позволяют легко сделать это. В нашем примере рассмотрим скрипт на Perl, который доступен здесь под именем post-fm. Во-первых, скачайте отсюда скрипт и скопируйте его в вашу директорию
/.cmus, затем откройте его в текстовом редакторе, чтобы добавить свои логин и пароль на Last.fm. Вставьте ниже свои логин и пароль:
Далее, сделайте скрипт исполняемым:
Теперь можно его активировать. Последняя версия CMus имеет команду :set status-display-program , позволяющую задать скрипт, спомощью которого вы хотите прослушивать треки. Для включения скрипта введите следующую команду:
Теперь ваша подписка должна быть активирована. Для Libre.fm необходимо раскомментировать строку # host => ‘turtle.libre.fm’, , и ниже вводить имя пользователя и пароль.
Компиляция и установка CMus в Debian 5.0 Lenny
Во-первых, установите необходимые зависимости:
Скачайте архив с исходным кодом с официального веб-сайта и распакуйте его:
Теперь компилируем и устанавливаем:
последнюю команду необходимо выполнять от имени root, либо можно задать соответствующий префикс и устанавливать программу как обычный пользователь:
В этом случае необходимо убедиться, что путь /home/USER/usr/bin есть в вашей переменной $PATH .
Источник
Десять консольных музыкальных плейеров для Linux
Это один из лучших и самых функциональных плейеров для консоли. Он создан с использованием ncurses и имеет текстовый пользовательский интерфейс с несколькими режимами просмотра, позволяющими упорядочить вашу музыку по исполнителям/альбомам, показывать ее в виде плейлистов или библиотеки, а также просматривать файловую систему. CMus также поддерживает поисковые функции и интеграцию с Last.fm/Libre.fm с помощью скриптов. Плейер использует клавиатурные сочетания в стиле Vi.
mp3blaster
mp3blaster — один из самых популярных консольных музыкальных плейеров. Он использует ncurses, а его возможности включают группировку треков и плейлистов, режимы случайного и циклического воспроизведения.
MOC значит Music on Console и он представляет собой двухпанельный аудиоплейер с файловым браузером в левой панели и плейлистом в правой. MOC также создан на базе ncurses и поддерживает режимы случайного и циклического воспроизведения, а также регулировку уровня громкости.
Herrie
Еще один консольный аудиоплейер на базе ncurses. Herrie представляет собой минималистичный плейер, поддерживающий плейлисты, различные типы аудио файлов, включая Ogg и MP3, и переход по трекам плейлиста.
mplayer
Это mplayer, известный видео/аудио плейер и конвертер. Однако MPlayer также можно использовать в качестве аудиоплейера командной строки, и он поддерживает практически все форматы файлов, включая Ogg, FLAC, MP3 и WAV.
Разработчики расшифровывают его название как «Sound eXchange, the Swiss Army Knife of audio manipulation», то есть своеобразный универсальный швейцарский нож в области аудио. И действительно, SoX — это очень мощная программа для работы с аудиофайлами, которая может быть использована в качестве терминального аудиоплейера с помощью команды play music_file.
PyTone
Написанный на Python, PyTone представляет собой еще один консольный аудиоплейер, простой и незамысловатый. Он поддерживает форматы MP3 и Ogg.
PyRadio
Еще одна программа, написанная на Python, PyRadio, которая способна воспроизводить интернет-радио в терминале. Для ее использования скачайте архив отсюда, распакуйте его и запустите скрипт ./pyradio.
ogg123
Эта маленькая утилита командной строки включена в состав пакета vorbis-tools и способная воспроизводить форматы Ogg и FLAC. Она обладает только базовой функциональностью, но зато работает очень быстро.
mpg123
То же самое, что и ogg123, но воспроизводит формат MP3.
Источник
MOCP — Music On Console Player
Содержание
MOCP (также именуется MOC) — аудиоплеер, известный прежде всего благодаря своему консольному интерфейсу, что во многих случаях является ощутимым преимуществом. он реализован в виде двух составных частей — собственно демона 1) -проигрывателя и псевдографического интерфейса на ncurses. вот небольшой список преимуществ данного проигрывателя:
Вкратце можно сказать, что mocp — отличный плеер для тех, кому от плеера требуется именно то, для чего он предназаченн — прослушивание музыки.
Установка
Первым делом потребуется установить пакет moc . например, с помощью apt-get :
Теперь нужно распаковать уже готовый пример файла настроек:
Интерфейс и управление
Псевдографический интерфейс
Установив пакет, запустите проигрыватель в терминале с помощью команды
Вы увидите знаменитый псевдографический интерфейс, который выглядит примерно так:
Честно говоря, при первом запуске он будет выглядеть немного иначе, но все можно настроить по вашему вкусу, о чем речь пойдет ниже. Сверху, на приведенном скриншоте, (по умолчанию в левой части) находится обозреватель файлов, из которого можно добавлять файлы и папки в плейлист, который находится внизу (а по умолчанию справа). В нижней части окна расположены индикаторы громкости, времени воспроизведения, указан текущий файл и прочая информация. Управление осуществляется с клавиатуры, поэтому рассмотрим основные сочетания клавиш:
Управление из командной строки
Проигрывателем можно управлять и без использования псевдографического интерфейса, напрямую из командной строки. Обо всех опциях можно почитать в
Здесь мы лишь рассмотрим основные команды:
Опции можно комбинировать.
очистит плейлист, добавит в него все содержимое папки «mp3/new», установит громкость в 55%, включит Shuffle и повтор и начнет воспроизведение.
Графическое управление
Возможность управления проигрывателем напрямую, без какого-либо интерфейса, можно использовать с применением творческого подхода. Можно назначить команды на комбинации клавиш (или использовать мультимедиа-кнопки клавиатуры при наличии таковых), можно поискать (или написать) какой-нибудь плагин к чему-нибудь… я же реализовал управление плеером, накидав на панель вот таких кнопок:
кнопки управления mocp на панели Gnome
Теперь разберемся, как их сделать. А делаются они точно так же, как любые другие кнопки запуска.
Для Gnome: щелчок правой кнопкой по панели → Добавить на панель… → Пользовательская кнопка запуска и задать команды для кнопок, иконки и подсказки к ним:
Создание кнопки запуска. (Самая полезная кнопка . Чтобы слушать музыку, достаточно курсором перенести файл или папку на эту кнопку)
Иконки взяты из стандартного набора Gnome, вы же можете подобрать любые другие на свой вкус. Ниже приводится список команд для каждой кнопки и иконки к ним.
Действие | Команда | Путь к иконке |
---|---|---|
воспроизвести файл/папку | mocp -c -a «$1» -p -v 40 | /usr/share/icons/Humanity/emblems/48/emblem-sound.svg |
предыдущий трек | mocp -r | /usr/share/icons/Humanity/actions/48/gtk-media-rewind-ltr.svg |
пауза/воспроизведение | mocp -G | /usr/share/icons/Humanity/actions/48/stock_media-play.svg |
следующий трек | mocp -f | /usr/share/icons/Humanity/actions/48/gtk-media-rewind-rtl.svg |
выключить все | mocp -x | /usr/share/icons/Humanity/actions/48/gtk-media-stop.svg |
текущий трек | moc-notify | /usr/share/icons/Humanity/actions/48/gtk-info.svg |
Уведомления:
Тут немного сложнее, ибо все делается с помощью отдельного скрипта, о котором речь пойдет чуть ниже.
Интеграция с conky
Для вывода строки с названием артиста и песни можно воспользоваться следующим скриптом. Не забудьте сделать файл исполняемым.
В конфигурационный файл conky, добавьте строку:
В итоге будет выводиться бегущая строка шириной в 45 символов и одновременно будет выводиться только 20 из них.
Настройка
Настройки программы содержатся в файле .moc/config . здесь мы рассмотрим основные опции:
Помимо этого есть еще множество связанных со звуком настроек, но если все играет, трогать их стоит только если вы четко понимаете, чего хотите добиться.
Ниже приводится скрипт, отображающий popup-уведомление с данными о текущем треке:
Для корректной работы задайте значение параметра FormatString в
Источник
Консольный проигрыватель .wav для pc-speaker в Linux
Давно хотел написать проигрыватель для pc-speaker и чтобы не только ноты и монофонические мелодии. Но в то время когда это было актуально (DOS — навсегда!) у меня не было ни знаний, ни способностей, ни помыслов. Позже я не смог пробиться к нему сквозь Windows DDK и продолжал тихо пищать в стиле QBASIC SOUND. Да и актуальность pc-speaker как звукового устройства стала нулевой, гордый speaker превратился в beeper и buzzer. Однако он никуда не исчез из ПК (попутно пережив все дисководы) по прежнему давая о себе знать при включении и сообщая об ошибках. Так можно ли в современном программно-аппаратном user-space окружении проиграть полифоническую мелодию или голос на pc-speaker? Конечно можно — Си и Linux нам в этом помогут.
Посвящается, мужику в шляпе и очках, посылающему всех в известном направлении (неизвестного мне автора, всё хорошо работает в DOSBox).
Что представляет собой спикер с точки зрения программиста? Это устройство с двумя состояниями: включен и выключен — этим мы управляем мембраной (наверное, а может каким нибудь другим активным элементом) которая издаёт звук. Порог слышимости человека по заверениям биологов около 22КГц сверху и 20Гц снизу, поэтому мы должны переключать состояния очень быстро. Обычно спикер управляется интервальным таймером, но этим способом мы можем проигрывать звуки только заданной частоты и длительности, для чего существуют готовые программные (получать доступ к таймеру напрямую совсем не обязательно) и пользовательские интерфейсы. Например, для консоли Linux нота «До» первой октавы, длительностью 1 секунда:
Вторая команда echo возвращает установки длительности и частоты звука в состояние по умолчанию.
Для доступа к управлению спикером напрямую надо общаться с 0x61 (шестнадцатеричные 61) портом, с его нулевым и первым битами. Нулевой бит: управляет привязкой спикера к таймеру — если 1 то управляется таймером. Первый бит: переключает состояния спикера — 1 включен, 0 выключен. Этот тот способ который мы будем использовать.
Теперь чтобы понять как играть мы должны определится что же мы будем играть. Для проигрывания будем использовать .WAV файлы. Формат данных .WAV файла может быть разнообразным, но обычно под ними подразумеваются файлы содержащие данные в импульсно кодовой модуляции. Это последовательность значений получаемых с заданной частотой (частотой дискретизации) с АЦП и записанных в файл как есть, для каждого из каналов. С точки зрения звука — это громкость в данный момент времени или с точки зрения динамика — положение мембраны относительно точки покоя. Максимальное значение полученное с AЦП за раз, задаёт величину битового потока (bitrate). Совокупность записей данных обо всех каналах в данный момент времени, это сэмпл. Говоря про звук надо обязательно вспомнить про теорему Котельникова, и сказать что по этим данным мы имеем возможность восстановить исходную волну (при больших значениях частоты дискретизации и битового потока) без потерь. Но в нашем случае это не сработает, потому что у спикера нет понятие громкости, точнее она есть, но её нельзя менять — или вся громкость (включен) или её нет (выключен). Учитывая что дискретизация по громкости AЦП также имеет конечную точность, становится ясна ценность «тёплого лампового звука».
Записанные данные представлены в виде положительных и отрицательных значений (движение волны которая пересекает ось абсцисс), но несколько в ином формате: за ноль (тишину) принимается половина от максимального значения. Если у нас данные представлены однобайтными отсчётами, то ноль будет 256/2 = 128. 256 это максимальное возможное количество чисел которое может быть представлено одним байтом, или 256 = 255(0xFF, максимальное значение числа) + 1. Соответственно, если для записи используются 2-а байта, то (65535 + 1)/2 = 32768. Значения больше этого числа являются положительными, и растут от меньшего к большему, значения меньше этого числа отрицательные, и уменьшаются от большего к меньшему. Например, переведём в обычное число для однобайтных значений:
Как уже было сказано выше, мы можем только включить и выключить спикер, то есть из полученных данных мы сформируем прямоугольную волну, где 1 — это значения больше ноля, 0 — во всех остальных случаях. Больше подробностей про то, как играть на спикере, можно посмотреть здесь, эта статья послужила отправной точкой в задуманной реализации, большое спасибо за это её автору.
Начнём осуществлять задуманное. Сразу оговорюсь, что проигрывается только один канал, максимальный размер данных для анализа 4 байта на канал (учитывая что для спикера хватить и одного бита для максимального возможного качества, то это величина избыточна в 32 раза). С самого начала, я видел две большие проблемы:
Первая, доступ к портам — как всё просто было в DOS, до такой же степени всё сложно было для меня в Windows. Однако Linux предоставляет совершенно шикарнейшую возможность прямого доступа к портам, надо только знать пароль root, или каким нибудь другим способом получить права суперпользователя, а точнее привилегию CAP_SYS_RAWIO для создаваемого процесса. Эта возможность называется ioperm и позволяет открыть доступ ко всем портам в диапазоне от 0 до 0x3FF. Хочется больше, используем другой вызов — iopl, нам он не пригодится.
Доступ непосредственно к портам ввода вывода, после разрешения, осуществляется с помощью макросов описывающий inline вставки на ассемблере. Можно записывать(out) и читать(in) байты(b), слова(w), двойные слова(l), строки(s), использовать паузу (_p) после операции. MAN страница содержит крайне мало информации и больше пугает что так делать не стоит, поэтому лучше смотреть в исходники заголовочных файлов. Если использовать макросы с _p, то дополнительно надо открыть доступ к 0x80 порту, потому что задержка выполняется выводом байта данных в этот порт.
В программе — сначала инициализируем доступ к портам, сохранив значение которое уже было в 0x61 порту, для восстановления после работы программы:
В конце, вернём как было:
125микросекунд. При 22КГц, это уже 45 микросекундные интервалы. Такие задержки, если верить MAN, возможны при использовании usleep или nanosleep. Но сначала, где их надо было делать:
Это и есть практически вся программа, всё остальное — чтение из файла и предварительный анализ данных.
Так вот, как же с задержками? Использование usleep и nanosleep не дало никаких результатов, точнее они дали результаты, но при значениях паузы меньше 10 микросекунд. Если пауза была больше, звук ломался непоправимо, и дело не высоте звучания, а в том что пауза не выдерживалась, не было ритмичности, то есть каждый проход цикла была разной длительности. Подумав что процесс имеет слишком низкий приоритет — используем nice. Но ни утилита, ни программный вызов проблему не решили. Осталось попробовать поменять политику планировщика:
Я не уверен в правильности использования, но в таком виде не помогло (данный код остался в программе закомментированным, на случай если это всё же помогает, то его можно будет вернуть в дело, также как и nice). Всё это было перепробовано следуя рекомендациям с этой страницы. Оставалось попробовать только пустой цикл, вместо usleep… и он дал результат — можно было слышать не только музыку, но и речь.
Всё работало. Это вселяло надежду, но предвещало плохие последствия при переносе на другие машины. В последней ссылке, было пару абзацев про то, что вывод в порты даёт задержку около 1 микросекунды, я отнёсся к этому скептически, хотя макрос outb_p для вывода в порт с задержкой, руководствовался тем же принципом. В главный цикл добавили паузу:
— после чего программа была опробована на рабочем сервере, неожиданно для меня, ничего не ломалось и всё работало. Возможных проблем чтения из файла, во время проигрывания (замираний между циклами чтения), также не возникло ни на одном из испробованных компьютеров: файл читается буфером в 64КБ, при это заметного на слух искажения не происходит. Наличие любого постороннего кода в главном цикле, никак не влияет на качество звука, если только этот код не системные вызовы. В итоге, я пришёл к выводу, что чем мощнее компьютер тем лучше будет звучать наш спикер, как это не парадоксально. Если идти в сторону уменьшения мощности то в какой-то момент на многозадачных системах всё сломается, но перейдя на однозадачные, мы вновь добьёмся результата.
Честно говоря я не был уверен в каком бы то ни было положительном исходе, так как нормальных вариантов этой программы для DOS в своё время было два. Первый, запрещаем все прерывания (остаёмся монопольным владельцем всего) и выполняем код в лоб как это приведено выше, считая задержки по тактам в бесконечном цикле. Второй, настраиваем таймер на максимальную частоту (минимальный интервал как раз около 1 микросекунды), забираем себе прерывание 0x8 (IRQ0) и выдаём данные спикеру через собственные подсчитанные интервалы, не давая никому вмешиваться в этот процесс. Оба этих варианта в user-space окружении Linux неработоспособны, но я рад что всё получилось вот так странно.
Теперь несколько строк о том что в остальной части кода. В основном это разбор заголовка .WAV файла, найдя вот это описание, я разобрал все поля, провёл по ним проверки, но первый же скачанный из интернета файл оказался не того формата. Затем обратившись к этому документу и упростив разбор, учтя новые данные, скачал из интернета второй файл, который поставил меня в тупик отсутствием поля в 2-а байта перед цепочкой fact, в итоге пришлось ещё сократить проверки, чтобы добиться выполнения какого-то разумного количества произвольных файлов.
В анализе заголовка .WAV содержится проверка на типы данных, с использованием конструкции sizeof, предполагается что используемые типы данных int в 4 байта, short int в 2 байта и char — 1 байт. В таком виде можно компилировать и для 64-х битных систем. Если это не так, то проверка не должна пройти, и программа выдаст ошибку о не поддерживаемом формате .WAV.
Также в коде осталась попытка визуализировать процесс, но совмещая со звуком, получаем только кваканье и треск, поэтому график можно увидеть, но без звука. Кстати можно оценить насколько медленнее происходит проигрывание (или сравнить свои визуальные и звуковые ощущения), при использовании usleep в качестве задержки.
Это моя первая программа специально для Linux на компилируемом языке, поэтому для тех кто ищет conio.h из Borland C, здесь его нет, но тут всё гораздо лучше: ESC-последовательности (или man console_codes) заменяют почти всё, кроме kbhit (это просто один из режимов чтения), и получения размеров экрана консоли, но тут надо обратиться к устройству напрямую с помощью ioctl (man console_ioctl):
Запускать можно с тремя параметрами, первый — файл для проигрывания,
второй — умножитель времени: чем он больше тем тон ниже, если второй параметр не число или его нет, то значение используется по умолчанию 650000,
третий — любое значение, сообщает программе что надо вывести график на экран (без звука).
Источник