Página 1 de 1

Como salvar um buffer de audio?

Enviado: Dom Mai 27, 2018 2:07 pm
por Foxy Of Jungle
Eu segui este tutorial, e consegui gravar a entrada de audio do Microfone, mas agora eu preciso saber como salvar o buffer criado a partir do audio gravado do Microfone.
Analisando um arquivo .wav, a primeira linha dele contém isto: "RIFF  WAVEfmt" será que o restante do arquivo é o buffer? 

O Buffer salvo puro sai essas letras codificadas:

Código: Selecionar todos

 6 > W J A * + 0 2 4 : 3 4 6 4 2 * $ ' C 1  % 6 9 * # 3 ; (  Ûÿ°ÿ¶ÿÓÿïÿ
   ïÿéÿóÿâÿØÿßÿîÿìÿØÿËÿ«ÿÿ¢ÿÿÿÿ‹ÿŸÿÿ ÿÿxÿˆÿyÿwÿ}ÿ|ÿ~ÿ|ÿ†ÿ…ÿqÿkÿ~ÿfÿwÿ|ÿrÿvÿTÿBÿ*ÿÿ2ÿ+ÿ/ÿ ÿÿ)ÿ'ÿÿ)ÿÿÿÿûþêþÛþÜþÿþöþÜþÖþÛþÖþÌþ°þªþ²þ­þ¹þ·þ¤þžþ­þ´þÄþ¼þ¦þ­þ¸þÅþºþÄþØþÌþÝþÉþ¹þ¿þ»þÄþ¿þºþÉþÂþÁþÓþÚþÚþÛþØþÐþÇþºþºþÀþÍþÕþØþäþöþñþìþòþúþõþýþúþÿÿþþþþÿÿ&ÿ?ÿ@ÿQÿ@ÿ.ÿ6ÿ9ÿFÿHÿIÿTÿgÿtÿ{ÿƒÿwÿÿ¨ÿ«ÿµÿ¼ÿ¿ÿÄÿÐÿÂÿÙÿêÿ×ÿÔÿ×ÿåÿéÿæÿûÿüÿþÿ   " 2 : 9 8 ? L e y Ï æ ß Ú í ñ × Ô Ò Ç » ² ¹ ¹ É Ñ Ó Ø Â º ³ ¿ Ö Ù Û ð ç Í Ì ¸ Ç Ù Ò ð ï â à å Ù Ä ¿ ² ¦ ¦ « © ¤ ˜  ¢ † ‰ ’ ¨ ·   Š œ ¥ ª ¯ ² ¬ ” ¡ ™ › ¥ £ • Ž ” ¡ — ’   ‰ ˜ ˜ • † } c ýÿñÿ 1     ùÿèÿÞÿÒÿÎÿÑÿËÿ¸ÿ¿ÿ¹ÿ¤ÿ¤ÿ®ÿ¦ÿ—ÿÿÿ”ÿ•ÿÿ€ÿ~ÿ{ÿjÿrÿsÿmÿyÿhÿZÿ^ÿ[ÿ[ÿeÿmÿTÿIÿMÿ:ÿÿÿÿÿ,ÿ/ÿÿÿ'ÿ3ÿ*ÿÿÿÿÿÿÿþÿþñþæþæþåþ×þÐþÇþ¿þ½þ¹þ¹þÇþÎþËþÎþÍþÖþÚþãþÚþäþäþáþýþÿÿúþðþôþûþéþâþàþÞþÝþáþéþòþàþäþÿÿ
