Ir para conteúdo
Fórum Script Brasil
  • 0

strings e audio


tuga

Pergunta

boas

gostaria 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 algo

Abraço

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

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$ ./hello

Hello, world!

durub@zerobot:~/Desktop$ ./newcopy

Hello, world!

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

Boas

em 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á funcionando

se tiver alguma coisa que ajude agradecia

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Durub --

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!

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...