Boa Tarde a todos do GUJ. Recentemente publiquei um app musical no google play, o mesmo tem uma funcionalidade inédita e eu gostaria muito da opnião de vocês para podermos aprimorar o nosso app cada vez mais.
Nosso software é capaz de rearmonizar partituras de piano e gerar diferentes versões delas. Ele aceita um arquivo midi de entrada, o converte para partitura de piano e depois você pode combinar técnicas de rearmonização para rearmonizá-la ( no caso de nosso software, a harmonia original é alterada de forma que a música continua podendo ser reconhecida). O Sonata (nome de nosso software) foi o resultado de meu trabalho de conclusão de curso realizado em 2010 o qual o resumo pode ser lido em meu blog: http://ricardombertani.wordpress.com/2013/08/25/sonata-um-sistema-de-rearmonizacao-de-partituras/
Na época criamos uma versão desktop dele, 3 anos se passaram e resolvi criar uma versão mobile. Hoje ele está disponível em duas versões no google play (versão completa e versão demo), cujos links diretos seguem abaixo:
Nosso publico alvo são principalmente músicos que utilizam softwares musicais para auxiliá-los no processo de escrita de partituras ou pessoas que tocam algum instrumento
e gostariam de ter partituras de suas músicas favoritas.
Estamos abertos a críticas/sugestões sobre o software.
[quote=Marky.Vasconcelos]Seu aplicativo suporta criar a partitura também?
As vezes queria transcrever minhas ‘brizas’ com violão em partituras.[/quote]
Por enquanto não, hoje o aplicativo apenas suporta arquivos midi como entrada. Porém no futuro nada impede a adição
de novas funcionalidades, tais como a mencionada por você. Outra sugestão que recebi a um tempo atrás e que seria
interessante seria aceitarmos arquivos de texto com cifras também como entrada.
Fazer isso chega a ser tão ou talvez mais complicado do que um software OCR. E tem um ponto muito complicado que é a interpretação dos acordes e de melodias mais rápidas (isso sem contar músicas com mais de um instrumento). O midi tem as indicações das notas e o tempo delas, então o trabalho fica menos complicado.
Achei muito interessante a ideia, vou gerar uns midis de umas músicas aqui e testar depois. Parabéns pelo belo projeto.
Fazer isso chega a ser tão ou talvez mais complicado do que um software OCR. E tem um ponto muito complicado que é a interpretação dos acordes e de melodias mais rápidas (isso sem contar músicas com mais de um instrumento). O midi tem as indicações das notas e o tempo delas, então o trabalho fica menos complicado.
Achei muito interessante a ideia, vou gerar uns midis de umas músicas aqui e testar depois. Parabéns pelo belo projeto.[/quote]
Sim, sei que é complexo, pois fiz um programa para localizar som (tipo o Shazam) e ja é complexo pacas, fazer a gravação e transformar em partitura então, nem se fala, por isso que falei que seria algo revolucionário.
Transformar o midi (que já possui as indicações de notas/tempo/etc), não tem nada de revolucionário, apenas saber lidar com as APIs e fazer os algoritmos adequados.
Mas nem por isso o programa deixa de ser bacana… também gostei!
Fazer isso chega a ser tão ou talvez mais complicado do que um software OCR. E tem um ponto muito complicado que é a interpretação dos acordes e de melodias mais rápidas (isso sem contar músicas com mais de um instrumento). O midi tem as indicações das notas e o tempo delas, então o trabalho fica menos complicado.
Achei muito interessante a ideia, vou gerar uns midis de umas músicas aqui e testar depois. Parabéns pelo belo projeto.[/quote]
Muito Obrigado Ataxexe, realmente é um assunto muito complicado a rearmonização via software, trata-se de um processo complexo no qual devemos reconhecer padrões na harmonia e reescrevê-la com diferentes acordes ou até mesmo adicionar notas novas a acordes existentes, o problema maior é evitar qualquer tipo de quebra/descaracterização da harmonia. Gostaria de aproveitar para esclarecer uma questão importante sobre o software e a leitura dos arquivos midi. No início de nosso projeto as rearmonizações eram feitas em um ambiente perfeito (as melodias de teste foram escritas nota a nota em java ) e as rearmonizações foram sendo testadas com melodias contendo apenas um instrumento e acordes sem inversões, tinhamos 3 músicas de teste (cada uma com um nível de complexidade diferente).
Após a conclusão do nosso projeto de conclusão de curso, no qual ficou provado que a rearmonização via software é possível, foi desenvolvido um módulo independente para a leitura de arquivos midi com o qual é possível a conversão do mesmo em uma partitura de piano, no processo tentamos remover notas de outros instrumentos e mapear toda a informação presente no arquivo midi para nossa estrutura de dados, para então efetuar a rearmonização. Obviamente que o processo de conversão pode não ser perfeito para alguns arquivos midi devido a grande quantia de variáveis envolvidas e particularidade de cada arquivo, por isso os testes realizados por vocês podem ser muito interessantes no sentido de corrigirmos eventuais falhas neste processo.
Muito Obrigado pelas opniões, com certeza serão de grande ajuda para aprimorarmos nosso app.
Fazer isso chega a ser tão ou talvez mais complicado do que um software OCR. E tem um ponto muito complicado que é a interpretação dos acordes e de melodias mais rápidas (isso sem contar músicas com mais de um instrumento). O midi tem as indicações das notas e o tempo delas, então o trabalho fica menos complicado.
Achei muito interessante a ideia, vou gerar uns midis de umas músicas aqui e testar depois. Parabéns pelo belo projeto.[/quote]
Sim, sei que é complexo, pois fiz um programa para localizar som (tipo o Shazam) e ja é complexo pacas, fazer a gravação e transformar em partitura então, nem se fala, por isso que falei que seria algo revolucionário.
Transformar o midi (que já possui as indicações de notas/tempo/etc), não tem nada de revolucionário, apenas saber lidar com as APIs e fazer os algoritmos adequados.
Mas nem por isso o programa deixa de ser bacana… também gostei! [/quote]
jmmenezes, realmente fazer uma gravação e transformar em uma partitura é muito complexo, sei disso pois já investiguei sobre o assunto e sei de um software que se aproxima
disso, seria o “TS-AudioToMIDI”. Este software tenta converter um arquivo de áudio, se não me engano no formato Wav, para midi. Porém, o midi que é gerado como resultado não é perfeito (possui muitas notas que não estão na música original e isso devido provavelmente a um fenômeno musical denominado “Séria Harmônica”).
Creio que o desenvolvimento de um software equivalente a este que gerasse uma partitura perfeita seria realmente revolucionário e muito complexo.
Hoje o nosso software lida com músicas escritas em arquivos midi justamente pela “facilidade” de encontrarmos neste tipo de arquivo as notas com suas informações de tempo, ritmo, etce a partir disso fazer todo o mapeamento para a estrutura de dados própria e o processo de rearmonização em si. Porém nada impede de no futuro aceitarmos outro tipo de arquivo e mapeá-lo da mesma forma.
Acho que deviam ter versões em outras plataformas também, para usuários não-android. Pelo menos continuar investindo na versão Desktop já seria uma boa.
[quote=jmmenezes]
Transformar o midi (que já possui as indicações de notas/tempo/etc), não tem nada de revolucionário, apenas saber lidar com as APIs e fazer os algoritmos adequados.
Mas nem por isso o programa deixa de ser bacana… também gostei! [/quote]
Na verdade o que ele quis dizer com revolucionário foi o fato de o programa rearmonizar a música. Isso realmente é algo muito complexo pra ser feito e foi algo que eu ainda não vi em um app de smartphone. Apesar de a música ter muita matemática, você precisa dosar muito bem as transformações pra que o resultado final não desfoque a parte artística. Eu costumo fazer isso na mão e já me arrepio com o trabalho que dá, ver um software fazendo isso é algo muito legal mesmo.
[quote=Ataxexe][quote=jmmenezes]
Transformar o midi (que já possui as indicações de notas/tempo/etc), não tem nada de revolucionário, apenas saber lidar com as APIs e fazer os algoritmos adequados.
Mas nem por isso o programa deixa de ser bacana… também gostei! [/quote]
Na verdade o que ele quis dizer com revolucionário foi o fato de o programa rearmonizar a música. Isso realmente é algo muito complexo pra ser feito e foi algo que eu ainda não vi em um app de smartphone. Apesar de a música ter muita matemática, você precisa dosar muito bem as transformações pra que o resultado final não desfoque a parte artística. Eu costumo fazer isso na mão e já me arrepio com o trabalho que dá, ver um software fazendo isso é algo muito legal mesmo.[/quote]
é… fazer a rearmoziação em Android realmente é algo revolucionário!
Sem dúvidas gomesrod, já pensamos nisso. A versão Desktop está bastante evoluída também, praticamente possui todas funcionalidades da versão android, porém o software foi desenvolvido em java e sendo assim nos preocupamos com a forma de distribuição, pois pelo que eu saiba com java é “mais difícil” garantir que os usuários não terão acesso ao código,
aliás, aproveitando a oportunidade, alguém sabe como implementar técnicas eficientes de licença em um software desktop desenvolvido em java ?
Além disso, hoje com as lojas mobile em alta acho que vender um software desktop é mais difícil, alguém conhece alguma loja virtual onde são publicados softwares desktop java ?
Pensamos também em outros meios, como uma versão Web e até uma versão para a Apple Store.
Sem dúvidas gomesrod, já pensamos nisso. A versão Desktop está bastante evoluída também, praticamente possui todas funcionalidades da versão android, porém o software foi desenvolvido em java e sendo assim nos preocupamos com a forma de distribuição, pois pelo que eu saiba com java é “mais difícil” garantir que os usuários não terão acesso ao código,
aliás, aproveitando a oportunidade, alguém sabe como implementar técnicas eficientes de licença em um software desktop desenvolvido em java ?
Além disso, hoje com as lojas mobile em alta acho que vender um software desktop é mais difícil, alguém conhece alguma loja virtual onde são publicados softwares desktop java ?
Pensamos também em outros meios, como uma versão Web e até uma versão para a Apple Store.
[/quote]
Putz cara, Java para isso é um pouco dificil mas uma forma talvez seja usar o Excelsior JET (compilador nativo).
Já fiz alguns testes e tirando o tamanho do arquivo para distribuir que fica um pouco grande (apesar que dependendo do programa, com linkagem estática também fica grande) e funcionou bem. Utilizo bastante SWT para desenvolvimento desktop Java e funcionou bem com ele.
Sem dúvidas gomesrod, já pensamos nisso. A versão Desktop está bastante evoluída também, praticamente possui todas funcionalidades da versão android, porém o software foi desenvolvido em java e sendo assim nos preocupamos com a forma de distribuição, pois pelo que eu saiba com java é “mais difícil” garantir que os usuários não terão acesso ao código,
aliás, aproveitando a oportunidade, alguém sabe como implementar técnicas eficientes de licença em um software desktop desenvolvido em java ?
Além disso, hoje com as lojas mobile em alta acho que vender um software desktop é mais difícil, alguém conhece alguma loja virtual onde são publicados softwares desktop java ?
Pensamos também em outros meios, como uma versão Web e até uma versão para a Apple Store.
[/quote]
Geralmente a regra básica é: quer prevenir ao máximo engenharia reversa? Evite usar linguagens interpretadas! (Lembrando que o bytecode é interpretado pela JVM, que pode compilar alguns trechos para acelerar a execução.)
Você pode até ter os trechos mais sensíveis do seu código, como o algoritmo de rearmonização, escritos em c++, por exemplo, e carregá-los via JNI (lembrando que a portabilidade vai ser afetada, mas nada que te impeça de criar pacotes nativos para cada sistema operacional, como o Eclipse por exemplo).
Eu acho que no seu caso uma versão web seria bem interessante. Aí talvez você possa colocar assinaturas também.
Sem dúvidas gomesrod, já pensamos nisso. A versão Desktop está bastante evoluída também, praticamente possui todas funcionalidades da versão android, porém o software foi desenvolvido em java e sendo assim nos preocupamos com a forma de distribuição, pois pelo que eu saiba com java é “mais difícil” garantir que os usuários não terão acesso ao código,
aliás, aproveitando a oportunidade, alguém sabe como implementar técnicas eficientes de licença em um software desktop desenvolvido em java ?
Além disso, hoje com as lojas mobile em alta acho que vender um software desktop é mais difícil, alguém conhece alguma loja virtual onde são publicados softwares desktop java ?
Pensamos também em outros meios, como uma versão Web e até uma versão para a Apple Store.
[/quote]
Geralmente a regra básica é: quer prevenir ao máximo engenharia reversa? Evite usar linguagens interpretadas! (Lembrando que o bytecode é interpretado pela JVM, que pode compilar alguns trechos para acelerar a execução.)
Você pode até ter os trechos mais sensíveis do seu código, como o algoritmo de rearmonização, escritos em c++, por exemplo, e carregá-los via JNI (lembrando que a portabilidade vai ser afetada, mas nada que te impeça de criar pacotes nativos para cada sistema operacional, como o Eclipse por exemplo).
Eu acho que no seu caso uma versão web seria bem interessante. Aí talvez você possa colocar assinaturas também.[/quote]
Amigo. Vc conhece o Excelsior Jet (que eu sugeri acima) ??? Não deixa de ser uma compilação nativa do Java, e a vantagem que vi é poder compartilhar trechos de código Java com outras tecnologias, além do que programador Java é mais facil contratar do que C++ (sem dizer que java é brincadeira de criança perto de C++, IMHO, pois trabalhei bastante com C e C++)
Você sabe se é possivel descompilar o código gerado por ele ??? Eu tentei com o OllyDbg e foi bem mais dificil de entender o que gerou até mesmo comparado com aplicativos C++.
Sem dúvidas gomesrod, já pensamos nisso. A versão Desktop está bastante evoluída também, praticamente possui todas funcionalidades da versão android, porém o software foi desenvolvido em java e sendo assim nos preocupamos com a forma de distribuição, pois pelo que eu saiba com java é “mais difícil” garantir que os usuários não terão acesso ao código,
aliás, aproveitando a oportunidade, alguém sabe como implementar técnicas eficientes de licença em um software desktop desenvolvido em java ?
Além disso, hoje com as lojas mobile em alta acho que vender um software desktop é mais difícil, alguém conhece alguma loja virtual onde são publicados softwares desktop java ?
Pensamos também em outros meios, como uma versão Web e até uma versão para a Apple Store.
[/quote]
Putz cara, Java para isso é um pouco dificil mas uma forma talvez seja usar o Excelsior JET (compilador nativo).
Já fiz alguns testes e tirando o tamanho do arquivo para distribuir que fica um pouco grande (apesar que dependendo do programa, com linkagem estática também fica grande) e funcionou bem. Utilizo bastante SWT para desenvolvimento desktop Java e funcionou bem com ele.[/quote]
Cara Muito Obrigado pela dica! Vou dar uma olhada nele sim.
Valeu!
[quote=Ataxexe]
Geralmente a regra básica é: quer prevenir ao máximo engenharia reversa? Evite usar linguagens interpretadas! (Lembrando que o bytecode é interpretado pela JVM, que pode compilar alguns trechos para acelerar a execução.)
Você pode até ter os trechos mais sensíveis do seu código, como o algoritmo de rearmonização, escritos em c++, por exemplo, e carregá-los via JNI (lembrando que a portabilidade vai ser afetada, mas nada que te impeça de criar pacotes nativos para cada sistema operacional, como o Eclipse por exemplo).
Eu acho que no seu caso uma versão web seria bem interessante. Aí talvez você possa colocar assinaturas também.[/quote]
Realmente você tem toda razão, porém no nosso caso não tivemos muita escolha pois utilizamos uma biblioteca java ( JMusic ) para o desenvolvimento do core da aplicação.
Estudamos outras soluções mas essa pareceu a mais completa, foi indicada inclusive por nosso orientador. Por isso, se eu fosse reescrever em outra linguagem teria que
reescrever todo o core da aplicação o que não seria legal, rs.
Sem dúvida, a versão Web parece ser uma idéia interessante sim.
Pessoal, aproveitando o tópico, alguém sabe da existência de alguma loja virtual para a distribuição de aplicações
desktop ? Imagine que eu faça um .exe referente a minha versão desktop, utilizando a ferramenta apresentada aqui
neste tópico por exemplo, onde eu poderia disponibilizá-la ?
Alguém conhece algum site voltado para isso, que possua um sistema de billing próprio e um esquema de report de downloads ?