[{"data":1,"prerenderedAt":1090},["ShallowReactive",2],{"project-text-arpeggiator-pt":3},{"id":4,"title":5,"body":6,"description":1083,"extension":1084,"meta":1085,"navigation":534,"path":1086,"seo":1087,"stem":1088,"__hash__":1089},"projects_pt\u002Fpt\u002Fprojetos\u002Farpeggiator.md","Arpeggiator",{"type":7,"value":8,"toc":1062},"minimark",[9,14,18,47,52,55,93,97,121,170,215,219,226,233,237,240,263,266,279,368,371,380,391,407,550,559,563,566,597,600,604,626,662,677,681,711,782,785,789,800,886,889,893,896,900,932,936,962,966,992,996,1034,1038,1058],[10,11,13],"h2",{"id":12},"como-funciona-um-arpejador","Como funciona um arpejador",[15,16,17],"p",{},"Um arpejador não inventa harmonia. Ele recebe as notas que você escolhe, organiza essas notas em um padrão e agenda cada som no instante certo. O caminho tem quatro etapas:",[19,20,21,29,35,41],"ol",{},[22,23,24,28],"li",{},[25,26,27],"strong",{},"Entrada das notas:"," cliques no teclado da tela ou teclas do computador.",[22,30,31,34],{},[25,32,33],{},"Gerador de padrão:"," subindo, descendo, aleatório, em várias oitavas.",[22,36,37,40],{},[25,38,39],{},"Agendador de áudio:"," as notas são marcadas com antecedência no relógio do áudio.",[22,42,43,46],{},[25,44,45],{},"Voz do sintetizador:"," oscilador, envelope e filtro produzem cada nota.",[48,49,51],"h3",{"id":50},"_1-notas-viram-números","1. Notas viram números",[15,53,54],{},"Cada tecla do piano é representada por um número MIDI. O Dó central é 60, o Dó sustenido é 61, o Ré é 62, e assim por diante. Com isso, transpor e repetir em outras oitavas vira aritmética simples: uma oitava acima é somar 12.",[56,57,62],"math",{"display":58,"className":59,"style":61},"block",[60],"tml-display","display:block math;",[63,64,65,69,73,77,81,85,88,90],"mrow",{},[66,67,68],"mtext",{},"Dó4",[70,71,72],"mo",{},"=",[74,75,76],"mn",{},"60",[70,78,80],{"separator":79},"true",",",[82,83],"mspace",{"width":84},"2em",[66,86,87],{},"Dó5",[70,89,72],{},[74,91,92],{},"72",[48,94,96],{"id":95},"_2-o-número-midi-vira-frequência","2. O número MIDI vira frequência",[15,98,99,100,120],{},"O oscilador precisa de uma frequência em hertz, não do nome da nota. No temperamento igual, cada semitom multiplica a frequência por ",[56,101,102],{},[103,104,105,108],"msup",{},[74,106,107],{},"2",[63,109,110,113,117],{},[74,111,112],{},"1",[114,115,116],"mi",{},"\u002F",[74,118,119],{},"12",". Usando o Lá4 (MIDI 69) com 440 Hz como referência:",[122,123,124],"key-formula",{},[56,125,127],{"display":58,"className":126,"style":61},[60],[63,128,129,132,134,137,140],{},[114,130,131],{},"f",[70,133,72],{},[74,135,136],{},"440",[70,138,139],{},"⋅",[103,141,142,144],{},[74,143,107],{},[63,145,146,166,168],{},[63,147,148,153,156,159,162],{},[70,149,152],{"fence":79,"form":150,"stretchy":151},"prefix","false","(",[114,154,155],{},"n",[70,157,158],{},"−",[74,160,161],{},"69",[70,163,165],{"fence":79,"form":164,"stretchy":151},"postfix",")",[114,167,116],{},[74,169,119],{},[15,171,172,173,183,184,214],{},"Por exemplo, o Dó central (",[56,174,175],{},[63,176,177,179,181],{},[114,178,155],{},[70,180,72],{},[74,182,76],{},") fica em ",[56,185,186],{},[63,187,188,190,192,208,211],{},[74,189,136],{},[70,191,139],{},[103,193,194,196],{},[74,195,107],{},[63,197,198,201,204,206],{},[70,199,158],{"form":150,"stretchy":151,"lspace":200,"rspace":200},"0em",[74,202,203],{},"9",[114,205,116],{},[74,207,119],{},[70,209,210],{},"≈",[74,212,213],{},"261,6"," Hz.",[48,216,218],{"id":217},"_3-o-acorde-vira-uma-sequência","3. O acorde vira uma sequência",[15,220,221,222,225],{},"No padrão ",[25,223,224],{},"subindo",", as notas são ordenadas da mais grave para a mais aguda, e as oitavas extras são criadas somando 12 semitons. A sequência toca exatamente as notas que você escolheu, sem acrescentar nenhuma: um Cmaj7 de uma oitava soa Dó, Mi, Sol, Si. Os outros padrões invertem, espelham ou embaralham essa lista.",[15,227,228,229,232],{},"O padrão ",[25,230,231],{},"aleatório"," é sorteado só quando as notas, o padrão, a extensão ou a transposição mudam. Mexer no andamento ou no timbre não reembaralha a sequência.",[48,234,236],{"id":235},"_4-o-andamento-define-o-relógio","4. O andamento define o relógio",[15,238,239],{},"O andamento em BPM diz quantos tempos cabem em um minuto, e a divisão diz que fração do tempo cada passo ocupa:",[56,241,243],{"display":58,"className":242,"style":61},[60],[63,244,245,248,250,258,260],{},[66,246,247],{},"passo",[70,249,72],{},[251,252,253,255],"mfrac",{},[74,254,76],{},[66,256,257],{},"BPM",[70,259,139],{},[66,261,262],{},"divisão",[15,264,265],{},"A 120 BPM, um tempo dura meio segundo. Uma semicolcheia (1\u002F16) é um quarto disso, então um passo novo começa a cada 125 ms.",[15,267,268,269,272,273,278],{},"O ",[25,270,271],{},"swing"," alonga o primeiro passo de cada par e encurta o segundo na mesma medida, então toda segunda nota chega um pouco atrasada. Com swing ",[56,274,275],{},[114,276,277],{},"s"," (de 0 a 0,6):",[56,280,282],{"display":58,"className":281,"style":61},[60],[283,284,287,331],"mtable",{"displaystyle":79,"className":285},[286],"tml-jot",[288,289,290],"mtr",{},[291,292,294],"mtd",{"style":293},"padding-left:0em;padding-right:0em;",[63,295,296,304,306,308,310],{},[297,298,299,301],"msub",{},[66,300,247],{},[66,302,303],{},"par",[70,305,72],{},[66,307,247],{},[70,309,139],{},[63,311,312,314,316,319,329],{},[70,313,152],{"fence":79,"form":150,"stretchy":79},[74,315,112],{},[70,317,318],{},"+",[320,321,323],"mstyle",{"displaystyle":151,"scriptlevel":322},"0",[251,324,325,327],{},[114,326,277],{},[74,328,107],{},[70,330,165],{"fence":79,"form":164,"stretchy":79},[288,332,333],{},[291,334,335],{"style":293},[63,336,337,344,346,348,350],{},[297,338,339,341],{},[66,340,247],{},[66,342,343],{},"ímpar",[70,345,72],{},[66,347,247],{},[70,349,139],{},[63,351,352,354,356,358,366],{},[70,353,152],{"fence":79,"form":150,"stretchy":79},[74,355,112],{},[70,357,158],{},[320,359,360],{"displaystyle":151,"scriptlevel":322},[251,361,362,364],{},[114,363,277],{},[74,365,107],{},[70,367,165],{"fence":79,"form":164,"stretchy":79},[15,369,370],{},"A contagem de pares usa o número total de passos desde que a música começou, e não a posição na sequência. Assim o balanço continua alternando mesmo quando a sequência tem um número ímpar de notas.",[48,372,374,375,379],{"id":373},"_5-por-que-não-tocar-as-notas-com-setinterval","5. Por que não tocar as notas com ",[376,377,378],"code",{},"setInterval","?",[15,381,382,383,386,387,390],{},"Os temporizadores do JavaScript podem atrasar por causa da renderização, da rolagem ou de outras tarefas da página. Um atraso de 20 ms já é audível num ritmo de semicolcheias. Por isso o projeto separa ",[25,384,385],{},"decidir"," de ",[25,388,389],{},"tocar",":",[392,393,394,397,404],"ul",{},[22,395,396],{},"um laço curto acorda a cada 25 ms e marca as notas que caem nos próximos 100 ms;",[22,398,399,400,403],{},"cada nota é agendada no ",[25,401,402],{},"relógio da Web Audio",", que roda fora da página e toca no instante exato;",[22,405,406],{},"a tela acompanha o mesmo relógio: a nota destacada muda num laço de animação que lê a fila de notas agendadas.",[408,409,414],"pre",{"className":410,"code":411,"language":412,"meta":413,"style":413},"language-js shiki shiki-themes github-light-high-contrast github-dark-high-contrast","function scheduler() {\n  while (nextNoteTime \u003C audioContext.currentTime + 0.1) {\n    const midi = sequence[step % sequence.length]\n    playVoice(midi, nextNoteTime, gateTime)\n    nextNoteTime += stepDuration(step)\n    step++\n  }\n}\n\nsetInterval(scheduler, 25)\n","js","",[376,415,416,433,457,484,493,508,517,523,529,536],{"__ignoreMap":413},[417,418,421,425,429],"span",{"class":419,"line":420},"line",1,[417,422,424],{"class":423},"sHUrx","function",[417,426,428],{"class":427},"sKwhi"," scheduler",[417,430,432],{"class":431},"suds8","() {\n",[417,434,436,439,442,445,448,450,454],{"class":419,"line":435},2,[417,437,438],{"class":423},"  while",[417,440,441],{"class":431}," (nextNoteTime ",[417,443,444],{"class":423},"\u003C",[417,446,447],{"class":431}," audioContext.currentTime ",[417,449,318],{"class":423},[417,451,453],{"class":452},"s-5SL"," 0.1",[417,455,456],{"class":431},") {\n",[417,458,460,463,466,469,472,475,478,481],{"class":419,"line":459},3,[417,461,462],{"class":423},"    const",[417,464,465],{"class":452}," midi",[417,467,468],{"class":423}," =",[417,470,471],{"class":431}," sequence[step ",[417,473,474],{"class":423},"%",[417,476,477],{"class":431}," sequence.",[417,479,480],{"class":452},"length",[417,482,483],{"class":431},"]\n",[417,485,487,490],{"class":419,"line":486},4,[417,488,489],{"class":427},"    playVoice",[417,491,492],{"class":431},"(midi, nextNoteTime, gateTime)\n",[417,494,496,499,502,505],{"class":419,"line":495},5,[417,497,498],{"class":431},"    nextNoteTime ",[417,500,501],{"class":423},"+=",[417,503,504],{"class":427}," stepDuration",[417,506,507],{"class":431},"(step)\n",[417,509,511,514],{"class":419,"line":510},6,[417,512,513],{"class":431},"    step",[417,515,516],{"class":423},"++\n",[417,518,520],{"class":419,"line":519},7,[417,521,522],{"class":431},"  }\n",[417,524,526],{"class":419,"line":525},8,[417,527,528],{"class":431},"}\n",[417,530,532],{"class":419,"line":531},9,[417,533,535],{"emptyLinePlaceholder":534},true,"\n",[417,537,539,541,544,547],{"class":419,"line":538},10,[417,540,378],{"class":427},[417,542,543],{"class":431},"(scheduler, ",[417,545,546],{"class":452},"25",[417,548,549],{"class":431},")\n",[551,552,553],"callout",{},[15,554,555,558],{},[25,556,557],{},"Agende primeiro, toque depois."," O JavaScript só precisa acordar antes da janela de 100 ms acabar. Mesmo que o laço atrase alguns milissegundos, as notas já estão marcadas no relógio do áudio e saem no tempo certo.",[48,560,562],{"id":561},"_6-o-sintetizador-cria-o-som","6. O sintetizador cria o som",[15,564,565],{},"A cada passo, o navegador cria uma voz nova e a descarta quando o som termina:",[19,567,568,574,580,586],{},[22,569,570,573],{},[25,571,572],{},"Dois osciladores"," geram a onda (senoide, triangular, quadrada ou dente de serra). O segundo fica levemente desafinado, o que alarga o som.",[22,575,268,576,579],{},[25,577,578],{},"envelope"," controla o volume ao longo da nota: sobe durante o ataque, cai um pouco, se mantém enquanto a nota dura e some durante a liberação.",[22,581,268,582,585],{},[25,583,584],{},"filtro passa-baixas"," corta as frequências acima do ponto de corte, e a ressonância reforça a região em volta dele.",[22,587,588,589,592,593,596],{},"A ",[25,590,591],{},"saturação"," e o ",[25,594,595],{},"eco"," dão cor e espaço, antes do compressor e dos alto-falantes.",[15,598,599],{},"Com uma duração de nota muito curta, a nota pode acabar antes de o ataque terminar. Nesse caso, cada etapa do envelope é limitada ao fim da nota, para as automações de volume nunca voltarem no tempo.",[48,601,603],{"id":602},"_7-a-aceleração-é-automação-de-parâmetros","7. A aceleração é automação de parâmetros",[15,605,606,607,611,612,615,616,620,621,390],{},"A aceleração (em produção musical, ",[608,609,610],"em",{},"build-up"," ou ",[608,613,614],{},"riser",") encurta aos poucos o intervalo entre as notas. Ao mesmo tempo, abre o filtro e aumenta a saturação. Com o progresso ",[56,617,618],{},[114,619,15],{}," indo de 0 a 1 e a velocidade final ",[56,622,623],{},[114,624,625],{},"v",[122,627,628],{},[56,629,631],{"display":58,"className":630,"style":61},[60],[63,632,633,635,643,645],{},[66,634,247],{},[63,636,637,639,641],{},[70,638,152],{"fence":79,"form":150,"stretchy":151},[114,640,15],{},[70,642,165],{"fence":79,"form":164,"stretchy":151},[70,644,72],{},[251,646,647,649],{},[66,648,247],{},[103,650,651,653],{},[114,652,625],{},[63,654,657,660],{"className":655},[656],"tml-sml-pad",[82,658],{"width":659},"0.1667em",[114,661,15],{},[15,663,664,665,676],{},"Como a divisão é por uma potência, a aceleração é exponencial: com ",[56,666,667],{},[63,668,669,671,673],{},[114,670,625],{},[70,672,72],{},[74,674,675],{},"4",", na metade do caminho os passos já estão duas vezes mais curtos. O corte do filtro sobe da mesma forma, até cerca de 12 kHz.",[48,678,680],{"id":679},"_8-a-saturação-curva-a-forma-de-onda","8. A saturação curva a forma de onda",[15,682,683,684,687,688,702,703,390],{},"Um ",[376,685,686],{},"WaveShaperNode"," passa cada amostra por uma curva não linear. Aqui a curva é a tangente hiperbólica, normalizada para que ",[56,689,690],{},[63,691,692,695,697,700],{},[114,693,694],{},"x",[70,696,72],{},[70,698,699],{"form":150,"stretchy":151},"±",[74,701,112],{}," continue em ",[56,704,705],{},[63,706,707,709],{},[70,708,699],{"form":150,"stretchy":151},[74,710,112],{},[56,712,714],{"display":58,"className":713,"style":61},[60],[63,715,716,719,721,762,764,766,768,770,772,774],{},[114,717,718],{},"y",[70,720,72],{},[251,722,723,746],{},[63,724,725,733],{},[63,726,727,730],{},[114,728,729],{},"tanh",[70,731,732],{},"⁡",[63,734,735,737,740,742,744],{},[70,736,152],{"fence":79,"form":150,"stretchy":151},[114,738,739],{},"a",[82,741],{"width":659},[114,743,694],{},[70,745,165],{"fence":79,"form":164,"stretchy":151},[63,747,748,754],{},[63,749,750,752],{},[114,751,729],{},[70,753,732],{},[63,755,756,758,760],{},[70,757,152],{"fence":79,"form":150,"stretchy":151},[114,759,739],{},[70,761,165],{"fence":79,"form":164,"stretchy":151},[70,763,80],{"separator":79},[82,765],{"width":84},[114,767,739],{},[70,769,72],{},[74,771,112],{},[70,773,318],{},[251,775,776,779],{},[66,777,778],{},"intensidade",[74,780,781],{},"8",[15,783,784],{},"Quanto maior a intensidade, mais a curva achata os picos da onda, e esse achatamento cria harmônicos novos. O controle de mistura combina o caminho limpo com o saturado (com ganhos em cosseno e seno, para o volume percebido não mudar), então o som ganha densidade sem precisar ficar agressivo.",[48,786,788],{"id":787},"_9-o-espectro-mostra-o-filtro-agindo","9. O espectro mostra o filtro agindo",[15,790,683,791,794,795,799],{},[376,792,793],{},"AnalyserNode"," aplica a transformada rápida de Fourier (FFT) na saída final. O eixo horizontal é logarítmico, como o espaçamento das oitavas: cada frequência ",[56,796,797],{},[114,798,131],{}," vai para a posição",[56,801,803],{"display":58,"className":802,"style":61},[60],[63,804,805,807,815,817],{},[114,806,694],{},[63,808,809,811,813],{},[70,810,152],{"fence":79,"form":150,"stretchy":151},[114,812,131],{},[70,814,165],{"fence":79,"form":164,"stretchy":151},[70,816,72],{},[251,818,819,849],{},[63,820,821,828],{},[63,822,823,826],{},[114,824,825],{},"log",[70,827,732],{},[63,829,830,832,834,836,847],{},[70,831,152],{"fence":79,"form":150,"stretchy":151},[114,833,131],{},[114,835,116],{},[297,837,838,840],{},[114,839,131],{},[63,841,842,845],{},[114,843,844],{},"min",[70,846,732],{},[70,848,165],{"fence":79,"form":164,"stretchy":151},[63,850,851,857],{},[63,852,853,855],{},[114,854,825],{},[70,856,732],{},[63,858,859,861,872,874,884],{},[70,860,152],{"fence":79,"form":150,"stretchy":151},[297,862,863,865],{},[114,864,131],{},[63,866,867,870],{},[114,868,869],{},"max",[70,871,732],{},[114,873,116],{},[297,875,876,878],{},[114,877,131],{},[63,879,880,882],{},[114,881,844],{},[70,883,732],{},[70,885,165],{"fence":79,"form":164,"stretchy":151},[15,887,888],{},"Cada quadro é normalizado para que o componente mais forte fique em 0 dB. Isso facilita comparar a forma do espectro e ver o corte do filtro: mova o corte e os harmônicos à direita do marcador somem.",[10,890,892],{"id":891},"o-que-cada-controle-altera","O que cada controle altera",[15,894,895],{},"Mude um parâmetro por vez e escute a diferença.",[48,897,899],{"id":898},"tempo-e-movimento","Tempo e movimento",[392,901,902,908,914,920,926],{},[22,903,904,907],{},[25,905,906],{},"Padrão:"," a ordem das notas (subindo, descendo, sobe e desce, ordem escolhida ou aleatória).",[22,909,910,913],{},[25,911,912],{},"Divisão:"," a duração rítmica de cada passo.",[22,915,916,919],{},[25,917,918],{},"Andamento:"," a velocidade geral, em BPM.",[22,921,922,925],{},[25,923,924],{},"Duração da nota:"," a fração do passo em que a nota fica soando.",[22,927,928,931],{},[25,929,930],{},"Swing:"," o atraso aplicado a cada segundo passo.",[48,933,935],{"id":934},"notas-e-altura","Notas e altura",[392,937,938,944,950,956],{},[22,939,940,943],{},[25,941,942],{},"Oitava do teclado:"," escolhe as notas atribuídas às teclas de A a K.",[22,945,946,949],{},[25,947,948],{},"Extensão:"," copia as notas selecionadas uma ou duas oitavas acima.",[22,951,952,955],{},[25,953,954],{},"Transposição:"," move a sequência inteira, mantendo os intervalos escolhidos.",[22,957,958,961],{},[25,959,960],{},"Acordes prontos:"," selecionam as notas de um acorde de uma vez; o arpejador continua tocando uma nota por vez.",[48,963,965],{"id":964},"envelope-e-filtro","Envelope e filtro",[392,967,968,974,980,986],{},[22,969,970,973],{},[25,971,972],{},"Ataque:"," quão rápido o som chega ao pico depois que a nota começa.",[22,975,976,979],{},[25,977,978],{},"Liberação:"," quanto tempo o som leva para sumir depois que a nota termina.",[22,981,982,985],{},[25,983,984],{},"Corte do filtro:"," a frequência mais alta que o filtro passa-baixas deixa passar.",[22,987,988,991],{},[25,989,990],{},"Ressonância:"," um reforço em volta da frequência de corte.",[48,993,995],{"id":994},"timbre-espaço-e-automação","Timbre, espaço e automação",[392,997,998,1004,1010,1016,1022,1028],{},[22,999,1000,1003],{},[25,1001,1002],{},"Oscilador:"," a forma de onda e o caráter harmônico do som.",[22,1005,1006,1009],{},[25,1007,1008],{},"Eco:"," repetições sincronizadas com o andamento, misturadas atrás da nota.",[22,1011,1012,1015],{},[25,1013,1014],{},"Intensidade da saturação:"," quanto o sinal é empurrado para a curva não linear.",[22,1017,1018,1021],{},[25,1019,1020],{},"Mistura da saturação:"," o equilíbrio entre o caminho limpo e o saturado.",[22,1023,1024,1027],{},[25,1025,1026],{},"Desafinação analógica:"," a pequena diferença de afinação entre os osciladores, que dá largura e movimento.",[22,1029,1030,1033],{},[25,1031,1032],{},"Aceleração:"," a rampa que aumenta velocidade, corte e saturação até você zerar.",[10,1035,1037],{"id":1036},"tudo-acontece-no-navegador","Tudo acontece no navegador",[392,1039,1040,1046,1052],{},[22,1041,1042,1045],{},[25,1043,1044],{},"Sem arquivos de áudio:"," todo som é gerado em tempo real por osciladores.",[22,1047,1048,1051],{},[25,1049,1050],{},"Sem bibliotecas de áudio:"," o motor usa só a Web Audio API.",[22,1053,1054,1057],{},[25,1055,1056],{},"Sem envio de dados:"," as notas e o áudio ficam no seu aparelho.",[1059,1060,1061],"style",{},"html pre.shiki code .sHUrx, html code.shiki .sHUrx{--shiki-default:#A0111F;--shiki-dark:#FF9492}html pre.shiki code .sKwhi, html code.shiki .sKwhi{--shiki-default:#622CBC;--shiki-dark:#DBB7FF}html pre.shiki code .suds8, html code.shiki .suds8{--shiki-default:#0E1116;--shiki-dark:#F0F3F6}html pre.shiki code .s-5SL, html code.shiki .s-5SL{--shiki-default:#023B95;--shiki-dark:#91CBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":413,"searchDepth":435,"depth":435,"links":1063},[1064,1076,1082],{"id":12,"depth":435,"text":13,"children":1065},[1066,1067,1068,1069,1070,1072,1073,1074,1075],{"id":50,"depth":459,"text":51},{"id":95,"depth":459,"text":96},{"id":217,"depth":459,"text":218},{"id":235,"depth":459,"text":236},{"id":373,"depth":459,"text":1071},"5. Por que não tocar as notas com setInterval?",{"id":561,"depth":459,"text":562},{"id":602,"depth":459,"text":603},{"id":679,"depth":459,"text":680},{"id":787,"depth":459,"text":788},{"id":891,"depth":435,"text":892,"children":1077},[1078,1079,1080,1081],{"id":898,"depth":459,"text":899},{"id":934,"depth":459,"text":935},{"id":964,"depth":459,"text":965},{"id":994,"depth":459,"text":995},{"id":1036,"depth":435,"text":1037},"Arpejador e sintetizador em tempo real no navegador, feito só com a Web Audio API, sem bibliotecas e sem arquivos de áudio.","md",{},"\u002Fpt\u002Fprojetos\u002Farpeggiator",{"title":5,"description":1083},"pt\u002Fprojetos\u002Farpeggiator","onnCJo81XB-RDKoI40og6J5mFtuFlx_cpM9b15gHeF0",1792101207005]