tuga Postado Novembro 8, 2008 Denunciar Share Postado Novembro 8, 2008 boasgostaria de saber se é possível guardar a informação de um arquivo audio numa string. tipo:char som[]; FILE *fp; ....... abrir ficheiro while( != EOF) read(fp, &som, sizeof(som)); ........isto assim, e caso quisesse construir outra vez o ficheiro seria utilizar a função write()....Digam se isto é possivel ou existe uma maneira mais facil, ou mais dificil, deem links de outras paginas, sobretudo ajudem postem algoAbraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Novembro 8, 2008 Denunciar Share Postado Novembro 8, 2008 Sim, é possível. Porém você terá que fazer algumas modificações. Em arquivos binários, o EOF pode vir antes do arquivo terminar. Então para ver se é hora de sair do while, você vai ter que testar quantos bytes ele leu, se for maior que 0, continue.Aqui, um código que acabei de escrever para testar:#include <stdio.h> int main(void) { FILE *file; FILE *wfile; char read[1024]; short int bytesRead = 0x03FF; file = fopen("hello", "r"); wfile = fopen("newcopy", "w"); while( bytesRead > 0 ) { bytesRead = fread(&read, 1, 1024, file); } fwrite(read, 1, 1024, wfile); return 0; }Funcionou perfeitamente.durub@zerobot:~/Desktop$ ./helloHello, world!durub@zerobot:~/Desktop$ ./newcopyHello, world!Abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 tuga Postado Novembro 10, 2008 Autor Denunciar Share Postado Novembro 10, 2008 Boasem termos de caracteres eu já tinha experimentado mas em termos de som não consegui ainda. Com a ajuda de seu código fiz :int main(void) { FILE *file; FILE *wfile; char read[100000]; short int bytesRead = 0x03FF; file = fopen("1.wav", "r"); wfile = fopen("cop.wav", "w+"); while( bytesRead > 0 ) { bytesRead = fread(&read, 1, 100000, file); } fwrite(read, 1, strlen(read), wfile); fclose(file); fclose(wfile); return 0; }fiz desta maneira mas não tá funcionandose tiver alguma coisa que ajude agradecia Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --Durub -- Postado Novembro 10, 2008 Denunciar Share Postado Novembro 10, 2008 Você não pode utilizar strlen em informações de um arquivo binário.Para o strlen funcionar você necessita ter um 0 (NULL) como caractere de controle no última posição da string. Utilize: fwrite(read, 1, 100000, file);Abraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 tuga Postado Novembro 10, 2008 Autor Denunciar Share Postado Novembro 10, 2008 por acaso não sabia isso não, mas me deparei com outro problema, pois normalmente os arquivos de som são maiores que 97.7kb (100000) se acrescentar uma 0 na variavel "read", ele dá falha de segmentação, existe alguma maneira de contornar este problema ?e só mais uma qustão, porque é que inicializa a variavel "short int bytesRead = 0x03FF;" com este valor?Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Novembro 10, 2008 Denunciar Share Postado Novembro 10, 2008 0x03FF significa 1024, eu tinha outra idéia em mente para testar quantos bytes foram lidos, mas essa funcionou normalmente e então não precisei do valor.Pode colocar bytesRead = 0x0001 ou bytesRead = 1 que funcionará normalmente.O certo seria você verificar o tamanho do arquivo e então fazer uma variável com alocação dinâmica a partir disso.Abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
tuga
boas
gostaria de saber se é possível guardar a informação de um arquivo audio numa string. tipo:
isto assim, e caso quisesse construir outra vez o ficheiro seria utilizar a função write()....
Digam se isto é possivel ou existe uma maneira mais facil, ou mais dificil, deem links de outras paginas, sobretudo ajudem postem algo
Abraço
Link para o comentário
Compartilhar em outros sites
5 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.