Mostrando postagens com marcador Áudio. Mostrar todas as postagens
Mostrando postagens com marcador Áudio. 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

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

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


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!

quarta-feira, 25 de julho de 2012

Executando o PD extended com o Pulse Audio

Subir o PD extended (ou simplesmente o PD) com o pulseaudio pode ser um problema. Muitas vezes o PD não consegue alocar a placa de som e temos o PD funcionando sem som.

Para resolver isto, é necessário utilizar a linha de comando e chamar o padsp. Resolve:

padsp pdextended

quarta-feira, 16 de maio de 2012

Auto Tunning no Linux

No Windows e Mac acho que todo mundo já conhece alternativas como o AutoTune da Antares e o Melodyne da Celemony. Bem, para os que não querem tomar wine na cabeça seguem 4 dicas:


VocProc: Possui 2 entradas, uma para a carrier do vocoder e outra para o formante.
zita-at1: Foi feito pelo Fons e roda pelo Jack. Tem uma GUI super simples e aceita entrada MIDI. Não possui correção de formante e se perder um pouco em correções muito grandes.


Autotalent: Plugin LV2. Tem correção de formante.

 Vocoder: Plugin LV2. Não é um auto tunner, certo? Se todos não fosse um vocoder...

sexta-feira, 13 de abril de 2012

terça-feira, 28 de fevereiro de 2012

Enscribe - Imagem para som

Encontrei um software no mínimo curioso para Linux. Chama-se enscribe e transforma imagens em sons. Os sons também são bastante curiosos principalmente se criados a partir de fotos curiosas...

enscribe.

Depois vou olhar com mais carinho e arrumar este post.

Extrair áudio de vídeo AVI

Este é bico:

ffmpeg -i my_video_file.avi extracted_audio.mp3

 E como tudo no universo Linux tem mais de um comando:

mplayer -dumpaudio my_video_file.avi -dumpfile extracted_audio.mp3
 
 
Fonte:
 
http://www.dailygyan.com/2008/01/how-to-extract-audio-from-any-video.html

sexta-feira, 13 de janeiro de 2012

APIs para desenvolvimento de software com áudio

Desenvolver uma aplicação que pode ser usada diretamente sobre a camada de áudio do SO é confusão. O Windows tem o DirectSound, WinKS, WASAPI, Windows Multimedia Library e ASIO, o Linux tem o FFADO, ALSA e OSS e o MacOS tem o Sound Manager, ASIO e Core Audio. Implementar um software que funcione em tudo isto pode ser transtorno.

