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
- Le format de fichier audio de forme d'onde (WAV) est une norme utilisée par Microsoft pour stocker les données audio numériques et se compose de blocs représentant différentes parties d'un fichier audio. "Riff", "FMT" et "Data" sont les blocs les plus importants.
- Extracteur WAV AudeRo est une bibliothèque PHP qui permet d'extraire des fragments à partir de fichiers WAV. Il nécessite PHP 5.3 ou version ultérieure et peut enregistrer le fragment sur le 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
- La bibliothèque d'extracteur AUDERO WAV contient des méthodes telles que
downloadChunk()
,saveChunk()
etgetChunk()
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. - La durée du fichier WAV peut être calculée à l'aide de la formule suivante: <code>time = dataChunkSize / (sampleRate * channelsNumber * bitsPerSample / 8)</code>. Ces informations, ainsi que d'autres données importantes, peuvent être récupérées à partir des blocs "Data" et "FMT" du fichier WAV.
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:
- http://ipnx.cn/link/21c1da87c1afdd4ed2836bdb521bea78
- http://ipnx.cn/link/3493d96f8fcb16313a77ecfd294734c9
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 tache 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 taches 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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Les problèmes et les solutions courants pour la portée de la variable PHP incluent: 1. La variable globale ne peut pas être accessible dans la fonction, et elle doit être transmise en utilisant le mot-clé ou le paramètre global; 2. La variable statique est déclarée avec statique, et elle n'est initialisée qu'une seule fois et la valeur est maintenue entre plusieurs appels; 3. Des variables hyperglobales telles que $ _get et $ _post peuvent être utilisées directement dans n'importe quelle portée, mais vous devez faire attention au filtrage s?r; 4. Les fonctions anonymes doivent introduire des variables de portée parents via le mot clé Utiliser, et lorsque vous modifiez les variables externes, vous devez passer une référence. La ma?trise de ces règles peut aider à éviter les erreurs et à améliorer la stabilité du code.

Pour gérer en toute sécurité les téléchargements de fichiers PHP, vous devez vérifier la source et taper, contr?ler le nom et le chemin du fichier, définir les restrictions du serveur et traiter les fichiers multimédias deux fois. 1. Vérifiez la source de téléchargement pour empêcher le CSRF via le jeton et détecter le type de mime réel via FINFO_FILE en utilisant le contr?le de liste blanche; 2. Renommez le fichier à une cha?ne aléatoire et déterminez l'extension pour la stocker dans un répertoire non Web en fonction du type de détection; 3. La configuration PHP limite la taille de téléchargement et le répertoire temporaire Nginx / Apache interdit l'accès au répertoire de téléchargement; 4. La bibliothèque GD résait les images pour effacer des données malveillantes potentielles.

Il existe trois méthodes courantes pour le code de commentaire PHP: 1. Utiliser // ou # pour bloquer une ligne de code, et il est recommandé d'utiliser //; 2. Utiliser /.../ pour envelopper des blocs de code avec plusieurs lignes, qui ne peuvent pas être imbriquées mais peuvent être croisées; 3. Compétences combinées Commentaires tels que l'utilisation / if () {} / pour contr?ler les blocs logiques, ou pour améliorer l'efficacité avec les touches de raccourci de l'éditeur, vous devez prêter attention aux symboles de fermeture et éviter les nidification lorsque vous les utilisez.

AgeneratorInphpisamemory-EfficientwaytoterateOrgedatasetsByyieldingValuesonEatatimeIntedofreturningThemallAtonce.1.GeneratorsUsEtheieldKeywordToproduceValuesondemand, ReducingMemoryUsage.2.TheyAreusefulForHandlingBigloops, ReadingLargeFiles, OR OR.

La clé pour rédiger des commentaires PHP est de clarifier l'objectif et les spécifications. Les commentaires devraient expliquer "pourquoi" plut?t que "ce qui a été fait", en évitant la redondance ou trop de simplicité. 1. Utilisez un format unifié, tel que DocBlock (/ * /) pour les descriptions de classe et de méthode afin d'améliorer la lisibilité et la compatibilité des outils; 2. Soulignez les raisons de la logique, telles que pourquoi les sauts JS doivent être sortis manuellement; 3. Ajoutez une description d'une vue d'ensemble avant le code complexe, décrivez le processus dans les étapes et aidez à comprendre l'idée globale; 4. Utilisez TODO et FIXME Rationalement pour marquer des éléments et des problèmes de taches pour faciliter le suivi et la collaboration ultérieurs. De bonnes annotations peuvent réduire les co?ts de communication et améliorer l'efficacité de la maintenance du code.

En PHP, vous pouvez utiliser des crochets ou des accolades bouclées pour obtenir des caractères d'index spécifiques à la cha?ne, mais les crochets sont recommandés; L'index commence à partir de 0 et l'accès à l'extérieur de la plage renvoie une valeur nulle et ne peut pas se voir attribuer une valeur; MB_substr est nécessaire pour gérer les caractères multi-octets. Par exemple: $ str = "Hello"; echo $ str [0]; sortie h; et les caractères chinois tels que MB_substr ($ str, 1,1) doivent obtenir le résultat correct; Dans les applications réelles, la longueur de la cha?ne doit être vérifiée avant le boucle, les cha?nes dynamiques doivent être vérifiées pour la validité et les projets multilingues recommandent d'utiliser des fonctions de sécurité multi-octets uniformément.

Toinstallphpquickly, usexAmpPonWindowsorHomebrewonMacos.1.onwindows, downloadAndInstallxAmppp, selectComponents, startapache et placefilesInhtdocs.2.

Toléarnphpeffective, startBySettingUpAlocalServerERironmentUsingToolsLILYXAMPPANDACODEDITERLIGHILLEVSCODE.1) INSTRUSITIONXAMPFORAPACHE, MYSQL, ANDPHP.2) USACODEDEDITORFORSYNTAXSUPPORT.3)
