Бесконечный проигрыватель
В деле проигрывания mp3-файлов, кажется, не осталось белых пятен, но я таки решил внести свои 5 копеек.
Вот решил человек, скажем, послушать музыку. Что в этом деле самое сложное? Технические вопросы вынесем за скобки, проигрывателей сейчас — на любой вкус. Самое сложное находится вне сферы IT. Самое сложное — составить хороший плэй-лист. Такой, чтобы хватило на несколько часов, пока вы, скажем, клеите обои в квартире. Вот такую задачу я и решил на коленке с помощью языка Groovy.
Итак, берем подборку музыки гига на 4. Естественно, в этой коллекции композиций, которые обладателю нравятся, не более половины. Открываем последовательно каталоги с «песнями» и в именах любимых файлов, ставим лидирующие плюсы, например так:
Это не мной придумано, многие меломаны так поступают. Согласитесь, ни один компьютер, ни одна программа за вас это никогда не сделает, так что работа отнюдь не бессмысленная. К тому же результат будет использоваться многократно. Пробегаемся так по как можно большему числу каталогов, чтобы подборка получилась подлиннее. Попутно наводим порядок в коллекции .
Далее создаем вот такой скрипт и помешаем его в файл Player.groovy. Можно скопировать прямо отсюда. Скрипт отлажен и работает (в том числе прямо сейчас у меня в наушниках).
Часть этого кода (функцию копирования потока в поток) я уже публиковал на Мтааламу. Так что вся соль — в последних строках. Создаем рекурсивный список файлов заданного каталога, запихиваем в вектор и перемешиваем в случайном порядке (shuffle). Затем все эти файлы гоним непрерывным потоком на output программы. Этот output можно передать по конвейеру, например, простейшему аудиоплееру — mpg123,
(вместо /mnt/offline нужно указать каталог с музыкой). А можно направить поток на вход программы ffmpeg и далее — ffserver'у, организовав многочасовую Интернет-трансляцию (пиратскую, вестимо).
Вот решил человек, скажем, послушать музыку. Что в этом деле самое сложное? Технические вопросы вынесем за скобки, проигрывателей сейчас — на любой вкус. Самое сложное находится вне сферы IT. Самое сложное — составить хороший плэй-лист. Такой, чтобы хватило на несколько часов, пока вы, скажем, клеите обои в квартире. Вот такую задачу я и решил на коленке с помощью языка Groovy.
Итак, берем подборку музыки гига на 4. Естественно, в этой коллекции композиций, которые обладателю нравятся, не более половины. Открываем последовательно каталоги с «песнями» и в именах любимых файлов, ставим лидирующие плюсы, например так:
Это не мной придумано, многие меломаны так поступают. Согласитесь, ни один компьютер, ни одна программа за вас это никогда не сделает, так что работа отнюдь не бессмысленная. К тому же результат будет использоваться многократно. Пробегаемся так по как можно большему числу каталогов, чтобы подборка получилась подлиннее. Попутно наводим порядок в коллекции .
Далее создаем вот такой скрипт и помешаем его в файл Player.groovy. Можно скопировать прямо отсюда. Скрипт отлажен и работает (в том числе прямо сейчас у меня в наушниках).
#!/usr/bin/groovy
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
// Это функция для копирования потока в поток, на ее разборе можно не заморачиваться
def stream2stream = {is, os ->
src = Channels.newChannel(is);
dest = Channels.newChannel(os);
buffer = ByteBuffer.allocateDirect(16 * 1024);
while (src.read(buffer) != -1) {
buffer.flip();
dest.write(buffer);
buffer.compact();
}
buffer.flip();
while (buffer.hasRemaining())dest.write(buffer);
}
// А вот отсюда начинается вся "соль"
v = new Vector()
new File(args[0]).eachFileRecurse {
if(it.getName().startsWith('+') && it.getName().endsWith('mp3'))v.add(it)
}
Collections.shuffle(v) // ...и хорошенько перемешиваем!
// Одна и та же подборка композиций
// за счет этого каждый раз
// будет восприниматься как новая.
v.each{stream2stream(new FileInputStream(it), System.out)}
Часть этого кода (функцию копирования потока в поток) я уже публиковал на Мтааламу. Так что вся соль — в последних строках. Создаем рекурсивный список файлов заданного каталога, запихиваем в вектор и перемешиваем в случайном порядке (shuffle). Затем все эти файлы гоним непрерывным потоком на output программы. Этот output можно передать по конвейеру, например, простейшему аудиоплееру — mpg123,
/usr/bin/groovy Player.groovy /mnt/offline | mpg123 -
(вместо /mnt/offline нужно указать каталог с музыкой). А можно направить поток на вход программы ffmpeg и далее — ffserver'у, организовав многочасовую Интернет-трансляцию (пиратскую, вестимо).
/usr/bin/groovy Player.groovy /mnt/offline | ffmpeg -i - http://192.168.99.99:9999/radio.ffm
Комментарии (4)
RSS свернуть / развернутьТру юникс вэй послужать музычку
Gangsta
Смех смехом, а время, за которое я этот способ организовал, сопоставимо с затратами на создание плэйлиста для любого известного проигрывателя. Мне кажется удобно: зашел в любой каталог, запустил скрипт — и слушаешь только избранные мелодии рекурсивно не отвлекаясь несколько часов на управление проигрывателем.
yababay
Sergei_T
Markony
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.