Ola pessoal estou com um problemão no meu tcc rsrs.
Estou fazendo aquisição de amostras de um módulo arduino que se comunica através de uma interface udp com níveis de quantização de 0 a 1023.
Estou armazenando esta aquisição na variável $watts.
O problema consiste em gerar um arquivo wav com várias amostras dentro dele, com este programa que eu fiz, ele está armazenando apenas 1 valor na variável $watts.
Quando eu gero um loop na variável ele pega o valor e mostra 8000 vezes!
Alguém tem uma idéia de como eu poderia armazenar várias amostras que chegado da UDP em uma variável?
Pergunta
Dilson_boy
Ola pessoal estou com um problemão no meu tcc rsrs.
Estou fazendo aquisição de amostras de um módulo arduino que se comunica através de uma interface udp com níveis de quantização de 0 a 1023.
Estou armazenando esta aquisição na variável $watts.
O problema consiste em gerar um arquivo wav com várias amostras dentro dele, com este programa que eu fiz, ele está armazenando apenas 1 valor na variável $watts.
Quando eu gero um loop na variável ele pega o valor e mostra 8000 vezes!
Alguém tem uma idéia de como eu poderia armazenar várias amostras que chegado da UDP em uma variável?
Ou alguma forma de fazer aquisição destes dados?
Segue o programa:
#!/usr/bin/perl -w
# cclisten - UDP Currentcost listener
use strict;
use IO::Socket;
my($msglen,$sock, $newmsg, $MAXLEN, $PORTNO);
my($lasttimestamp,$timestamp,$tempr,$watts,$errcount,$timeouts);
$MAXLEN = 1024;
$PORTNO = 52240;
$sock = IO::Socket::INET->new(LocalPort => $PORTNO,
Proto => 'udp',
LocalAddr => '192.168.10.255',
Broadcast => 1)
or die "socket: $@";
print "Awaiting UDP messages on port $PORTNO\n";
$lasttimestamp = 0;
while ($sock->recv($newmsg, $MAXLEN)) {
$msglen = length($newmsg);
$timestamp = unpack("L", substr( $newmsg, 0, 4));
$tempr = unpack("S", substr( $newmsg, 4, 2)) / 10;
$watts = unpack("S", substr( $newmsg, 6, 2));
#print "tempo: $tempr Obtendo dados: $watts\n";
use Audio::Wav;
my $wav = new Audio::Wav;
my $sample_rate = 44100;
my $bits_sample = 10;
my $details = {
'bits_sample' => $bits_sample,
'sample_rate' => $sample_rate,
'channels' => 1,
# if you'd like this module not to use a write cache, uncomment the next line
#'no_cache' => 1,
};
my $write = $wav -> write( 'testesom.wav', $details );
my $i;
for $i (44..8000){
print "$watts\n";
$write -> write($watts);
}
$write -> finish();
die "recv: $!";
}
Link para o comentário
Compartilhar em outros sites
10 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.