Mostrando postagens com marcador Linux. Mostrar todas as postagens
Mostrando postagens com marcador Linux. Mostrar todas as postagens

quarta-feira, 14 de março de 2018

ALSA MIDI

Instalando as dependências
sudo apt-get install libasound2 libasound2-dev


#include
#include
#include
#include
#include

int keep_walking;

static void sigint_handler(int i){
    keep_walking = 0;
}


int main(int argc, char *argv[]) {

   int note_time = 1000000; // 1 segundo (em microsegundos)

    // Pega o Ctrl+C ou signal de Kill para a aplicação.
   signal(SIGINT, &sigint_handler);
   signal(SIGTERM, &sigint_handler);
   keep_walking = 1;

    // Crio o dispositivo MIDI
   snd_seq_t *seq_handle;
   int portid;
   if (snd_seq_open(&seq_handle, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0) {
      fprintf(stderr, "Error opening ALSA sequencer.\n");
      exit(1);
   }
   
   snd_seq_set_client_name(seq_handle, "My App Midi");
   if ((portid = snd_seq_create_simple_port(seq_handle, "My Midi Port",
            SND_SEQ_PORT_CAP_READ|SND_SEQ_PORT_CAP_SUBS_READ,
            SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
      fprintf(stderr, "Error creating sequencer port.\n");
      exit(1);
   }

    snd_seq_event_t ev;
    snd_seq_ev_clear(&ev);
    snd_seq_ev_set_source(&ev, 0);
    snd_seq_ev_set_subs(&ev);
    snd_seq_ev_set_direct(&ev);

  while (keep_walking) {

    
   // Note on 
   snd_seq_ev_set_noteon(&ev, 0, 60, 127);
   snd_seq_event_output(seq_handle, &ev);
   snd_seq_drain_output(seq_handle);
    // Duration
   usleep(note_time);

   // Note off
   snd_seq_ev_set_noteoff(&ev, 0, 60, 0);
   snd_seq_event_output(seq_handle, &ev);
   snd_seq_drain_output(seq_handle);
    // Duration
   usleep(note_time / 6);

  }

   snd_seq_close(seq_handle);
   return 0;
}

Para compilar:


gcc alsamidi.c -o alsamidi -lasound

quinta-feira, 14 de setembro de 2017

Certificados em Latex

Olha que maneiro! Precisamos de 2 arquivos: Um que é o Certificado e outro que é a lista de nomes.

Certificado.tex --------------------------------------------------

\documentclass[a4page]{article}
\usepackage[utf8]{inputenc} 
\usepackage{eurosym}
\usepackage{textmerg} 
\usepackage[left=2cm,right=1cm,bottom=1cm,top=1cm]{geometry}
\usepackage{lscape}
\usepackage{graphicx}
\usepackage{times}
\usepackage{overpic}


\begin{document}
\begin{landscape}
\begin{center}

\Fields{\Name}
\Merge{data.dat}{
\fbox{
\begin{minipage}{1.3\textwidth}
\centering
\vspace{1cm}
\centerline{\includegraphics[scale=.4]{logo}}
\vspace{1cm}
\par
\huge{\textbf{\textsc{Certificate of participation}}}
\\
\vspace{2cm}
{
  \LARGE{\itshape This is to certify that \textbf{\Name }~ has participated\\
    in the 16th Brazilian Symposium on Computer Music\\
    held at the University of São Paulo, Brazil, on September 3-6 2017.\par}

}
\vspace{2cm}
\hbox to 0.9\textwidth{\centering \hfill\includegraphics[scale=0.7]{Assinatura}}
\hbox to 0.9\textwidth{\centering \hfill\Large Marcelo Queiroz}
\hbox to 0.9\textwidth{\centering \hfill\Large\bfseries SBCM 2017 General Chair}
\vspace{0.4cm}
\end{minipage}
}%fbox
\newpage
}%Merge
\end{center}
\end{landscape}
\end{document}

data.dat -------------------------------------------------------------------------

Fulano da Silva

Beltrano de Souza

Cicrano Schiavoni

Teste de Certificado  dos Campos Latex

...


Resultado? Um PDF com várias páginas, uma por nome.



quarta-feira, 19 de julho de 2017

OCR em arquivos PDF

Passo 1: Primeiramente, separei o PDF em vários arquivos, cada um com uma página, com o comando:
pdftk nome_do_arquivo.pdf burst

Fiz isto pois os próximos passos são boatwares e fizeram minha máquina reiniciar algumas vezes. :-)

Passo 2: Depois, converti cada uma destas páginas em uma imagem jpg com o comando:
for i in pg_0*pdf ; do convert -density 400 $i $i.jpg; done

Passo 3: Depois, usei o OCR (Optical Character Recognition) em cada uma das imagens, transformando-as em textos:
for i in pg_0*jpg ; do tesseract -l por $i $i; done

Passo 4: E isto resultou em um arquivo txt para cada página, conforme segue anexo.
Também fiz um arquivo txt com todas as páginas com o comando:
for i in pg_0*txt ; do cat $i >> completo.txt; done

E fiz um arquivo zip com os textos com o comando:
zip todos.zip pg*txt

Ou, em um único comando os passos 2, 3 e 4:

for i in pg_0*pdf ; do
echo "converting $i"
convert -alpha flatten -threshold 50% -background white -density 400 $i $i.png
tesseract -l por $i.png $i;
cat $i.png.txt >> completo.txt;
done

terça-feira, 25 de abril de 2017

Substituindo string em todos os arquivos

sed -i 's/foo/bar/g' *

Para substituir \n-\n

sed -i ':a;N;$!ba;s/\n-\n//g' *

Concatenando string no final de arquivos

echo "my text" | tee -a *.php

segunda-feira, 17 de abril de 2017

Convertendo imagens do libreoffice em PDF com crop

Salve no seu diretório ~/bin, dê permissões de execução e seja feliz!

for f in *odg
do
  if [ -f $f ] ; then
    echo "Checking ${f}"
    name=${f%\.*}
    if test ${name}.pdf -ot ${name}.odg ; then
       echo "Converting ${name}.pdf"
       libreoffice --headless --invisible --convert-to pdf ${name}.odg
       echo "Croping...."
       pdfcrop ${name}.pdf ${name}.pdf
    fi
  fi ;
done

Certamente é necessário instalar o libreoffice, o test (que costuma vir instalado) e o pdfcrop.

sábado, 18 de março de 2017

Convertendo vídeos de MKV para MP4

Convertendo vídeos de MKV para MP4.

avconv -i input.mkv -codec copy output.mp4

segunda-feira, 16 de novembro de 2015

Marca d'água em PDF

pdftk arquivo.pdf background background.pdf output out.pdf

sexta-feira, 5 de dezembro de 2014

Problema de DNS no Ubuntu

Meu Ubuntu estava com um problema que em determinadas redes e principalmente após hibernar, ele parava de resolver domínios. Descobri que algo alterou minha configuração de DNS de forma que o mesmo passou a ser estático e não mais dinâmico. Nem ideia do que possa ter sido. De qualquer forma, o comando abaixo permite voltar o DNS para dinâmico:

sudo dpkg-reconfigure resolvconf



terça-feira, 29 de julho de 2014

Sharelatex local

Correção!
https://github.com/sharelatex/sharelatex/wiki/Production-Installation-Instructions

e não esqueça de
https://github.com/sharelatex/sharelatex/wiki/Dependencies

Recentemente a então já conhecida aplicação para textos Latex compartilhadas se tornou opensource.
Viva!

Aqui vai meu script para instalá-la no Ubuntu 14.04.

sudo -s
apt-get install node nodejs npm redis-server mongodb-server texlive latexmk nodejs-legacy
npm install -g grunt-cli

cd /opt

git clone http://github.com/sharelatex/sharelatex.git
cd sharelatex

npm install

grunt install
grunt check --force

useradd -d /opt/sharelatex/ sharelatex

chown -R sharelatex:sharelatex /opt/sharelatex

exit


Para criar um script e rodá-lo como serviço, iniciando com a máquina, crie o arquivo /etc/init/sharelatex.conf  com o conteúdo:

description "Node server for sharelatex.mydomain.tld"

setuid sharelatex

setgid sharelatex

start on net-device-up

stop on shutdown

respawn


chdir /opt/sharelatex/

exec  grunt run --force

A opção --force é necessária para rodar com a versão do latexmk "antiga" do repositório Ubuntu e não é necessária caso o latexmk seja instalado com a última versão do repositório oficial.

Então, inicie-o com o comando:

sudo service sharelatex start

A próxima vez que sua máquina for iniciada, o sharelatex deverá iniciar com ela. Basta registrar um novo usuário.



Fontes:

quarta-feira, 11 de junho de 2014

Realtime config quickscan

Em minhas caminhadas noturnas pela rede encontrei isto:

https://github.com/raboof/realtimeconfigquickscan

Trata-se de uma aplicação perl que verifica as configurações do seu sistema para áudio.
Ao encontrar algo que pode ser otimizado, a aplicação apresenta um caminho de como otimizar o "problema".
Veja, por exemplo, o que ela reportou sobre minha configuração:

Kernel with Real-Time Preemption... not found - not good
Kernel without real-time capabilities found
For more information, see http://wiki.linuxaudio.org/wiki/system_configuration#installing_a_real-time_kernel

Achei bom pois não altera minhas configurações mas dá um caminho para alterá-las, caso queira.

domingo, 4 de maio de 2014

Tocando samples no Linux com Specimen

Para quem gosta de instrumento virtual, uma opção para síntese é utilizar samples de instrumentos reais. No Linux, o Specimen faz isto de maneira agradável (https://bitbucket.org/peterbessman/specimen).
Ele está no repositório da maioria das distribuições e instala com apt-get ou coisa assim.

Dicas rápidas:

  • Para mudar a nota de referência, clique com o botão do meio do mouse (canto superior direito em notebook).
  • Para ampliar a faixa tocada, clique com o botão esquerdo à esquerda e botão direito à direita.
  • O modo Single shot toca o sample inteiro uma vez e ignora o NOTE OFF. Bacana para efeitos e percussão.
  • O modo Trim corta com o NOTE OFF. Pode ser necessário adicionar algum Release no Envelope para evitar corte brusco.
  • O modo Loop repete parte do sample e permite sustaine infinito. Clique duplo no waveform para selecionar a região de loop. Novamente clique esquerdo para marcar início e clique direito para marcar o fim. Preocupe-se com a fase e a continuidade para criar loop. A dica é sempre marcar em um ponto de valor zero e manter a fase (descendente ou ascendente). Utilize o Zoom para isto.
  • O modo Ping-pong toca o áudio pra frente e depois reverso e assim por diante infinitamente (ou até que a mensagem de NOTE OFF do MIDI chegue).

Aqui vão dois vídeos tutoriais em inglês para este aplicativo:



https://www.youtube.com/watch?v=p6SoNX4bA1Y
(Não sei porque este não rola de ser embutido a página...)

domingo, 30 de março de 2014

Diminuindo tamanho de arquivos pdf


O Ghost Script faz isto.

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/print -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/press -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

Copiar a partir da linha de comando

Sim, dá vontade de copiar sem usar o tal do mouse. Time is scarse. O tal do xclip é uma benção!
Instalação padrão:

sudo apt-get install xclip

Tente estes exemplos:

uptime | xclip

date | xclip

ls -la | xclip

cat arquivo.log | xclip


Bom, he?

Fonte:

http://linuxtidbits.wordpress.com/2008/02/22/command-line-to-clipboard/

quarta-feira, 17 de julho de 2013

Shell script para o comprimido

Este é o shell script para o comprimido


NAME=noise
CONT=1
for AR in 11025 16000 22050 32000
do
   let CONT=1
   for AB in 8 16 32 64 128 192 256 320
   do
      ffmpeg -i ${NAME}.wav -acodec libmp3lame -ar ${AR} -ab ${AB}k ${NAME}${AR}-${CONT}.mp3
      ffmpeg -i ${NAME}${AR}-${CONT}.mp3 -acodec flac -ar 96000 -ab ${AB} ${NAME}${AR}-${CONT}.wav
      rm ${NAME}${AR}-${CONT}.mp3
      let CONT=${CONT}+1;
   done
done


sábado, 13 de abril de 2013

PC x Mac


A arquitetura PC possui uma característica que é sua grande vantagem e sua grande desvantagem: ela é aberta. Isto significa que desde quando esta arquitetura foi proposta e comercializada pela IBM qualquer pessoa que saiba como desenvolver um periférico pode fazê-lo para o PC. Você não sabe fazer isto mas acredite em mim, muita gente no mundo sabe. Isto é uma grande vantagem pois você tem várias possibilidades de periféricos mas é uma grande desvantagem pois você tem vários periféricos e precisa saber escolher entre estes quais melhor se adaptam a suas necessidades.

No mar de possibilidades é fácil descobrir que há coisas boas e coisas ruins. Dispositivos bons e ruins e também caros e baratos. Infelizmente não é uma regra que periféricos mais caros são melhores que periféricos baratos mas este é um bom indício. Há também uma possibilidade que dois periféricos bons não possam ser combinados por uma questão de mercado. Lembro de querer um processador X e uma placa de vídeo Y mas não encontrar uma placa mãe que tivesse os slots X e Y. Tive que optar por um deles.

Por outro lado, o padrão Apple possui uma arquitetura fechada. Em termos práticos, apenas a Apple pode combinar hardware para os computadores Mac. Isto significa pouquíssimas opções ou nenhuma opção. O que existe neste universo são modelos de máquinas fechadas. Você escolhe um nome, um modelo e há pouco o que se pode escolher quanto à escolha de dispositivos presentes neste modelo. Mesmo que vc escolha mais memória ou mais espaço em disco, não poderá optar pela marca do periférico, ou pela velocidade do barramento norte, por exemplo.

Saindo do hardware chegamos ao sistema operacional. Windows, Linux, MacOs são responsáveis por gerenciar os dispositivos físicos do computador. Enquanto o MacOS tem certeza sobre qual hardware existe no computador, cabe ao Linux e Windows a difícil tarefa de funcionar sobre qualquer Frankstein. E impressionantemente eles funcionam. Quase sempre. Neste ponto adicionamos ao hardware uma peça importante chamada fabricante.

Se o fabricante seguiu corretamente as especificações do padrão IBM PC, o sistema operacional deverá saber controlar o dispositivo. Porém o padrão permite que o fabricante inclua novas funcionalidades e isto implicaria que o mesmo disponibilizasse o driver para ajudar o sistema operacional a gerenciar o dispositivos. Isto quase nunca acontece. Vários fabricantes xinguilings do mercado não disponibilizam drivers e surpreendentemente seus periféricos ainda assim conseguem ser gerenciados.

Dado isto, chegamos ao ponto da comparação. Quando vejo usuários Mac advogando em favor de suas maçãs, fico um tanto receoso. Dizer que o Mac funciona e bem é dizer implicitamente que o PC não funciona ou não funciona bem. E neste ponto para mim existe um equívoco.

Primeiramente pelo fato de que o PC é sempre associado a periféricos baratos e de baixa qualidade. É esdrúxulo comparar uma máquina de grife, como um Apple, com seu Frankstein montado com as peças da Santa Efigênia ou do Paraguai: um placa mãe Asus, um processador AMD, memória Sansung, HD Seagate, placa de vídeo NVídia, fonte sei-lá-o-que, teclado xinguilings e por ai vai. Você monta seu computador, não se atenta se há driver para tudo e reclama que o sistema operacional não sabe gerenciá-lo ou que o mesmo não funciona bem. E aqui está o equívoco: Na arquitetura PC este gerenciamento também cabe ao usuário ou a quem monta o computador.

Seria justo compararmos, por exemplo, um Mac com um Sony Vaio ou um Dell Studio do mesmo valor. Tais computadores saem de fábrica com uma versão do Windows específica para seu hardware e possuem um desempenho excelente se não superior quando comparados aos Apples. O mesmo em relação a máquinas IBM, por exemplo, recomendadas e certificadas para rodar Linux. A impressão que tenho é que todo usuário que possui budget suficiente para comprar um bom PC opta por um Mac. E tem a pachorra de comparar um notebook de R$800,00 com um Mac de R$8.000,00.

Na minha opinião, o hardware do Mac é muito bom. Porém você compra um computador fechado onde até o parafuso que prende a bateria é patenteado para que você não troque-a. Então ouço o argumento: A bateria do PC é ruim. Bem, você pode trocá-la e comprar quantas quiser, de qual fabricante quiser, e pagar o que quiser em uma faixa de valor. Veja o preço da reposição de uma bateria do Mac, que possui 12 células, e compare com uma bateria 12 células do PC. Agora, é possível mesmo comparar baterias de 6 células com baterias de 12 células?

Eu tive a oportunidade de configurar dual boot em Mac com Linux e até Windows. Fica muito bom. Não tenho dúvida que o hardware quando bem combinado é mais fácil para ser gerenciado pelo sistema operacional. Se tens dúvida, faça o teste. Acredito que é fácil testar o que escrevo aqui. Só não venha, por favor, comparar alhos com bugalhos. Isto é injusto e falacioso.

A beleza da arquitetura PC é que a mesma colaborou diretamente a popularização da informática e o acesso a computadores em todo mundo. Especialmente em países pobres como o Brasil. Isto é genial. Para os que procuram um diferencial e não querem pertencer a imensa massa usuária de PC, a Apple é sempre uma boa opção. Se esta é sua opção, eu respeito.


O mesmo se aplica hoje a smartphones. Vi colegas comprarem smartphones baratos com Android. Reclamavam que era lento e coisa assim. Quando conseguiram grana para comprar algo legal, alguns foram para o iPhone. 

Na minha opinião, o Android permitiu a popularização do smartphone da mesma forma que o padrão PC permitiu a popularização da informática no mundo.

Se querer comparar performance e desempenho pelo menos dê-se ao trabalho de comparar aparelhos com a mesma faixa de preço.

Para os que pretendem aderir ao Linux, antes de comprar, passe por aqui:

http://www.ubuntu.com/certification/
http://wiki.debian.org/Hardware

sexta-feira, 8 de fevereiro de 2013

Sintetizadores Bristol para Linux

Procurando por bons sons de sintetizadores para o Linux encontrei o Bristol:

http://bristol.sourceforge.net/

Simplesmente fantástico!

quinta-feira, 27 de dezembro de 2012

Brincando com transformações de BMP em WAV

Todo arquivo é um punhado de bytes. O que faz ele ser imagem, texto, som ou vídeo é a forma como estes bytes estão organizados. Mas nada impede de pegar os bytes de um arquivo e "enganar" o computador dizendo para ele que é outro arquivo. Isto pode ser feito simplesmente alterando o cabeçalho do arquivo.
Bem, fiz 2 programas: um que coloca cabeçalho BMP e outro que coloca cabeçalho WAV.
De forma geral podemos pensar que ele converte qualquer coisa em imagem e outro que converte em som.
Depois eu testei com várias coisas: PDF, doc, MP3, imagens, textos, ...
E o que ficou mais legal de ouvir foram arquivos de log do sistema operacional. Talvez por serem "periódicos".
Escolhi um arquivo de log. Depois de ouvir e achar legal, converti em imagem, abri o gimp e mudei a imagem na mão. A cada alteração eu gerei o som correspondente. Editado no Gimp ele foi se transformando em novos sons.

Depois juntei imagem e som em um vídeo.
















C ANSI arquivos para wave

Já teve vontade de "ouvir" fotos, arquivos PDFs e coisas assim? Ok, não é exatamente útil mas sim, pode ser divertido.

gcc towav.c -o towav e Voilá!




#include <sys/stat.h>
#include <string.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>


int main(int argc, char ** argv){

   if(argc < 4){
      printf("Usage:\n");
      printf("%s sample_rate bit_depth\n", argv[0]);
      exit(0);
   }

   char * filename = malloc(strlen(argv[1]));
   strcpy(filename, argv[1]);

   struct stat st;
   stat(filename, &st);
   uint32_t size = st.st_size; //limita o tamanho do arquivo!
   printf("filesize: %d\n", size);

   // Read file data
   char * buffer = 0;
   FILE * f = fopen (filename, "rb");
   buffer = malloc(size);
   fread (buffer, 1, size, f);
   fclose (f);

   char * newfilename = malloc(strlen(argv[1] + 4));
   strcpy(newfilename, filename);
   strcat(newfilename, ".wav");
   FILE *fp = fopen(newfilename,"wb+");

   fwrite("RIFF", 1, 4, fp);
   int newsize = size + 32; // file size - 8
   fwrite(&newsize, 1, sizeof(newsize), fp);
   fwrite("WAVE", 1, 4, fp);

   fwrite("fmt ", 1, 4, fp);
   int flag = 16; // chunk size
   fwrite(&flag, 1, 4, fp);
   flag = 1; // compression code
   fwrite(&flag, 1, 2, fp);
   flag = 1; // number of channels
   fwrite(&flag, 1, 2, fp);
   flag = atoi(argv[2]); // sample rate
   fwrite(&flag, 1, 4, fp);
   flag = flag * atoi(argv[3]) / 8; // bytes per second
   fwrite(&flag, 1, 4, fp);
   flag = atoi(argv[3]) / 8; // block align
   fwrite(&flag, 1, 2, fp);
   flag = atoi(argv[3]); // significant bits per sample
   fwrite(&flag, 1, 2, fp);

   fwrite("data", 1, 4, fp);
   fwrite(&size, 1, 4, fp);

   fwrite(buffer, 1, size, fp);
   fclose(fp);

}

Algumas referências:



O dmesg ficou muito bom tocado a 10025 com 8 bits!

terça-feira, 20 de novembro de 2012

Apagando redes do Ubuntu

O Ubuntu tem mapeada várias redes que já conectei mas tinha uma que estava incomodando. Algo como 100 conexões em um mesmo nome e impossível apagar na mão. Vamos para o terminal.

Encontrei os arquivos de conexões disponíveis a todos os usuários no diretório

/etc/NetworkManager/system-connections/

Elas estão bonitinhas, com os nomes de suas redes. Prontas para serem apagadas em série. Claro que precisa do sudo.

Além disto, há os arquivos de configuração para as conexões não compartilhadas com todos os usuários em


~/.gconf/system/networking/connections


Não tão fáceis mas nada que um grep não resolva:



grep -c Nome */*/* | grep :1

Com isto temos o nome dos diretórios que possuem informação sobre esta conexão de nome "Nome",

Sim, estou bem mais feliz agora.

Fonte: