Cette réponse a été élargie pour couvrir trois façons différentes d'y parvenir, de la plus simple (aucun code requis, il suffit d'écouter) à des exemples plus complexes qui pourraient être utilisés pour des tests en masse.
Méthode la plus simple
Inversez la phase d'un côté et additionnez les sorties en mono.
Si le résultat est un silence, alors il s'agissait d'un mono ; sinon, il s'agissait d'un stéréo.
Même en stéréo, certaines parties auront été placées au centre - les voix, la basse, une grande partie de la batterie, etc., mais vous entendrez une différence énorme entre "quelques morceaux manquent" et "un silence presque total".
Si vous n'entendez que des petits bouts de la piste, des crépitements, des grésillements et des bruits sourds périodiques, mettez cela sur le compte d'un mauvais encodage, il s'agit toujours de "mono" à toutes fins utiles.
Cela repose sur la physique du son ; dans sa forme la plus simple, si vous additionnez deux formes d'onde identiques, le résultat sera deux fois plus fort. Si vous en inversez une, elles s'annuleront mutuellement et s'additionneront toujours jusqu'à "zéro" le silence. Ce principe est utilisé pour les casques antibruit et la réduction du bruit de fond dans le microphone de votre téléphone.
Méthode
De la Manuel d'Audacity
Effet > Inverser
Il n'y a pas de boîte de dialogue d'effet contenant des paramètres pour cet effet ; Inverser opère directement sur l'audio sélectionné. Si l'inversion prend un temps appréciable, un dialogue de progression apparaîtra.
Exemples d'utilisation
Utilisez le menu déroulant de la piste audio et choisissez Split Stereo to Mono.
Sélectionnez un canal mais pas l'autre, appliquez Invert et ensuite Play. Les voix de chaque piste s'annuleront les unes les autres, ne laissant que les instruments.
Découvrez à quel point les canaux stéréo sont différents : Effectuez les mêmes étapes 1 et 2 ci-dessus sur n'importe quelle piste stéréo. Si le son est aussi fort après les étapes qu'avant, les canaux sont très différents. Si le résultat est un silence, la piste n'est pas vraiment stéréo mais double mono, où les canaux gauche et droit contiennent un son totalement identique.
Méthode simple
Chargez (importez) le fichier (prétendument stéréo) dans Audacity. Dans le menu de la barre supérieure, sélectionnez Effet , Nyquist Prompt . Collez ce qui suit :
(diff (aref *track* 0) (aref *track* 1))
et cliquez sur OK. Cela va calculer la différence entre les deux pistes.
- Un résultat totalement silencieux signifie que les pistes étaient identiques.
- Un résultat très silencieux ou très bruyant signifie que les pistes étaient presque identiques.
- Un résultat qui ressemble à l'audio original au moins pour certains fragments signifie que les pistes ont été probablement différent.
"Probablement", car il se peut que les pistes soient identiques mais en opposition de phase. Alors diff
va augmenter l'amplitude au lieu de la ramener à zéro. Le résultat sera nettement plus fort que l'original. Pour écarter cette possibilité, revenez aux pistes d'origine ( Modifier , Annuler l'invite de Nyquist ) et sum
au lieu de calculer le diff
:
(sum (aref *track* 0) (aref *track* 1))
Un résultat totalement silencieux signifie que les pistes étaient identiques mais en opposition de phase.
Ces tests simples échoueront si les deux pistes sont similaires mais déphasées, ou similaires mais avec des volumes différents. Une formule capable de repérer les similitudes également dans de tels cas peut exister mais je ne connais pas la Audacity Nyquist Prompt pour vous aider davantage.
Cette réponse s'inspire largement du fil de discussion suivant du forum Audacity : Opérations arithmétiques de mixage de pistes .
Une méthode pas si simple
Utilisez le code suivant pour créer un .png
les graphiques de votre .wav
. Il fonctionne ffmpeg
y convert
(de Imagemagick).
#!/bin/sh
for input do
ffmpeg -nostdin -i "$input" -lavfi \
'[0:a] channelsplit=channel_layout=stereo [left][right];
[left] loudnorm [L];
[right] loudnorm [R];
[L][R] join=inputs=2:channel_layout=stereo [a];
[a] showspectrumpic=s=800x600:mode=combined:color=channel:legend=no [out]' \
-f apng -map '[out]' - \
| convert - -colorspace RGB -color-matrix \
' 20 0 -20 0 0 0
0 0 0 0 0 0
0 20 -20 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
' "$input".png
done
Nommez-le spect
et rendre exécutable ( chmod +x spect
). Fournir une ou plusieurs stéréos présumées .wav
comme arguments de ligne de commande. Exemple :
./spect foo.wav /path/to/bar.wav
Cela générera foo.wav.png
y /path/to/bar.wav.png
. En examinant ces fichiers, vous serez en mesure de dire si les fichiers d'entrée étaient réellement en stéréo.
Ce que fait le script :
-
( ffmpeg
) Il normalise les canaux gauche et droit indépendamment. C'est au cas où un faux fichier stéréo a été créé en dupliquant des mono avec une amplification différente.
-
(encore ffmpeg
) Il visualise le spectre sous forme de graphiques, où les deux canaux sont représentés par des couleurs différentes. La méthode est ainsi immunisée contre les déphasages, car c'est l'amplitude qui compte lors de la création d'un tel spectre, et non la phase. Les composantes rouge et verte correspondent aux deux canaux ; la composante bleue encode ce qui est commun aux deux canaux (elle sera utile dans un moment).
-
( convert
) Il traite les graphiques :
- Les composantes de couleur "gauche" et "droite" sont réduites par la composante "commune". De cette façon, nous soulignons les fragments où les deux canaux diffèrent.
- Le résultat est renforcé par un facteur de 20 (vous pouvez modifier ce facteur).
- Les couleurs passent du rouge/vert au rouge/bleu. C'est uniquement parce que je voulais que la solution soit plus adaptée aux daltoniens.
Je vais analyser quelques exemples de résultats ci-dessous. Vous pourrez ainsi apprendre comment déterminer si une stéréo est authentique.
Notes :
- Le code suppose qu'il y a deux canaux. Il a été testé uniquement avec
.wav
les fichiers ayant deux canaux.
- Dans les images, le temps s'écoule de gauche à droite, la fréquence augmente de bas en haut.
- Vous pouvez vouloir ne pas normaliser. Dans ce cas
showspectrumpic
est le seul filtre dont vous avez besoin dans ffmpeg
.
- J'ai utilisé
800x600
dans cette réponse. Adaptez la résolution à vos besoins.
- La moitié supérieure de chaque image est noire, je suppose qu'elle s'étend à 48 kHz ( ?) alors que 22,1 kHz serait suffisant. Mon
ffmpeg
semble ne pas soutenir le stop
option pour showspectrumpic
Si vous avez besoin d'aide, cette option vous aidera probablement. Il existe d'autres méthodes pour traiter ce "problème", mais j'ai décidé de ne pas obscurcir le code. C'est un inconvénient, pas vraiment un problème.
-
spect
peut être utilisé avec find -exec
ou find | xargs
.
- Un traitement automatique supplémentaire est possible, jusqu'au point où le script vous indique
I'm X% certain it's genuine stereo, I'm Y% certain it's fake stereo
. Dans cette réponse, je n'irai pas aussi loin. Regardez des images et appliquez l'heuristique. Apprenez des exemples ci-dessous.
Exemples - chanson 1
C'est l'original .wav
de la chanson 1 traitée par spect
:
Vous pouvez voir qu'il y a des colonnes de rouge, des colonnes de bleu. C'est là que (quand) l'un des canaux domine. Cela indique que c'est une véritable stéréo.
Queen - Bohemian Rhapsody
Le même morceau 1 avec un canal en opposition de phase semble pratiquement identique (cliquez pour agrandir) :
La même chanson 1 mixée en mono et présentée comme stéréo (deux canaux identiques), fausse stéréo :
Le résultat est pratiquement tout noir. En théorie, il devrait être parfaitement noir. Je ne sais pas exactement d'où viennent les artefacts. L'important est qu'il n'y a pas de "structure" détaillée que la chanson originale avait. Le site diff
de la méthode ci-dessus générerait le silence pour celui-ci.
La même chanson 1 mixée en mono et présentée en stéréo (deux canaux identiques), fausse stéréo, mais avec un canal en opposition de phase :
Celui-ci "tromperait" le diff
vous aurez besoin de la méthode sum
méthode. spect
fonctionne bien malgré tout.
La même chanson 1 mixée en mono et présentée en stéréo, en fausse stéréo, mais avec un canal réduit en volume de 10 dB :
Vous pouvez voir des artefacts mais, une fois encore, l'image est très différente de celle de la chanson originale. Ni l'un ni l'autre diff
ni sum
générerait le silence.
La même chanson 1 mixée en mono et présentée en stéréo, en fausse stéréo, mais avec un canal réduit en volume de 10 dB et opposé en phase :
Il devrait maintenant être clair que la phase opposée ne compte pas pour spect
. Le reste de cette réponse considère ce problème comme résolu.
Pour comparaison : chanson originale 1 avec un canal réduit en volume de 10 dB :
Grâce à la normalisation des canaux séparément, la "structure" détaillée que possédait la chanson originale est toujours visible.
La même chanson 1 avec un canal complètement silencieux :
Les résultats ci-dessus l'un à côté de l'autre. De gauche à droite :
- véritable stéréo
-
véritable stéréo déséquilibré
- un canal silencieux
- fausse stéréo
- fausse stéréo, asymétrique
<a href="https://i.stack.imgur.com/sPQEi.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/sPQEis.png" alt="song 1, genuine stereo"></a> <a href="https://i.stack.imgur.com/yGrMl.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/yGrMls.png" alt="song 1, genuine stereo, one channel unbalanced"></a>
Notes :
- Si je manipule l'autre canal, les artefacts bleus ou rouges pourraient être de l'autre couleur. Ce sont les détails qui comptent, pas la couleur.
- "Véritable stéréo, non équilibrée" reste une véritable stéréo. "Déséquilibré" signifie qu'un canal n'est pas aussi fort que l'autre. Ici, j'ai manipulé le fichier original pour obtenir ce résultat. En général, il se peut que l'enregistrement original soit comme ça. Cela ne signifie pas que quelqu'un a trafiqué le fichier.
Exemples - chanson 2
C'est l'original .wav
de la chanson 1 traitée par spect
:
Cette chanson ne sépare pas les canaux aussi clairement que la première, il n'y a pas de colonnes de rouge ou de bleu. Pourtant, certaines fréquences sont plus rouges que bleues. Les caractéristiques changent plusieurs fois au fil de la chanson. Cela indique qu'il s'agit d'une véritable stéréo.
Counting Crows - M. Jones
Des résultats différents l'un après l'autre. De gauche à droite :
- véritable stéréo
-
véritable stéréo déséquilibré
- un canal silencieux
- fausse stéréo
- fausse stéréo, asymétrique
<a href="https://i.stack.imgur.com/Z9OLy.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Z9OLys.png" alt="song 2, genuine stereo"></a> <a href="https://i.stack.imgur.com/ff6av.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ff6avs.png" alt="song 2, genuine stereo, unbalanced"></a>
Comme pour la chanson 1, vous pouvez reconnaître une véritable stéréo en repérant la "structure" détaillée.
Exemples - chanson 3
Cette chanson est en fait monophonique. Le signal mono avait été enregistré sur (je suppose) une bande stéréo. Il a été extrait de la bande en stéréo avec un bruit de bande différent pour chaque canal.
Il n'y a pas de "structure" détaillée, juste du bruit. Cela indique que la différence entre les canaux n'est en fait que du bruit. Le résultat de l'analyse diff
méthode ne serait pas silencieuse, bien que pour cet exact .wav
fichier la méthode fonctionnerait car je pourrais jouer le résultat et entendre son bruit.
Avec une entrée asymétrique, le diff
/ sum
La méthode peut fonctionner si vous normalisez d'abord. Notre site spect
le fait automatiquement. Pour mémoire, c'est ainsi que le morceau 3 déséquilibré est traité par spect
ressemble :
Notes finales
- Long
.wav
"compressé" à .png
où 800 pixels couvrent toute la durée peut ressembler à du bruit. Une approche raisonnable consiste à améliorer spect
il récupère donc la durée au préalable et ajuste la résolution horizontale en conséquence.
- Si votre contribution est alors la sortie de
spect
sera du bruit. Il est possible d'en déduire quelque chose à partir de son intensité, mais comme la méthode repose sur le repérage d'une "structure" détaillée, elle ne donnera pas des résultats aussi évidents que dans le cas d'une véritable stéréo, par exemple pour les chansons 1 et 2.
- Expérimentation. :)