Journal Digital-Scratch : un lecteur audio pour DJ piloté par platine vinyle

Posté par  (site web personnel) . Licence CC By‑SA.
36
18
sept.
2013

Salut journal,

Cela fait quelques années que je passe une petite partie de mon temps libre sur une application pour les DJs qui aiment tourner au GPL. Je n'ai jamais trop pris le temps d'en faire une présentation pensant toujours que ça n'était pas assez mûr, "qu'importe !" m'ont dit les libristes, "un logiciel que personne ne connaît ne sert à rien", pas faux. Alors même s'il me reste un tas de choses à implémenter, c'est parti pour un petit tour d'horizon.

Qu'est ce que c'est ? A quoi ça sert ?

L'idée derrière Digital-Scratch vient du fait que de plus en plus de titres musicaux ne sortent plus (ou pas aussi rapidement) sur disque vinyle. Et pourtant tout DJ à l'ancienne sait comme le mix sur platine vinyle est incomparable (pas mieux, juste incomparable) à ce qui se fait sur platine CD ou sur PC. En dehors du son chaud, ce qui est fondamental c'est le pilotage de la lecture de la musique en jouant sur le sens et la vitesse de rotation de la platine, soit via quelques boutons/sliders, soit avec ses petits doigts.
Pourquoi alors ne pas essayer de détecter les mouvements appliqués à un disque vinyle et en profiter pour appliquer la vitesse et le sens de rotation à un lecteur audio sur PC ? Voila ce que fait Digital-Scratch : piloter un lecteur audio avec une platine vinyle.

la boucle est bouclée : on peut mixer sa collection de mp3, flac, etc… en ne touchant pratiquement qu'aux platines. On garde le touché magique et on ne se trimballe pas 4 valises de vinyles, top moumoute.

Oui mais ça existe déjà, non ?

C'est vrai, il y a une poignée de logiciels propriétaires (Serato, Traktor,…) qui font la même chose (et bien plus). Mais avec un ancien camarade d'école, on avait eu l'idée avant tout ce beau monde, et donc depuis, je poursuis tranquillement le truc.
L'autre argument c'est que c'est libre. Pourtant il y a Xwax qui est libre et le fait aussi : tant mieux, ça en fait un de plus.
Le dernier argument c'est que c'est multiplateforme (tout en Qt) : ça tourne sous Linux et Windows (jamais testé sous Mac), et là je crois que c'est le seul.

Comment ça marche ?

Rien de bien sorcier : il faut lire un disque sur lequel est enregistré un signal facilement analysable par un PC, en passant par l'entrée ligne d'une carte son. Ensuite il s'agit de lire un fichier audio à la bonne vitesse (on appelle cela du time-stretching) et dans le bon sens, et tout cela avec la latence la plus faible possible.

C'est donc le signal sur le disque qui est intéressant (on trouve souvent le terme vinyle timecodé) : c'est une sinusoïde de fréquence constante. En analysant la fréquence au cours de la rotation on trouve la vitesse de lecture. Pour le sens de rotation, l'astuce vient du fait qu'un disque vinyle moderne est stéréo : il y a donc une autre sinusoïde sur l'autre voie qui est déphasée d'un quart de période. Comme on sait quelle sinusoïde à son front montant avant l'autre, il est aisé de déterminer si le disque tourne à l'endroit ou à l'envers. Il y a évidemment tout un tas de problématiques de détection lorsque l'on scratche violemment le disque ou que le disque est à l'arrêt.

Voici comment on branche tout cela : les platines sont connectées à un PC via une carte son (multi-entrées), puis les sorties de la carte son passent dans la table de mixage.
setup

Ou se procurer le fameux disque ?

Au début du projet, comme rien d'autre n'existait nous avons tenté de presser notre signal : ce n'est pas aussi simple qu'un pressage de CD car certaines parties de signal ne sont pas pressable en tant que signal analogique. Après plusieurs essais qui devenait plus convaincant, on a quand même abandonné l'idée, faute de moyens.
Au même moment sont apparues les solutions propriétaires avec leur propres disques (qui fonctionnent tous sur le même principe) : Digital-Scratch fonctionne avec 3 d'entre eux. Tout les vendeurs de vinyles en vendent.

