Fitting Your Music Library in Your Phone

[Fair warning: this was all done on an Ubuntu Linux system. It may work on other configurations, but YMMV]

Earlier this year, I bought myself a new phone, the Samsung Nexus S.

The Nexus S has the advantage of being what they call a “reference device”, that is, it’s one of the preferred devices used in the development of Android, which means that it is one of the first to be updated when new Android versions come out. It’s also light, thin, fast, and looks cool.

It has a downside, however — it doesn’t have a slot for an external memory card. The device itself comes with 16GB of internal memory, which should be enough for most needs, and in fact it is, except for one particular use-case: listening to music.

The problem is that I’d really like to be able to carry my complete music library with me at all times. While it’s true that a few GB worth of music should be more than enough for most occasions, I find that I’m too lazy to refresh the phone’s library regularly. Besides, if I find myself in the mood for a specific track, chances are, it won’t be preloaded on my device.

Even though I usually try to prune my music library of music I don’t really listen to anymore, over the years my library has grown to around 13GB in size. While that would still theoretically fit on my device, it wouldn’t leave much space left for other things, like offline maps, videos, and such.

Downsampling the Files

One solution to that problem is to simply “resample”, or “downsample” the MP3 files. That is, re-encode the file with lower quality settings, trading some of the sound quality for disk space.

There are many solutions for that on the Internet, but most depend on using LAME. The problem with those solutions is that LAME doesn’t preserve the metadata inside the MP3 file. Things like artist, album, song title and album cover (important for me, since it looks cool when playing in my car).

Enter GStreamer. Essentially GStreamer is a multimedia manager which combines various smaller tools to achieve it’s full functionality. Strangely, GStreamer seems to use LAME for it’s MP3 encoding, but somehow the output files preserve their metadata, including the album covers.

A few searches on the Internet led me to this page, where I learned the command line to convert a single file:

gst-launch filesrc location=input.mp3 ! decodebin2 ! audioconvert ! lamemp3enc target=bitrate cbr=true bitrate=128 ! id3v2mux ! filesink location=output.mp3
If you’re running this on Ubuntu, you’ll have to install the gstreamer-tools package, as well as the gstreamer0.10-lame (or the *ugly plugin set).
Also note the bitrate parameter above. It’s where the trade between quality and file size is made. 128 is an average recommended quality setting. Beware though — if you set it to a very high value, say 256, you might end up with a file which is larger than the original, even if its sound quality will be worse, since MP3 is a lossy format, and some sound quality is lost at each recompression.

Converting the Entire Library

Obviously it’d be too boring to convert 13GB of MP3 files one-by-one. A few more searches led me to this page, which features a script that does exactly that, though that script was meant for converting FLAC files into the MP3 format.

No big deal, a few simple changes to the script, and it’s working perfectly with our GStreamer command:

#!/usr/bin/env bash
# resamples all .mp3 files and saves them to the OUT directory.

LAMEOPTS="-V0 --quiet"

if [ "$#" -ne 2 ]
then
echo "usage: $0 MUSIC_DIR OUTPUT_DIR"
exit 1
fi

IN=$1
if [ ! -d "$IN" ]
then
echo "$IN is not a directory"
exit 1
fi

OUT=$2
if [ ! -d "$OUT" ]
then
mkdir "$OUT"
fi

# find all .mp3 and resample them
find "$IN" -iname "*.mp3" | sort | while read mp3;
do
OF=`echo "$mp3" | sed s,"$IN","$OUT\/",g`
dir=`dirname "$OF"`
if [ ! -d "$dir" ]
then
mkdir -p "$dir"
fi

# resample the MP3 files, preserving ID3 tags
echo "$mp3"
gst-launch filesrc location="$mp3" ! \
decodebin2 ! audioconvert ! \
lamemp3enc target=bitrate cbr=true bitrate=128 ! \
id3v2mux ! filesink location="$OF" > /dev/null
done

Past that script onto a text file named resample_mp3.sh and mark it executable (chmod +x resample_mp3.sh).

