lecture d'un fichier wav en C - C - Programmation
Marsh Posté le 16-05-2008 à 14:47:59
Code :
|
Mauvaise pratique : "Taille" est une variable, définir une macro de cette façon pour masquer cette variable n'apporte rien sinon des problèmes de lisibilité de programme.
Code :
|
Invalide.
Il n'y a que deux prototypes de main() possibles :
int main(void);
et
int main(int, char**);
Code :
|
Outch.
Qu'est-ce que "Taille" ?
Cette variable n'est définie nul part. Et même si elle l'était, c'est une mauvaise idée d'utiliser les VLA (Variable-Length Array), sans compter que très peu de compilateur les implémentent correctement (nouvelle fonctionnalité de la norme C99 qui n'est pas encore implémentée partout).
Il faut d'abord calculer la taille, puis allouer de la mémoire de taille adéquate, avec les fonctions d'allocations malloc ou calloc.
Code :
|
Incorrect.
Code :
|
Correct si tu utilises fopen() (et dans ce cas ta variable "fd" est un FILE* et non un int), incorrect avec open.
La fonction open() retourne un descripteur de fichier >= 0, en cas d'échec d'ouverture, la valeur retournée est -1.
Lire la manpage sur cette fonction pour plus d'information.
Code :
|
Encore un problème de confusion prototype/utilisation de fonction.
Un prototype de fonction permet de la définir en vue d'une utilisation ultérieure.
Par exemple, le prototype de la fonction fread() est :
size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);
(tu n'as pas à l'écrire toi-même, ce prototype est défini dans stdio.h)
Et pour utiliser la fonction, il suffit d'écrire :
fread(pointeur sur lequel fread va écrire, taille d'un item, nombre d'items à lire, descripteur de fichier);
De plus, tu ne peux pas utiliser fread() avec un descripteur de fichier ouvert avec open().
De même, tu ne peux pas utiliser read() avec un descripteur de fichier ouvert avec fopen().
Ici la solution est simple : utilise fopen() plus haut avec un descripteur de fichier en FILE*.
Code :
|
Ouh la, je ne suis pas sûr de comprendre ce que tu essaies de faire ici.
etc.
Je te suggère à ce stade de faire un tour sur des sites de tutoriaux ou de te procurer un bon livre de C.
Comme livre, il y a le sempiternel "Le Langage C", par Kernighan et Ritchie (bouquin surnommé affectueusement "le K&R" ). C'est la bible, c'est très simple d'utilisation et très bien expliqué.
Comme sites internet, tu peux faire un tour ici : http://mapage.noos.fr/emdel (plein de conseils, quelques liens vers des cours complets en lignes, etc).
Marsh Posté le 16-05-2008 à 14:59:24
Merci Elmoricq de me repondre.
Pour (la variable) Taille, je l'ai utilisée pour vous éxpliquer qu' est une donnée que je dois la calculer avec un programme qui j'arrive pas à le faire.
Je resume mes questions:
1/ comment je peux tirer la taille d'un fichier wav?
2/ comment on copie une partie de ce fichier et la mettre da,s un tableau.
Merci beaucoup Elmoricq
Marsh Posté le 16-05-2008 à 15:10:37
Pour lire un fichier de taille inconnue, il y a deux approches :
Je n'aime pas la seconde méthode, parce que ça te force à parcourir 2x le fichier, ce qui est coûteux pour les gros fichiers... comme les .WAV, justement. Préconise la première méthode, qui te fera voir en plus des fonctions utiles en C, comme malloc(), realloc(), et consors.
Pour la lecture de données, fread() fait parfaitement l'affaire ici.
Marsh Posté le 18-05-2008 à 19:38:55
Bonsoir à tous
Mr Elmoricq, j'ai consacré les deux derniers jours pour lire des cours de C et j'ai cherché des fonctions qui réalisent mon programme et en fin j'ai reussi de faire le faire. Mais malheureusemant à la complation j'ai des erreurs:
Code :
|
es ce que tu peux m'aider svp
Code :
|
Marsh Posté le 18-05-2008 à 22:29:10
1. n'est pas une erreur, mais un warning qui indique que la fonction fopen ne doit plus être utilisée avec l'environnement visual studio (2005 ou 2008).
Si tu ne souhaites plus l'utiliser, il te suffit d'utiliser fopen_s à la place de fopen, mais cela aura pour conséquence de rendre ton code non portable.
Si tu souhaites l'utiliser quand même et ne pas avoir le warning, il te suffit de définir _CRT_SECURE_NO_WARNINGS dans les propriétés de ton projet (bouton droit sur le projet, propriétés, tu vas dans l'onglet C/C++ , section préprocesseur, et dans les définitions du préprocesseur, tu rajoutes _CRT_SECURE_NO_WARNINGS
2. va avec 1.
3. Bizarre, normalement, pas besoin de cast mais je ne vois pas la déclaration de "data". L'aurais tu oublié ?
- Je remarque un truc supplémentaire, tu as déclaré des variables avec des caractères interdits : "données" ne devrait pas fonctionner. Les seuls caractères autorisés pour un nom de variables sont les caractères alphanumériques et le caractère "_" , et de plus, on ne peut pas commencer un nom de variable par un chiffre ( a2 est autorisé, mais pas 2a).
- Ta fonction main doit retourner une valeur.
Marsh Posté le 18-05-2008 à 22:52:41
Merci beaucoup xilebo, j'ai vraiment besoin d'aide.
pour la fonction fopen j'ai réglé le warning comme yu m'a dis.
la 3 eme erreur reste toujour, je pense que se trouve au niveau d'utilisation de ( malloc)
Code :
|
Code :
|
Merci une autre fois
Marsh Posté le 19-05-2008 à 00:54:36
Heu, .cpp est l'extension pour compiler en C++, pas étonnant qu'il te râle pour des conversions void * => char *. C++ != C.
Marsh Posté le 19-05-2008 à 13:01:21
tpierron a écrit : Heu, .cpp est l'extension pour compiler en C++, pas étonnant qu'il te râle pour des conversions void * => char *. C++ != C. |
O non
je suis sous visual C++ 2008 et comment je compile en C?
Marsh Posté le 19-05-2008 à 13:10:55
Tu sauvegardes des fichiers avec l'extension .c et tu les ajoutes à la main au programme (fichiers sources / ajout d'un élément existant) . enfin, c'est ce que je fais avec Visual 2005.
Marsh Posté le 16-05-2008 à 14:00:44
Bonjour à tous;
Je suis débutante en C et je voudrais lire un fichier wav qui je connais pas sa taille des données( sans entete).
mon brobleme est de savoir comment je peux copier ces données, à partir de fichier wav, dans un tableau ( applé sorite)
1/ comment je peux tirer la taille de mon fichier? (Taille)
2/ qulle sont les erreurs de mon programme situ ci-dessous?
j'ai besoin de votre aide svp
merci d'avance.
Message édité par silia le 16-05-2008 à 14:03:57