library(tidyverse) library(magick) knitr::opts_chunk$set(echo=FALSE, warning = FALSE, message=FALSE)
knitr::include_graphics('bach.jpg')
Leitura: extrair dados estruturados dos áudios. - Music Information Retrieval - MRI
library(magick) im1 <- image_read('arrow-bold-right-ios-7-symbol_318-35504.jpg') %>% image_scale('100x100') %>% image_border('white', 'x50') im3 <- image_read('Tutu-mp3-wav-converter.jpg') %>% image_scale('x130') %>% image_border('white', 'x50') im2 <- image_read('midi.jpg') %>% image_scale('x180') image_join(im3, im1, im2) %>% image_append() %>% image_write('download.png')
knitr::include_graphics('download.png')
Composição: Criar ou completar músicas automaticamente - Harmonização
im1 <- image_read('arrow-bold-right-ios-7-symbol_318-35504.jpg') %>% image_scale('100x100') %>% image_border('white', 'x50') im2 <- image_read('midi.jpg') %>% image_scale('x180') %>% image_border('white', 'x50') im3 <- image_read('midi.jpg') %>% image_scale('x180') %>% image_charcoal() image_join(im3, im1, im2) %>% image_append() %>% image_write('generate.png')
knitr::include_graphics('generate.png')
Edição: Adicionar efeitos na música para produção
im1 <- image_read('arrow-bold-right-ios-7-symbol_318-35504.jpg') %>% image_scale('100x100') %>% image_border('white', 'x50') im2 <- image_read('daw.jpg') %>% image_scale('x180') %>% image_border('white', 'x50') im3 <- image_read('midi.jpg') %>% image_scale('x180') image_join(im3, im1, im2) %>% image_append() %>% image_write('transform.png')
knitr::include_graphics('transform.png')
Parte 2: composição
Queremos
$$ \mathcal V_i = {\mathcal V_i^t}_t, t\in {1,\dots,T}, i={1,2,3,4} $$
$$ \mathcal V_i^t \in {__, C_1, C#_1, D1, D#_1, ... B_1, C_2, C#_2, ...} $$
$$ \mathcal M = (\mathcal S, \mathcal F, \mathcal R) $$
Para cada música, nossos dados de entrada são a tupla
$$ (\mathcal V, \mathcal M), $$
em que $\mathcal V = (\mathcal V_i),i\in 1,2,3,4$.
image_read('data.png') %>% image_crop("1100x320+670+340") %>% image_write('data_ok.png')
knitr::include_graphics('data_ok.png')
Construímos um modelo que nos dê
$$ \left{p_i(\mathcal V_i^t | \mathcal V_{\setminus {i,t}}, \mathcal M, \theta_{i})\right}, i \in 1,2,3,4; t\in 1,\dots, T $$
$$ \tilde {\mathcal V}_{\setminus{i,t}} = {\mathcal V_j^s, j \neq i, s\in{t-\Delta t, \dots, t-1, t+1, \dots, t + \Delta t}} $$
Queremos obter $\theta_{i}$ de tal forma que
$$ \hat \theta_i = \arg \max_{\theta_i} \sum_t \log p_i(\mathcal V_i^t | \mathcal V_{\setminus {i,t}}, \mathcal M, \theta_{i}), \;\;\;i=1,2,3,4 $$
image_read('architecture.png') %>% image_crop("660x960+920+090") %>% image_write('architecture_ok.png')
knitr::include_graphics('architecture_ok.png')
Fazemos isso por um número de iterações $M$ definido pelo usuário.
Vermelho: % de pessoas que chutaram "Bach" nas composições
image_read('results.png') %>% image_crop("1080x480+700+330") %>% image_write('results_ok.png')
knitr::include_graphics('results_ok.png')
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.