You might also want to drop it on your /usr/bin, so it’s easily accessible when you need it.

Now, on a terminal simply go to the parent directory of your music folder, and type the following command:

resample_mp3.sh Music AndroidMusic

The “AndroidMusic” folder will be automatically created, and your music library will be completely mirrored there with the resampled MP3 files.

Beware that the conversion is very CPU intensive and will take a long time. You should probably schedule it accordingly.

Finally…

Once you have your full library converted, you’ll want to copy it to your mobile phone / MP3 player.

When it comes the time to refresh my music library, I’ve found it quicker and easier to use RSync for Android. It works over the network so I don’t have to worry about plugging in, and it only copies the files which have changed, saving me from the headache of copying the entire folder again and again.

As for sound quality, sure, you trade a bit of it for disk space, but in my view it’s worth it, particularly since I usually won’t be plugging my mobile phone into high-end sound gear. In the car, and using cheap headphones, I’ve never been able to tell the difference.

It took my laptop (Intel Core i5 @ 2.4GH) around 6 hours to complete the procedure. In the end, my ~13GB library was reduced to ~8.7GB.

Now I won’t have to pick which music I bring with me anymore — I’ll just bring all of it.

[Edit: Increased the quality in the script, since the original (9) was too low and resulted in terrible sounding MP3 files. I also removed some redundant information]

