Comment puis-je déterminer la longueur (durée) d'une .fichier wav en C#?
Dans le non compressé situation, je sais que j'ai besoin de lire les fichiers wav en-tête, tirez-le nombre de canaux, le nombre de bits et la fréquence d'échantillonnage et à travailler à partir de là:
(canaux) * (bits) * (échantillons/s) * (secondes) = (taille du fichier)
Est-il un moyen plus simple - un accès gratuit à la bibliothèque, ou quelque chose dans le .net framework peut-être?
Comment faire si l' .wav fichier est compressé (avec le codec mpeg par exemple)?
- Par la longueur, entendez-vous le temps de l'audio ou la taille du fichier?
- cette longue: |-----------------|
- Tu veux dire la longueur dans le temps? Dans ce cas, il est appelé durée, et vous devriez changer le titre de votre post.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez envisager d'utiliser le mciSendString(...) fonction (vérification des erreurs est omis pour plus de clarté):
D:\Long\Path\To\WavFileWithLongName.wav
j'obtiens l'erreur 304 demciSendString
:The filename is invalid. Make sure the filename is not longer than 8 characters, followed by a period and an extension.
Télécharger NAudio.dll
à partir du lien
http://naudio.codeplex.com/
et ensuite utiliser cette fonction
vous obtiendrez la Durée
NAudio
package nuget au lieu de télécharger DLL.De ne pas prendre quoi que ce soit loin de la réponse déjà accepté, mais j'ai été en mesure d'obtenir la durée d'un fichier audio (plusieurs formats différents, y compris AC3, qui est ce dont j'avais besoin à l'époque) à l'aide de la
Microsoft.DirectX.AudioVideoPlayBack
espace de noms. Cela fait partie de DirectX 9.0 pour le Code Managé. Ajout d'une référence à que fait mon code aussi simple que cela...Et il est assez rapide, trop! Voici une référence pour la Audio classe.
Dans le .net framework il y a une classe de mediaplayer:
http://msdn.microsoft.com/en-us/library/system.windows.media.mediaplayer_members.aspx
Voici un exemple:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2667714&SiteID=1&pageid=0#2685871
J'ai eu des difficultés avec l'exemple de la MediaPlayer-classe au-dessus. Il pourrait prendre un certain temps, avant que le joueur a ouvert le fichier. Dans le "monde réel", vous devez vous inscrire pour le MediaOpened-événement, après qui a déclenché, le NaturalDuration est valide.
Dans une console application, vous avez juste à attendre quelques secondes après l'ouverture.
Essayer de code ci-dessous à partir de Comment déterminer la longueur d'un .fichier wav en C#
Oui, Il y a une bibliothèque qui peut être utilisée pour obtenir la durée du fichier Audio. Cette bibliothèque fournit également de nombreuses autres fonctionnalités.
TagLib
TagLib est distribué sous la GNU Lesser General Public License (LGPL) et de la Mozilla Public License (MPL).
J'ai mis en place ci-dessous le code qui retourne le temps en secondes.
Vous trouverez peut-être que le XNA bibliothèque a quelque support pour le travail avec WAV etc. si vous êtes prêt à aller dans cette voie. Il est conçu pour fonctionner avec C# pour la programmation de jeu, alors peut-être juste prendre soin de ce que vous avez besoin.
Il y a un peu d'un tutoriel (avec - sans doute - code de travail, vous pouvez l'effet de levier) sur au CodeProject.
La seule chose que vous devez être un peu prudent, c'est que c'est tout à fait "normal" pour un fichier WAV à être composés de plusieurs morceaux - de sorte que vous avez scoot sur l'ensemble du dossier pour s'assurer que tous les morceaux sont pris en compte.
Quel est exactement votre application avec compressé Wav? Compressé les fichiers WAV sont toujours un sujet délicat, j'essaie toujours d'utiliser un autre format de conteneur dans ce cas, tels que OGG ou WMA. Le XNA bibliothèques ont tendance à être conçu pour travailler avec des formats précis - même si il est possible que, dans XACT vous trouverez plus génériques, wav méthode de lecture. Une alternative possible est de se pencher sur la SDL en C# port, bien que je n'ai jamais utilisé de jouer non compressé Wav - une fois ouvert, vous pouvez interroger le nombre d'échantillons afin de déterminer la longueur.
Je vais avoir à dire MediaInfo, je l'ai utilisé pendant plus d'un an avec un audio/vidéo de l'application d'encodage, je travaille sur. Il vous donne toutes les informations pour les fichiers wav avec presque chaque autre format.
MediaInfoDll Est livré avec un exemple de code C# sur la façon d'obtenir ce travail.
Je vais supposer que vous êtes un peu familier avec la structure d'un .Fichier WAV : il contient un WAVEFORMATEX-tête de la structure, suivi par un certain nombre d'autres structures (ou "morceaux") contenant différents types d'informations. Voir Wikipédia pour plus d'informations sur le format de fichier.
D'abord, itérer sur les .wav fichier et ajouter le unpadded longueur des "données" des morceaux (les "données" bloc contient les données audio pour le fichier; il existe généralement une seule de ces, mais il est possible qu'il pourrait y avoir plus d'un). Vous avez maintenant la taille totale, en octets, des données audio.
Autre, à la "moyenne octets par seconde" membre de la WAVEFORMATEX-tête de la structure du fichier.
Enfin, divisez la taille totale des données audio par la moyenne octets par seconde, ce qui vous donnera toute la durée du fichier, en quelques secondes.
Cela fonctionne raisonnablement bien non compressés et les fichiers compressés.
temps = FileLength /(Taux d'Échantillonnage * Chaînes * Bits par échantillon /8)
j'ai testé a soufflé code échouerait,les formats de fichier comme "\\ip\dir\*.wav"
tout naudio œuvres
Télécharger "PresentationCore.dll" et "WindowsBase.dll" à partir de:
http://www.search-dll.com/dll-files/download/windowsbase.dll.html
Coller les fichiers dans vous demande de dossier bin de référence. Il devrait maintenant fonctionner.