Encontrei algumas alternativas que parecem ser viáveis: JUCE, SDL, OpenAL, RTAudio e PortAudio. Basicamente tratam-se de 3 APIs abertas que permitem escrever aplicações de áudio e compilá-la para aquela lista acima.

  • O JUCE (http://www.rawmaterialsoftware.com/juce.php)  promete atender até implementações de Audio Unit (plugins tipo VST para Mac) e VST. Além disto possui biblioteca para GUI. Por isto pareceu um quase Qt.

  • O SDL (http://www.libsdl.org/) permite acesso também ao teclado, webcam, mouse e outras coisas. É dirigido para jogos. Não me convenceu apesar de ser uma alternativa para futuramente incluir stream de vídeo. Se não estou enganado possui biblioteca para Arduino. E ATARI!

  • O openAL foi feito pela creative e pode ser uma alternativa para trabalhar com  espacialização. Pareceu-me que ela foi feita para isto.  É uma API para multicanais de saída muito utilizada para jogos, por exemplo (http://connect.creativelabs.com/openal/OpenAL%20Wiki/Games.aspx). Pra ajudar, parece que funciona em Android. Pelo que li, não possui suporte ao MIDI.

  • O RTAudio foi feito por um tal Gary Scavone, na época no CCRMA em Stanford (https://ccrma.stanford.edu/software/stk/index.html)  e atualmente na universidade de McGill (http://www.music.mcgill.ca/~gary/rtaudio/). Lembro de ter visto ele no código do Jacktrip. Acho que o jacktrip, talvez por ter sido feito no mesmo CCRMA, usa ou usava-o. Esta API tem um problema que é ter o mesmo nome de uma API da Microsoft. :-)

  • O PortAudio me pareceu a API mais madura. Pd, CSound e Audacity, por exemplo, estão em PortAudio (http://www.portaudio.com/apps.html). Parece funcionar bem.
Resumindo, preciso ler mais sobre isto...

quarta-feira, 4 de janeiro de 2012

Extrair áudio de um DVD

Listar o conteúdo de um DVD

lsdvd

Extrair as 99 faixas de áudio para mp3

for((x=1; x<=99; x++)) do
mplayer dvd://0$x -cdrom-device /dev/sr0 -dumpaudio -dumpfile track$x.mp3; 
done;


Mas se ele estiver separado em capítulos e não em títulos


for((x=1; x<=99; x++)) do
mplayer dvd://01 -chapter $x-$x -cdrom-device /dev/sr0 -dumpaudio -dumpfile track$x.mp3; 
done;


Fontes:
  • http://www.cyberciti.biz/faq/linux-unix-extract-audio-from-avi-video-file-online-stream/
  • http://www.mplayerhq.hu/DOCS/HTML/en/faq.html#idp11189712
  • http://lists.mplayerhq.hu/pipermail/mplayer-users/2003-April/032217.html

terça-feira, 4 de outubro de 2011

Echo Audio Fire 12 no Jack com Ubuntu

Olha que gracinha!

Foto da interface no rack

Olha a porta MIDI

12 Entradas e 12 saídas

Configuração do Jack*
* Forcei um pouco a barra, né? 128 Frames / Período... Muitos XRuns...

O que mais me impressionou é que ela realmente funcionou, inclusive acendendo o LED de cada Sample Rate conforme o mesmo era configurado no Jack.

Muito bom!

quarta-feira, 28 de setembro de 2011

Session Handlers - O Jack fará o serviço.

Trabalhar com o Jack as vezes é um problema. Um monte de software conectado de determinada maneira e com configurações e arquivos próprios abertos. Dá trabalho reabrir para continuar o trabalho em outro momento. Isto é chamado de sessão de áudio. Houveram várias tentativas de criar um Session Handler. Heis um histórico breve e bagunçado tal qual a informação sobre:

  • LADCCA (http://savannah.nongnu.org/projects/ladcca/) Mudou de mantenedor e virou LASH.
  • LASH (http://savannah.nongnu.org/projects/lash) Morreu para virar LADISH.
  • LADISH (http://ladish.org) Que não vingou.

Brigas. Muitas brigas. Enfim o Paul Davis (criador do Jack e do Ardour) tomou a decisão e fez o que precisava ser feito. O Jack irá gerenciar sessões. Viva!

Como o assunto é novo (Março de 2011), os aplicativos ainda não suportam este recurso. Agora é questão de tempo para resolver um dos maiores problemas de trabalhar com o Jack e vários aplicativos.
 
Fontes:
  • http://old.nabble.com/Ladcca---lash--td3322840.html
  • http://lists.linuxaudio.org/pipermail/linux-audio-dev/2009-November/025630.html (Esta discussão compensa ler inteira!)
  • http://jackaudio.org/node/51 
  • http://trac.jackaudio.org/wiki/WalkThrough/Dev/JackSession

    quarta-feira, 31 de agosto de 2011

    Medindo o desempenho do seu HD

    Sei que há uma grande diferença entre velocidades do HD principalmente quando precisamos carregar vários arquivos de áudio simultaneamente. Estava com dúvida de como descobrir os dados do meu HD no linux. Olha que surpresa. Nada de comandos texto. Clique em Sistema > Administração > Utilitário de Unidades.
    Utilitário de unidades
    Este aplicativo, além de ser bonitão, trouxe várias informações sobre o meu HD, como a velocidade do disco. Além disto, ele permite fazer vários testes interessantes como verificar a temperatura do HD.
    Utilitário de disco

    Estes são os testes SMART.

    Dados do SMART
    E este é o benchmark de leitura do disco.

    Benchmark de apenas leitura
    Maneiro! Super simples fazer as contas e dizer exatamente quantos canais de áudio com qual amostragem seu HD será capaz de trabalhar simultaneamente. Pra reclamar, ficou faltando apenas o tamanho da cache...

    domingo, 22 de maio de 2011

    Concerto para Lanhouse #01

    Concerto para Lanhouse é uma instalação audiovisual para computadores conectados em uma rede local (LAN - Local Area Network). O trabalho surgiu de experimentações realizadas durante oficinas e hacklabs de áudio e vídeo interativo ministrados em salas de acesso livre à internet pelo Brasil.

    A instalação foi programada-composta em duas partes. A primeira, se desenvolve num jogo de  especialização sonora, ilusão de movimento e sincronia combinando as luzes dos monitores e o som dos alto-falantes dos computadores espalhados pela sala. Na segunda parte, as variações de cores seguem um encadeamento extendido de “acordes temporais horizontais”.

    Considerando o computador um instrumento que reúne diferentes mídias (metamídia), capaz de articular som, luz e máquinas num fluxo de metadados pela rede, Concerto para Lanhouse nos provoca pensar a LAN como um metainstrumento. A construção desse metainstrumento pode ser entendida como um trabalho artesanal análogo ao trabalho do lutier. A luteria digital se realizaria no plano combinado de hardwar e software, da rede de computadores e de ambientes de programação audiovisual como o Pure Data.

    A instalação enfatiza uma espécie de “performatização midiática” da rede local de computadores. Concerto para Lanhouse é um pequeno exercício estético "performidiático” e também uma singela homenagem às 108 mil lanhouses espalhadas pelo Brasil atualmente (dez 2010).

    Instalação feita pelo artista e amigo Giuliano Obici Lambert no MIS-SP (Museu da Imagem e do Som) em 12/12/2010. Mais trabalhos do mesmo artista em http://giulianobici.com/site/arte.html.



    Instalação do Concerto para Lanhouse #01 no Linux Audio Conference 2011 em Dublin, Irlanda.
    A instalação ficou aberta a visitação durante todo o evento entre os dias 6, 7 e 8 de maio de 2011.
    Veja mais no site do evento:
    http://lac.linuxaudio.org/2011/

    Artista: Giuliano Obici
    Video: John Lato
    Edição: Robin Gareus

    terça-feira, 17 de maio de 2011

    Usando nomes para placas no Jack

    No meu estúdio eu tinha um problema: duas placas de som no mesmo computador. Uma era a onboard, que eu não conseguia desativar nem pagando, e a outra um Delta LT 1010. Mesmo usando dois presets diferentes sempre havia o problema de o computador colocar as vezes uma e as vezes outra como hw:0. No LAC 2011 eu aprendi como fazer isto ser mais inteligente: usar o nome da placa.

    Veja só. Primeiro use o comando: 

    cat /proc/asound/cards

    Isto irá retornar o nome de suas placas. No meu caso:

     0 [Intel          ]: HDA-Intel - HDA Intel
                          HDA Intel at 0xda500000 irq 49

    Bem, agora é só colocar o nome dela na linha de comando do jack, ou, se preferir, no qjackctl.bin.

    Tela do qjackctl.bin usando o nome da placa de som

    Fonte:

    http://jackaudio.org/device_naming