[Edit 2: Changed the quality setting from VBR to fixed bit rate, as the previous setting was confusing the Android media player which was reporting much longer song times than normal.

Also removed the check for duplicate files. The script now overwrites any files already in the output folder. Be careful.

Finally, the files are sorted before resampling. The output order makes more sense, and this way it's possible to have an idea of how far along the process is just by looking at the current workload.]

Problem, Troll Physics?

I’ve been seeing these sort of math problems around a lot lately:

This one is from Troll Physics, a funny parody site which I recommend to anyone equipped with a sense of humour and an understanding of the basic exact sciences.

The problem with these types of math problems is that they aren’t properly described — that’s expected since otherwise the trick would be obvious to everyone.

In this particular case, there is an illegal conversion between the last two lines. If we look closely at the final simplification (the removal of a²-ab), it’s actually hiding an operation whereby both sides of the equation are divided by a²-ab.

These types of simplifications are so simple that they’re usually skipped when solving mathematical problems, which is convenient here, since it contributed to the illusion.

However, the reason it’s important to consider all operations is exactly to avoid falling into traps like the one above. Since in the beginning of the equation it was defined that a=b, then we know that  a²-ab must equal zero.

And what can’t you do with a zero?

You can’t use it as a divisor.

Manowar

Introdução

Há uns meses tive oportunidade de ver os Manowar ao vivo em Colónia.

Foi uma prenda de anos (obrigado, Ramona!), e o concerto foi absolutamente excelente. Menos não era de esperar de uma banda que anda nestas andanças desde 1980.

Eu já sou fã da banda há uma série de anos, mas a Ramona só os conheceu há pouco tempo, a propósito de ir ao concerto. Quando estávamos a ir para casa depois do evento a ouvir um CD dos Manowar (obviamente) no carro, ela fez uma observação curiosa — de que a palavra favorita da banda devia ser “steel” — “aço” em português — porque a usam muito frequentemente. Mesmo.

Ora, para quem não conhece os Manowar, eis como a Wikipédia portuguesa os descreve:

A característica marcante da banda, além de sua polêmica auto-promoção é seu discurso em prol do verdadeiro heavy metal, sua temática epica e lírica que mistura temas como mitologia nórdica, mulheres, velocidade, guerras, e a proclamação de que os fãs do Manowar são os melhores e mais dedicados fãs do mundo.

Ênfase minha. A Wikipédia inglesa vai mais longe:

They are known for writing lyrics with an emphasis on the heavy metal genre itself, fantasy (particularly sword and sorcery) and mythological topics (particularly Norse mythology).

Mais ênfase minha.

Ok, eles cantam sobre metal (o género musical) e combates medievais, ambos temas em que a palavra “steel” é apropriada, mas nunca tinha reparado um amor maior por essa palavra do que por outras relacionadas com o género. No entanto, no preciso momento em ia defender a banda dizendo que era exagero, a música entrou num refrão em que figurava a palavra repetidamente. Na música seguinte aconteceu o mesmo, e na seguinte também.

Hipótese

Será que a Ramona tinha razão? Será que os Manowar usam a palavra “steel” mais do que qualquer outra? Era preciso investigar.

De uma forma geek, claro.

Metodologia

Comecei por angariar todas as letras de todas as músicas da banda. Felizmente o site deles disponibliza as letras completas desde o primeiro àlbum. O que se seguiu foi uma sessão aborrecida de copiar o texto de cada música para ficheiros de texto. Decidi meter cada música num ficheiro de texto separado, e organizar os ficheiros em pastas representando os àlbuns.

Em seguida, fiz um programa em Java que percorresse todos os ficheiros automaticamente, e contasse as ocorrências de cada palavra por música, álbum e na totalidade. O programa ignorou capitalização, pontuação e apóstrofos, mas infelizmente não houve uma forma fácil de juntar as diferentes variações da mesma palavra, como por exemplo “sword” e “swords”. Esta análise fica para mais adiante, mas o programa, com o código fonte e os ficheiros de texto, está aqui.

Finalmente, os resultados foram escritos em ficheiros de texto formatados para serem facilmente importados para uma folha de cálculo. Na folha de cálculo foi possível importar e relacionar as palavras mais usadas não só em geral, mas também por álbum. Decidi não incluir no ficheiro a análise de cada música individual, porque seria demasiado trabalhoso, mas o trabalho feito não seria desperdiçado, como se verá mais à frente.

Com a folha de cálculo gerada, foi uma tarefa fácil ordenar as entradas por número de ocorrências totais (decrescente), e olhar para o topo da lista.

Análise dos resultados

Depois deste trabalho todo, qual foi é a palavra mais usada pelos Manowar nas suas músicas?

“The”, com 1405 ocorrências.

Seguido por “of”, “and” e “to”.

Uh, ok, não foi muito surpreendente visto que os artigos costumam as palavras mais comuns em muitas línguas, incluindo o inglês. Voltando à minha lista de resultados, decidi remover todos os artigos, pronomes pessoais e outras palavras sem interesse.

Convém dizer que a lista completa é composta de 2024 entradas. Filtrar a lista toda manualmente estava fora de questão, especialmente quando só interessavam os resultados iniciais. Desta forma resolvi filtrar apenas as primeiras dezenas de entradas de modo a ficar com uma lista das palavras interessantes ordenadas por ocorrência.

A palavra mais usada pelos Manowar nas suas músicas (parte II)?

“Die”, com 134 repetições. Em português, “morre”, ou outras variações do mesmo vocábulo.

Certo, afinal é uma banda de metal. Mas temo que ainda há algo a faltar na análise. Como tinha dito anteriormente, o programa que desenvolvi não distingue entre formas diferentes da mesma palavra, como por exemplo “sword” e “swords”, ou “fight” e “fighting”. Fazendo uma nova passagem pela lista, foi possível identificar alguns destes casos e somá-los de forma a obter a lista definitiva.

A palavra mais usada pelos Manowar nas suas músicas (parte III)?

“Fight”, com 179 occorências.

Seguida por “die”, “metal”, “blood” e outras palavras no mesmo estilo. Ler a lista é como ler uma caricatura dos Manowar.

Mas uma caricatura absolutamente Excelente!

Conclusão

A primeira conclusão já foi atingida — a palavra “steel” não é a mais popular nas músicas dos Manowar. Mas afinal qual é a frequência de utilização?

Muito frequente. O vocábulo aparece na 13ª posição da tabela, um resultado respeitável, apesar de, com 65 repetições, estar muito aquém do título de palavra mais utilizada pela banda.

Fazendo uma análise mais detalhada, eis as ocorrências de “steel” por àlbum:

O gráfico mostra uma tendência clara no aumento da utilização da palavra. Isto corresponde bem com o facto de terem aparecido 3 músicas seguidas com “steel” no meu carro — uma vez que estávamos a ouvir um CD feito em casa e a minha preferência nos álbuns dos Manowar está desequilibrada a favor dos álbuns mais recentes.

Por curiosidade, comparemos este gráfico com o gráfico para “fight”:

A distribuição é semelhante.

Curioso, não é? Acho que vou voltar a isto mais tarde…

[29 de Julho de 2011: Corrigida a tradução de "steel", de acordo com o comentário do Brother, em baixo]

Livros diferentes, livros iguais?

Como disse no último post, o A. J. Jabobs é um dos meus autores favoritos.

Há uns dias, um amigo meu apontou-me para este artigo em que se falava do seu novo livro: My Life as an Experiment.

Apesar de ainda estar a ler o The Guinea Pig Diaries do mesmo autor, decidi encomendar imediatamente o novo título, que chegou passados dois dias.

Qual nao foi a minha surpresa, quando decidi folhear o novo livro:

Em cima: My Life as an Experiment. Em baixo: The Guinea Pig Diaries.

Olhando para as capas de ambos os livros, seria impossível adivinhar:

Aparentemente alguém, algures na editora decidiu que seria boa ideia publicar o mesmo livro sob dois títulos diferentes, com capas diferentes.

E pelos vistos foi — pelo menos conseguiram duas vendas deste leitor.

Corte rude

Há uns tempos encomendei um livro da Amazon.de: The Guinea Pig Diaries.

O livro é escrito pelo mesmo tipo que escreveu o The Know-It-All e o The Year of Living Biblically — A. J. Jacobs, um dos meus autores favoritos.

Ao receber a encomenda, vim a correr para casa para abrir o livro e deparei-me com este corte lateral nas páginas:

“Erro de produção?”, pensei eu imediatamente. Não, respondeu a Amazon nesta nota dentro do livro (em alemão):

Em tradução livre:

Cumprimentos da Amazon.de!

Você encomendou um livro cujas páginas parecem ter sido cortadas com uma faca desafiada. Isto não é um erro, mas antes uma técnica de acabamento especial.

Este estilo é conhecido como “corte rude” e é popular entre os leitores americanos por dar a impressão do livro ter sido preparado manualmente.

Se não estiver satisfeito com o artigo, naturalmente aceitaremos o retorno sem quaisquer custos para si.

bla bla bla (o resto não interessa).

Eia, não o ia devolver de qualquer das formas, porque mesmo que tivesse sido um erro, não seria grande o suficiente para me dar a esse trabalho.

Mas fiquei bem impressionado com o serviço da Amazon. Pergunto-me se tiveram muitas devoluções antes de acrescentar a nota.

Por outro lado, não sei o que dizer acerca do estilo de corte. É engraçado pela sua originalidade, mas o facto é que por vezes torna um pouco mais difícil de virar as páginas — foi preciso habituar-me a pegar nelas por baixo ou por cima, e nunca pelos lados.

Nunca fazer demonstrações com o telemóvel pessoal

Uma das coisas em que tenho reparado quando alguém faz apresentações de um computador portátil novo, ou um telemóvel de última geração é que são sempre mostradas listas enormes de emails, fotos e listas de contactos repletas de informação pessoal.

Sempre imaginei que estas listas fossem cuidadosamente construídas para que a informação seja saneada: os contactos têm nomes, moradas e números inventados (mas realistas), os emails contêm mensagens inócuas sobre trabalho ou convites para jantar, e as fotos são de paisagens, peixinhos e bébés Polaroid.

Mas às vezes alguém decide usar um telemóvel pessoal para despachar a demonstração, porque afinal, o que se está a demonstrar nao inclui informação pessoal nenhuma. Certo?

Errado:

“Hmmm, pork!”

Fonte: Vídeo no YouTube sobre o Evernote para o Android.

P.S.: Também tenho um telemóvel Android, e o dicionário inglês não inclui aquela palavra por defeito.