Code snippets, ideas and events from IT related projects

by Robert Gawron

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 :)

player mp3 widok ogolny

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 \.

listing perl listing perl

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 :|

Pingbacks

No pingbacks yet

Comments

No comments for this post

Leave your reply

Let me know what you think

Required. 30 chars of fewer.

Required.

captcha image