Quelles sont les fonctionnalités ?

En dehors de la détection de mouvement, il y a quelques fonctionnalités que l'on retrouve dans tout les players pour DJs :
* cue points (c'est un moment dans le titre où l'on peut facilement sauter)
* gestion d'une collection de fichier audio
* petit lecteur d'échantillons (samples)
* aide au choix des titres grâce à la clé/tonalité musicale
* gestion des connections via JACK

Voici à quoi cela ressemble :
screenshot

Liens et démo

Pour ceux que ça intéresse voici les ressources qui vont bien :
* le site web
* le code source
* le wiki
* les screenshots
* les paquets pour Ubuntu et le binaire pour Windows

J'ai également fait 2 vidéos-mix permettant de voir le logiciel en action tout en écoutant/découvrant un peu de musique :
* Digital-Scratch 1.3.0 - A summer D&B selection
* Digital-Scratch 1.0.0 - Demo mix

  • # Genial, et quelques questions :p

    Posté par  . Évalué à 6.

    Salut l'ami :)

    Je mix depuis quelques annees, et apres avoir teste vinyles, puis CD, puis midi, je suis revenu aux vinyles.
    J'ai pas pu me repayer des SL comme toi… mais j'ai toujours mon ecler NUO 3.0 :D

    J'avoue que je ne savais pas que des projets libres existaient tels que xwax, et maintenant le tiens.
    Voyant seulement Serato/Traktor partout…

    Je voudrais en savoir un peu plus sur le projets :

    • Quels sont les interfaces audio permettant de connecter les platines vinyles ? (Cout, et qualite)
    • Possible facilement de repasser un bon gros skeud au lieu du vinyl timecode ?

    Je vais regarder le code source un peu pour voir ce que ca donne de l'interieur !

    • [^] # Re: Genial, et quelques questions :p

      Posté par  . Évalué à 2.

      Quels sont les interfaces audio permettant de connecter les platines vinyles ? (Cout, et qualite)

      Je me pose la même question… J'avais une carte MAudio qui n'était pas supportée par Linux.

      Possible facilement de repasser un bon gros skeud au lieu du vinyl timecode ?

      Sur la carte MAudio on pouvait…

    • [^] # Re: Genial, et quelques questions :p

      Posté par  (site web personnel) . Évalué à 4.

      Quels sont les interfaces audio permettant de connecter les platines vinyles ? (Cout, et qualite)

      Je n'ai qu'une seule bonne expérience la dedans, c'est la mienne, j'attends justement des retours d'utilisateurs la dessus.

      En ce qui me concerne, j'utilise une carte USB ESI-U46DJ qui a une latence assez faible. Elle possède 2 entrées stéréo (nécessaire pour 2 platines) qui sont commutables en phono ou line. Pour rappel, la majorité des platines sortent un signal "phono" qu'il faut faire passer dans un filtre "RIAA" pour obtenir le son original. C'est pareil si on récupère le son du disque timecodé, il faut idéalement le passer dans une carte son qui possède une entrée phono avec ce filtre. Ceci dit, il faudrait que je refasse des essais en branchant sur une entrée ligne classique, ça marche peut être. Sinon, il faudrait que je code un filtre RIAA logiciel (xwax le fait je crois).

      Bref cette carte est vraiment bien pour être utilisé avec Digital-Scratch d'autant qu'elle marche sur ma Ubuntu avec Jack sans rien faire de particulier. Son seul défaut est de ne plus être fabriquée (on en trouve d'occasion). Mais visiblement Mixvibes l'a rebadgé en "U46 MK2", ça semble être la même.

      Sinon, il y a de bonnes ressources sur le net :
      - chez xwax
      - chez LinuxMAO

      Possible facilement de repasser un bon gros skeud au lieu du vinyl timecode ?

      Tout à fait, c'est le setup que j'ai chez moi. Il faut mettre des cable RCA en "Y" derrière chaque sorties de platines et posséder une table de mixage dont chaque voies possède 2 entrées commutable : line et phono. On peut alors brancher la platine en direct sur l'entrée phono de la table de mixage (à l'ancienne) et en même temps la brancher à la carte son pour passer par Digital-Scratch. Quand on veut passer un disque normal, il suffit d'utiliser le bouton de la table de mixage pour switcher sur l'entrée phono, et rebelotte sur l'entrée line pour revenir à Digital-Scratch.

      setup

      • [^] # Re: Genial, et quelques questions :p

        Posté par  (site web personnel) . Évalué à 3.

        Les ESI sont de très bonnes cartes ! pour un tout autre usage (radio) j'ai une Juli@ Xte dont je suis très content, elle marche très très bien sous Linux et pour un usage pro c'est top !

        Par contre question Phono, ESI fait la Phonorama, mais je suis inquiet parce que d'habitude ils écrivent à propos de Mac OS X "no special driver installation required" ce qui signifie que sous Linux ça marche aussi avec le module universel snd-usb-audio, et là comme ils n'ont pas précisé, cela sème un doute… Quelqu'un sait si elle fonctionne sous Linux ?

        ce commentaire est sous licence cc by 4 et précédentes

  • # mixxx

    Posté par  (site web personnel) . Évalué à 4.

    Très intéressant !
    Je connaissais mixxx, mais tout mes voeux à "Digital Scratch".

    • [^] # Re: mixxx

      Posté par  . Évalué à 4.

      Mon problème avec Mixxx, c'est qu'il bloque parfois en pleine chanson. C'est de plus en plus rare, mais c'est inacceptable en soirée! Du coup je Clementine avec un crossfade au max (10 secondes) et tant pis pour le reste!

      Et aussi, il est très lent avec 20k titres…

      ⚓ À g'Auch TOUTE! http://afdgauch.online.fr

      • [^] # Re: mixxx

        Posté par  . Évalué à 1.

        J'ai utilisé la dernière version de Mixxx pendant mon mariage il y a quelques semaines. 30k titres, soirée moitié contrôleur midi USB, moitié platines vinyles. Aucun problème sur 8 heures de mix, pour moi c'est fiable, flexible et ça fait ce qu'on lui demande.

        • [^] # Re: mixxx

          Posté par  . Évalué à 2.

          C'est peut-être ma distrib alors? Mageia… ou tu utilises la version Windows?

          ⚓ À g'Auch TOUTE! http://afdgauch.online.fr

    • [^] # Re: mixxx

      Posté par  (site web personnel) . Évalué à 4.

      oui, mixxx sait gérer les platines et les vinyles timecodés, enfin, c'est ce qu'il revendique et il propose des options pour cela, mais je n'ai pas le matos pour essayer. :)

      Je serais intéressé par un comparatif entre Mixxx et Digital-Scratch selon cet angle-là !

      ce commentaire est sous licence cc by 4 et précédentes

      • [^] # Re: mixxx

        Posté par  (site web personnel) . Évalué à 3.

        oui, mixxx sait gérer les platines et les vinyles timecodés, enfin, c'est ce qu'il revendique et il propose des options pour cela, mais je n'ai pas le matos pour essayer. :)

        Mixxx utilise la lib de détection de Xwax pour cela. J'avais également fait il y a quelques années une intégration de la lib de détection de Digital-Scratch dans Mixxx : ça marchait plutôt bien. Mais je cherchais à beaucoup modifier/enlever les fonctionnalités de Mixxx qui intègre une table de mixage virtuelle, ce qui n'a pas grand intérêt quand on utilise une table externe. A force d'y perdre pas mal de temps, j'ai décidé de faire mon propre player uniquement piloté par platine vinyle.
        J'ai cherché à faire quelque chose de plus intégré (centré autour du pilotage par platine vinyle) alors que Mixxx propose beaucoup plus d'options en tout genre.

        Je serais intéressé par un comparatif entre Mixxx et Digital-Scratch selon cet angle-là !

        Je ferais donc plutôt la comparaison Xwax vs Digital-Scratch :
        - Xwax détecte la position de la cellule sur le disque, ce que j'ai retiré de mon implémentation, je ne m'en sert absolument jamais (pour la préécoute rapide je clique dans une "waveform" qui symbolise la musique, c'est bien plus rapide). Si un utilisateur est intéressé, j'y retravaillerais.
        - Xwax semble détecter un peu mieux les basses vitesses (nécessaire pour le scratch), mais j'y travaille. Par contre pour un mix classique je préfère la stabilité de Digital-Scratch.
        - Les différences principales se font surtout sur l'interface, et la chacun jugera par lui même. Il y a des choses dans Digital-Scratch comme l'utilisation de la "tonalité musicale" (harmonic mixing) qui ne sont pas dispo dans xwax. Par contre Xwax propose une détection de BPM pour chaque titre.
        - La compatibilité avec les disque timecodé est la même (Serato, Traktor première version et MixVibes).

        • [^] # Re: mixxx

          Posté par  (site web personnel) . Évalué à 3. Dernière modification le 19 septembre 2013 à 15:26.

          Ah merci pour les infos ! Effectivement, mixxx fait beaucoup de chose et c'est bien pour celui qui bricole avec pas beaucoup de matériel (ou qui fait tout en logiciel avec Jack et une surface de mixage midi par exemple). Dès qu'on investi dans du matériel certains logiciels deviennent tout de suite compliqués ou trop fournis. ^^

          Merci pour la comparaison. :)

          ce commentaire est sous licence cc by 4 et précédentes

        • [^] # Re: mixxx

          Posté par  . Évalué à 2.

          J'ajouterai qu'xwax tourne comme un chef sur ma toute petite config, en l'occurence un eeepc, et s'interface bien avec JACK.

          Ce qu'il lui manque, c'est surtout de fonctionner out-of-the-box, y'a encore trop à mettre les mains dedans pour que ca fasse pro.

          Je teste ton projet dès que j'ai un peu de temps

          • [^] # Re: mixxx

            Posté par  (site web personnel) . Évalué à 1.

            J'ajouterai qu'xwax tourne comme un chef sur ma toute petite config, en l'occurence un eeepc, et s'interface bien avec JACK.

            Ca peut aussi être une différence entre Xwax et Digital-Scratch : pour ne pas risquer un crash lié à une allocation mémoire lors de la décompression par buffer des mp3 ou tout bêtement à un memory leak, j'ai décidé d'allouer statiquement la mémoire pour les 2 lecteurs qui ont une représentation non compressé du titre audio. En clair, quand on démarre, le logiciel utilise directement plusieurs centaines de mega de ram (350 environ), mais cela n'évolue plus par la suite. Ca peut être un chiffre trop élevé pour les petites configs, mais sur une machine avec 2go de ram ça tourne bien.

            Comme la récurrence d'analyse du timecode est dépendante du buffer que l'on configure dans JACK, c'est ce paramètre qui influe le plus sur la lourdeur du logiciel. Mais c'est important d'utiliser un buffer assez petit pour avoir une latence correcte, il faut donc trouver le bon compromis : chez moi 256 échantillons par buffer est une valeur qui marche très bien.

            Ce qu'il lui manque, c'est surtout de fonctionner out-of-the-box, y'a encore trop à mettre les mains dedans pour que ca fasse pro.

            Je ne sais pas si Digital-Scratch s’appréhende plus facilement, mais le fait de configurer correctement la carte son ajoute toujours un peu de complexité pour ce type de logiciel. Ceci dit c'est un passage obligé quand on fait de la MAO. J'ai fait un petit topo sur le wiki qui explique le premier démarrage de Digital-Scratch sur une Ubuntu (kernel low latency, config de Jack, etc…). Si ça ne marche pas, ne pas hésitez à me poser des questions sur la mailing list, c'est comme ça qu'il pourra évoluer pour fonctionner out-of-the-box.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.