ÿÿÿ)ÿ$ÿ!ÿ$ÿ2ÿ6ÿ+ÿ0ÿ/ÿ ÿ%ÿ-ÿ4ÿ9ÿAÿ5ÿ'ÿ-ÿ)ÿ5ÿ7ÿ?ÿQÿoÿqÿvÿ–ÿ”ÿˆÿÿ“ÿ¬ÿ¶ÿ¸ÿÆÿÌÿÑÿÖÿ×ÿÞÿïÿóÿûÿ ýÿ   (       ( 0 . 4 T [ I O a j  s } ‡  ‡ Œ õ í è è ì û × Ñ Ö Ã ¾ ­ ¥ À Ç Ê å â Õ ï ï è é æ ï  á Ô Ú Ê Ô Ó Ò Þ í é á ë ã ß Ð ¶ £  ¥ ¹ Æ µ É Ð ¾ ¹ ¿ Á à ¸ · « ª « ¨ Ÿ £ ¡ – — – • Œ † “ ¦ š ’ ‹ ‚   ‰  ˆ | h $ ôÿúÿ  )  
  öÿùÿ÷ÿøÿìÿîÿòÿñÿßÿÓÿËÿ¾ÿ·ÿ±ÿ¦ÿ—ÿ•ÿÿ’ÿ‹ÿŠÿ¢ÿ¤ÿ—ÿ¡ÿžÿ•ÿ§ÿ¨ÿ¬ÿ­ÿªÿÿ—ÿ›ÿ•ÿ‡ÿÿÿrÿgÿZÿWÿQÿPÿ?ÿGÿgÿUÿNÿ[ÿLÿJÿKÿAÿ;ÿ=ÿ,ÿÿ%ÿ"ÿÿÿÿÿÿÿþÿþÿ
ÿÿÿÿþúþûþÿÿÿùþòþðþ ÿÿñþÿÿÿ
ÿÿ"ÿÿ,ÿ(ÿ.ÿ3ÿ(ÿÿÿÿ(ÿ1ÿBÿ)ÿ
É bem grande mas eu só coloquei uma parte, algúem sabe como salvar o buffer do tutorial ?
Editável: LINK

Re: Como salvar um buffer de audio?

Enviado: Seg Mai 28, 2018 10:01 am
por None
Eu nunca usei, mas sei que o game maker possui uma buffer_save função, mas esta função é para usar ele dentro do jogo

Re: Como salvar um buffer de audio?

Enviado: Qua Mai 30, 2018 7:27 am
por Foxy Of Jungle
Ok, vou tentar. Obrigado!

Re: Como salvar um buffer de audio?  Tópico resolvido

Enviado: Qua Mai 30, 2018 11:04 am
por All-x
Seu raciocionio está correto. Falta apenas o cabeçalho para ter um arquivo WAV.

De acordo com o usuário GrixM neste post no reddit, 'basta' anexar o cabeçalho e salvar o arquivo com a função buffer_save.

O cabeçalho contém diversas informações sobre o arquivo. No mesmo post ele deixa este link mostrando a estrutura do cabeçalho e as informações que devem ser prestadas nos primeiros 44 bytes.

Não parece ser tão fácil, já que parece que algumas informações necessitam da analise do arquivo para serem obtidas.

No post ele fala que para detectar a frequência dominante, por exemplo, pode-se se usar um algoritmo chamado FFT (Fast Fourier Transform) ou usar a extensão FMODGMS.

Enfim nunca testei essas funcionalidades, mas o caminho deve ser esse.

FLWS!

Re: Como salvar um buffer de audio?

Enviado: Qui Mai 31, 2018 11:36 am
por Foxy Of Jungle
Obrigado pela resposta Alex FC, vou analisar.


Edit:

Eu consegui escrever este código, o arquivo saiu bem parecido com "um de verdade" mas o player encontrou um problema ao executar.

Como usei:

Código: Selecionar todos

//Get File Name
FILENAME = get_save_filename("","")

//Save audio buffer data and then get it into a string
buffer_save(audio_buff,"tempaudiodata.buffer")
audio_data=read_buffer_string("tempaudiodata.buffer")


audio_buffer = buffer_create(256, buffer_grow, 1);
buffer_seek(audio_buffer, buffer_seek_start, 0);

//ChunkID
buffer_write(audio_buffer,buffer_string,"RIFF")
//ChunkSize
buffer_write(audio_buffer,buffer_s8,4+(8+16)+(8+16)) //36
//Format
buffer_write(audio_buffer,buffer_string,"WAVE")

//Subchunk1ID
buffer_write(audio_buffer,buffer_string,"fmt ")
//Subchunk1Size
buffer_write(audio_buffer,buffer_s8,16)
//AudioFormat
buffer_write(audio_buffer,buffer_s8,1)

//NumChannels
buffer_write(audio_buffer,buffer_s8,channels)
//SampleRate
buffer_write(audio_buffer,buffer_u32,44100)
//ByteRate
buffer_write(audio_buffer,buffer_u32,44100 * channels * 128/8) //SampleRate * NumChannels * BitsPerSample/8
//BlockAlign
buffer_write(audio_buffer,buffer_u32,channels*128/8) //NumChannels * BitsPerSample/8
//BitsPerSample
buffer_write(audio_buffer,buffer_s8,128)

//Subchunk2ID
buffer_write(audio_buffer,buffer_string,"data")
//Subchunk2Size
buffer_write(audio_buffer,buffer_u32,48000 * channels * 128/8) //NumSamples * NumChannels * BitsPerSample/8
//Data
buffer_write(audio_buffer,buffer_string,audio_data)



buffer_save(audio_buffer,FILENAME)
buffer_delete(audio_buffer)