Maison >développement back-end >tutoriel php >PHP Master | Extraire un extrait d'un fichier WAV
Bien que PHP soit connu pour créer des pages et des applications Web, elle a bien plus que cela. J'ai récemment besoin d'extraire dynamiquement un audio à partir d'un fichier WAV et de permettre à l'utilisateur de le télécharger via le navigateur. J'ai essayé de trouver une bibliothèque qui convenait à mes besoins, mais je n'ai pas réussi et j'ai dû écrire mon propre code. C'est une excellente occasion de creuser dans la structure des fichiers WAV. Dans cet article, je décrirai brièvement le format de fichier WAV et expliquerai la bibliothèque que j'ai développée: Extracteur WAV aude.
Points clés
downloadChunk()
, saveChunk()
et getChunk()
pour gérer le processus d'extraction. Chaque méthode nécessite d'extraire les paramètres de début et de fin du fragment. Présentation du format WAV
Le format de fichier audio WAVE, également connu sous le nom de WAVE ou WAV, est la norme de format de fichier utilisé par Microsoft pour stocker les données audio numériques. Un fichier WAV se compose d'un ensemble de différents types de blocs qui représentent différentes parties du fichier audio. Vous pouvez considérer ce format comme une page HTML: le premier bloc est comme la partie <section></section>
de la page Web, donc vous pouvez trouver plusieurs informations sur le fichier lui-même, tandis que le bloc contenant les données audio elle-même est Situé à la partie . Dans ce cas, "Block" fait référence à la partie des données contenues dans le fichier. Le bloc de format le plus important est "Riff", qui contient le nombre d'octets du fichier; "FMT", qui contient des informations importantes telles que le taux d'échantillonnage et le numéro de canal; Chaque bloc doit avoir au moins deux champs: ID et taille. De plus, chaque WAV valide doit avoir au moins deux blocs: FMT et données. Le premier est généralement au début du fichier, mais après Riff. Chaque bloc a son propre format et champ, et un champ forme une sous-partie du bloc. Le format WAV n'a pas été entièrement spécifié dans le passé, ce qui fait que le fichier a des en-têtes qui ne suivent pas strictement les règles. Ainsi, lorsque vous travaillez sur l'audio, vous pouvez constater qu'un fichier a un ou plusieurs champs, et même les champs les plus importants sont définis sur zéro ou de mauvaises valeurs. Pour vous donner une idée de ce qui se trouve à l'intérieur d'un bloc, le premier bloc de chaque fichier WAV est Riff. Les 4 premiers octets contiennent la chaîne "Riff", et les 4 octets suivants contiennent la taille du fichier moins les 8 octets utilisés par ces deux parties de données. Les 4 derniers octets du bloc Riff contiennent la chaîne "Wave". Vous pouvez deviner quel est le but de ces données. Dans ce cas, vous pouvez les utiliser pour identifier si le fichier que vous analysez est en fait un fichier WAV, comme je l'ai fait dans la méthode <section></section>
de la classe WAV de la bibliothèque. Une autre chose intéressante à expliquer est de calculer la durée d'un fichier WAV. Toutes les informations dont vous avez besoin peuvent être récupérées à partir des deux blocs nécessaires mentionnés précédemment, à savoir: la taille du bloc de données, le taux d'échantillonnage, le nombre de canaux et le nombre de bits par échantillon. La formule pour calculer le temps du fichier (en secondes) est la suivante: setFilePath()
<code>time = dataChunkSize / (sampleRate * channelsNumber * bitsPerSample / 8)</code>Supposons que nous ayons:
<code>dataChunkSize = 4498170 sampleRate = 22050 channelsNumber = 16 bitsPerSample = 1</code>Appliquez ces valeurs à la formule et nous obtenons:
<code>time = 4498170 / (22050 * 1 * 16 / 8)</code>Le résultat est de 102 secondes (arrondi). Une explication approfondie de la structure du fichier WAV dépasse le cadre de cet article. Si vous souhaitez l'étudier davantage, lisez ces pages que j'ai rencontrées tout en traitant ceci:
Qu'est-ce que l'extracteur AUDERO WAV
Extracteur WAV AudeRo est une bibliothèque PHP qui vous permet d'extraire des fragments à partir de fichiers WAV. Vous pouvez enregistrer le fragment extrait sur votre disque dur local, le télécharger via le navigateur de l'utilisateur ou le renvoyer en tant que chaîne pour un traitement ultérieur. La seule exigence spéciale pour cette bibliothèque est PHP 5.3 ou version ultérieure car elle utilise un espace de noms. Toutes les classes de la bibliothèque sont dans le répertoire Wavextractor, mais vous remarquerez qu'il y a un répertoire de chargeur supplémentaire où vous pouvez trouver l'autoloader de la bibliothèque. Le point d'entrée du développeur est la classe AuderowAVExtractor, qui a trois méthodes principales dans le projet:
downloadChunk()
: Téléchargez le clip saveChunk()
: Enregistrez-le sur le disque dur getChunk()
: Recherchez le fragment comme une chaîne Les deux premiers paramètres de toutes ces méthodes sont les mêmes: $start
et $end
, qui représentent les temps de début et de fin (en millisecondes) de la partie à extraire, respectivement. De plus, downloadChunk()
et saveChunk()
acceptent un troisième paramètre facultatif pour définir le nom du fragment extrait. Si aucun nom n'est fourni, la méthode génère un nom lui-même au format "InputFileName-Start-end.wav". Dans le répertoire Wavextractor, il existe deux sous-dossiers: l'utilitaire, qui contient la classe de convertisseur avec certaines méthodes d'utilité; Ce dernier contient les classes WAV, Chunk et Chunkfield. Le premier, comme vous pouvez vous y attendre, représente un fichier WAV, qui se compose d'un ou plusieurs blocs (type de morceau). Cette classe vous permet de récupérer des en-têtes WAV, des durées audio et d'autres informations utiles. Sa méthode la plus importante est getWavChunk()
, qui récupère la partie audio spécifiée en lisant les octets dans le fichier. La classe Chunk représente un bloc d'un fichier WAV étendu par une classe dédiée contenue dans le dossier Chunk. Ce dernier ne prend pas en charge tous les types de blocs existants, seulement les types de blocs les plus importants. La partie non identifiée est gérée par la classe générale et est simplement ignorée tout au long du processus. La dernière classe décrite est Chunkfield. Comme je l'ai souligné, chaque bloc a son propre type et champ, et chaque champ a une longueur (en octets) et un format différent. Il s'agit d'un message très important car vous devez passer les paramètres corrects pour analyser correctement les octets en utilisant les fonctions de PHP pack()
et unpack()
, sinon vous recevrez une erreur. Pour aider à gérer les données, j'ai décidé de les emballer dans une classe qui contient le format, la taille et les valeurs de chaque champ.
Comment utiliser l'extracteur WAV AudeRo
Vous pouvez obtenir le "Extracteur AUDERO WAV" via Composer, ajouter les lignes suivantes à votre fichier composer.json
et exécuter sa commande d'installation:
<code>time = dataChunkSize / (sampleRate * channelsNumber * bitsPerSample / 8)</code>
Composer téléchargera et placera la bibliothèque dans le répertoire vendor/audero
du projet. Alternativement, vous pouvez télécharger la bibliothèque directement à partir de son référentiel. Pour extraire le fragment et forcer le téléchargement du navigateur de l'utilisateur, vous écrirez un code similaire à ce qui suit:
<code>time = dataChunkSize / (sampleRate * channelsNumber * bitsPerSample / 8)</code>
Dans la première ligne, j'ai inclus le compositeur Autoloader, puis j'ai défini la valeur que je vais utiliser. Comme vous pouvez le voir, je fournis le fichier source, le chemin de sortie comprenant le nom du fichier et la plage de temps que je souhaite extraire. Ensuite, j'ai créé une instance d'AuderowAvExtractor, j'ai pris le fichier source en tant que paramètre et appelé la méthode downloadChunk()
. Notez que parce que le chemin de sortie est passé par référence, vous devez toujours le définir en tant que variable. Regardons un autre exemple. Je vais vous montrer comment sélectionner une plage de temps et enregistrer le fichier sur votre disque dur local. De plus, j'utiliserai l'autoloader inclus dans le projet.
<code>dataChunkSize = 4498170 sampleRate = 22050 channelsNumber = 16 bitsPerSample = 1</code>
En dehors de la configuration du chargeur, cet extrait de code est très similaire à l'extrait de code précédent. En fait, je n'ai apporté que deux modifications: la première est la méthode appelée, saveChunk()
au lieu de downloadChunk()
, et la seconde est que je n'ai pas définie le nom du fichier de sortie (il utilisera le format par défaut expliqué précédemment).
Conclusion
Dans cet article, je vous montre "Extracteur WAV auderon" et comment extraire facilement un ou plusieurs fragments d'un fichier WAV donné. J'ai écrit la bibliothèque pour un projet de travail qui nécessite un ensemble de tuiles très étroit, donc si l'onde ou son en-tête est gravement corrompu, la bibliothèque peut échouer, mais j'ai écrit le code pour essayer si possible de récupérer de l'erreur. N'hésitez pas à utiliser les démos et les fichiers contenus dans le référentiel, car je l'ai publié sous la licence CC BY-NC 3.0.
(Ce qui suit est une œuvre pseudo-originale dans la partie FAQ d'origine, qui maintient la signification d'origine et ajuste la langue)
FAQS (FAQ) sur l'extraction des fragments de fichiers wav
Comment extraire des parties spécifiques d'un fichier WAV?
Pour extraire des parties spécifiques d'un fichier WAV, vous devez utiliser un logiciel d'édition audio comme Audacity. Ouvrez le fichier WAV dans Audacity, utilisez l'outil de sélection pour sélectionner la section que vous souhaitez extraire, puis sélectionnez la sélection des exportations dans le menu Fichier. Vous pouvez ensuite enregistrer la partie sélectionnée en tant que nouveau fichier WAV.
Puis-je extraire des données des fichiers WAV dans un langage de programmation?
Oui, vous pouvez extraire des données à partir de fichiers WAV à l'aide d'un langage de programmation comme Python. Des bibliothèques telles que scipy.io.wavfile
et wave
peuvent être utilisées pour lire les fichiers WAV et extraire des données. Vous pouvez ensuite utiliser ces données en fonction de vos besoins.
Comment extraire des informations secrètes à partir de fichiers audio?
L'extraction des informations secrètes d'un fichier audio implique un processus appelé Steganography. Ce processus consiste à cacher des informations dans un texte ou des données non secret. Il existe différents logiciels et outils qui peuvent vous aider à extraire des messages cachés à partir de fichiers audio.
Puis-je extraire une voix ou une voix d'un fichier WAV?
Extraire un son d'un fichier WAV est une tâche complexe qui implique la séparation des sources audio ou la séparation de la parole. Cela peut être réalisé en utilisant des techniques de traitement des signaux avancées et des algorithmes d'apprentissage automatique. Des logiciels comme Audacity peuvent aider dans une certaine mesure, mais pour des tâches plus complexes, vous devrez peut-être utiliser des outils ou des services plus avancés.
Quelle fonction dans R extrait les valeurs DB d'un fichier wav?
Dans R, vous pouvez utiliser le package tuner pour lire les fichiers WAV et extraire les données. La fonction readWave()
peut être utilisée pour lire un fichier WAV, et l'objet généré peut être utilisé pour accéder aux valeurs DB. Cependant, vous devrez peut-être convertir la valeur d'amplitude en DB en utilisant la formule mathématique appropriée.
Comment extraire les informations de fréquence des fichiers WAV?
L'extraction des informations de fréquence d'un fichier WAV consiste à effectuer une transformée de Fourier sur les données. Cela peut être fait en utilisant la bibliothèque Numpy dans Python ou la bibliothèque FFT dans R. Les résultats de la transformée de Fourier vous donneront les composants de fréquence du signal audio.
Puis-je extraire des métadonnées à partir de fichiers WAV?
Oui, vous pouvez extraire des métadonnées à partir de fichiers WAV. Cela peut inclure des informations telles que le taux d'échantillonnage, la profondeur du bit, le nombre de canaux et la durée. Cela peut être fait à l'aide de bibliothèques de traitement audio dans divers langages de programmation.
Comment extraire plusieurs pièces à partir d'un fichier WAV?
Pour extraire plusieurs pièces à partir d'un fichier WAV, vous pouvez utiliser un logiciel d'édition audio comme Audacity. Vous pouvez sélectionner chaque pièce que vous souhaitez extraire et l'exporter en tant que nouveau fichier. Ce processus peut être répété pour que chaque partie soit extraite.
Puis-je extraire l'audio à partir d'un fichier vidéo et l'enregistrer en tant que fichier WAV?
Oui, vous pouvez extraire l'audio à partir d'un fichier vidéo et l'enregistrer en tant que fichier WAV. Cela peut être fait à l'aide d'un logiciel d'édition vidéo ou d'outils de conversion. Ce processus consiste à ouvrir un fichier vidéo, à extraire une piste audio et à l'enregistrer en tant que fichier WAV.
Comment convertir un fichier WAV en un autre format audio?
Pour convertir un fichier WAV en un autre format audio, vous pouvez utiliser des logiciels ou des outils de conversion audio. Ces outils vous permettent d'ouvrir un fichier WAV et de l'enregistrer dans un autre format, tel que MP3, FLAC ou AAC. Le processus de conversion consiste généralement à sélectionner le format de sortie et à définir la fréquence de masse ou binaire requise.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!