Stary odtwarzacz mp3 jako przeglądarka tekstu i kodu
Odtwarzacz mp3 Creative MuVo nie ma możliwości wyświetlania plików tekstowych (eboki, etc) na ekranie. Poniższy post jest o tym, co zrobić, by jednak wyświetlić tekst, a jednocześnie móc słuchać muzyki :)
Trick polega na tym, iż odtwarzacz ma możliwość wyświetlania słów aktualnie słuchanej mp3'ki. W katalogu głównym odtwarzacza znajduje się katalog LRC, gdzie są pliki o takiej samej nazwie, jak nazwa piosenki ale o rozszerzeniu lrc.
Potrzebny jest program, który pobierze ścieżkę do pliku, który chcemy wyświetlać i tytuł mp3'ki, a następnie generuje w katalogu LRC odpowiedni plik lrc.
Program przyjmuje zarówno ścieżki względne jak i bezwzględne, lecz trzeba pamiętać by jako separatora pod Windowsem używać znaku / zamiast \.
Przykład uruchomienia (plik wyświetlany: ptaszki.hs, mp3'ka: Him - Join Me.mp3 z katalogu LiBrary A):
I:\LRC>main.exe ptaszki.hs "I:/LiBrary A/Him - Join Me.mp3"poniżej znajduje się kod źródłowy w Haskellu:
import System.Environment
import System.IO
import Control.Exception
import System.FilePath.Posix
main = do
args <- getArgs
let sourceFile : mp3File: _ = args
let lrcFile = (takeBaseName (takeFileName mp3File)) ++ ".lrc"
bracket (openFile sourceFile ReadMode) hClose
(\hIn ->
bracket (openFile lrcFile WriteMode) hClose
(\hOut -> parseMe hIn hOut 0))
return()
parseMe :: Handle -> Handle -> Integer -> IO()
parseMe hIn hOut time = do
isEOF <- hIsEOF hIn
if isEOF then return() else do
line <- hGetLine hIn
let secs' = mod time 60
mins' = div time 60
-- we neeed time in form [mm:ss], that's why we add zeros
secs = (if secs' < 10 then "0" else "") ++ show(secs')
mins = (if mins' < 10 then "0" else "") ++ show(mins')
in hPutStrLn hOut ("[" ++ mins ++ ":" ++ secs ++ "]" ++ line)
parseMe hIn hOut (time + 4)
poniżej kawałek pliku lrc wygenerowanego przez program:
[00:00] [00:04]/* [00:08] * Copyright (C) Igor Sysoev [00:12] */ [00:16] [00:20] [00:24]#ifndef _NGX_OS_H_INCLUDED_ [00:28]#define _NGX_OS_H_INCLUDED_ [00:32]
Niestety wyświetlacz jest mały i kiepski, nie można ustawić podświetlania włączonego na stałe (pewnie dlatego, żeby oszczędzić baterię). Powoduje to, iż czytanie z wyświetlacza już po chwili staje się irytujące :|