[OpenBSD]

[Index de la FAQ] [Section 12 - Questions Spécifiques Aux Plates-Formes Et Au Matériel] [Section 14 - Configuration des disques]

13 - Multimédia


Table des matières


13.1 - Comment configurer mon périphérique audio ?

Les périphériques concernant l'audio sous OpenBSD sont : /dev/audio, /dev/sound, /dev/audioctl et /dev/mixer. Pour une belle introduction à la couche de support audio, vous pouvez lire la page de manuel audio(4).

Tous les matériels audio supportés sont déjà inclus dans le noyau GENERIC, il n'y a donc pas besoin de configuration supplémentaire ou d'installation de drivers. Pour trouver des informations spécifiques à la puce de votre carte son, vous devrez déterminer quelle puce vous avez. Les puces supportées peuvent être trouvées sur la page des matériels supportés pour votre plate-forme. Si vous avez déjà OpenBSD lancé, cherchez l'apparition d'un driver de carte son dans la sortie de la commande dmesg(8), et lisez le manuel du driver pour des informations plus spécifiques comme les options et autres détails sur celui-ci. Voici un exemple d'une puce audio dans une sortie dmesg :

auich0 at pci0 dev 31 function 5 "Intel 82801BA AC97" rev 0x04: irq 10, ICH2 AC97
ac97: codec id 0x41445360 (Analog Devices AD1885)
ac97: codec features headphone, Analog Devices Phat Stereo
audio0 at auich0

OpenBSD de base fournit deux outils pour superviser et configurer les périphériques audio. audioctl(1) est utilisé pour les paramètres de traitement audio, comme l'encodage, le taux d'échantillonnage et le nombre de voix, tandis que mixerctl(1) est utilisé pour les paramètres de mixage, comme la voix source, le niveau de gain et la mise en sourdine.

La commande suivante utilise audioctl(1) pour afficher les paramètres audio par défaut d'un périphérique audio.

$ audioctl -f /dev/audio
...
Il faut remarquer que -f /dev/audio est utilisé explicitement. Ouvrir /dev/audio fait que le périphérique audio fait un reset aux paramètres par défaut, ce qui est ce que nous voulons voir.

audioctl(1) est aussi très utile pour explorer les capacités d'un périphérique audio. Par exemple, pour savoir si un périphérique supporte quelques taux d'échantillonnage standards, vous pouvez simplement essayer de changer les taux de lecture :

$ audioctl play.rate=48000
play.rate: -> 48000
$ audioctl play.rate=44100
play.rate: -> 44100
$ audioctl play.rate=22050
audioctl: set failed: Invalid argument
$ audioctl play.rate=8000
audioctl: set failed: Invalid argument
$
Ce périphérique supporte des taux de playback de 48000 et 44100 Hz, mais pas 22050 ou 8000. Il faut remarquer que si le taux d'échantillonnage n'est pas supporté, il n'y a pas obligatoirement un message d'erreur, mais le taux d'échantillonnage renvoyé n'est pas celui désiré.
$ audioctl play.rate=48000
play.rate: -> 48000
$ audioctl play.rate=44100
play.rate: -> 48000
$ audioctl play.rate=22050
play.rate: -> 48000
$ audioctl play.rate=8000
play.rate: -> 48000
$
Ce périphérique supporte uniquement la lecture en 48000 Hz.

Un matériel audio est usuellement capable d'au moins quelques capacités de mixage minimales. Exécuter mixerctl(1) sans arguments affichera la liste des contrôles de mixage du périphérique et ses paramètres actuels.

$ mixerctl
...
Certains périphériques possèdent seulement quelques contrôles, alors que d'autres une centaine ou plus. Il faut remarquer que toutes les options de chaque puce audio n'atteint pas nécessairement le monde extérieur. Il y a donc, par exemple, plus de sorties énumérées que celles qui sont physiquement disponibles sur une carte son ou carte mère.

Il y a quelques contrôles qui sont communs à plusieurs périphériques :

Le contrôle d'un périphérique audio peut-être affiché différemment. Par exemple, il pourrait ne pas être outputs.master comme ci-dessus, mais outputs.outputs qui fait la même chose. Habituellement, les contrôles ont un label, mais parfois il faut simplement essayer différents réglages pour voir l'effet que chacun a sur le contrôle.

Certains périphériques qui sont connus comme EAPD, qui signifie amplificateur externe d'arrêt. Cependant c'est juste un bouton marche/arrêt. Il fait probablement référence à un "arrêt" car il est souvent utilisé comme économiseur d'énergie, ce qui signifie que ce type de contrôle est plus souvent trouvé sur les portables. Quelquefois il est nécessaire de paramétrer les contrôles avec eapd ou extamp dans leur nom avec on pour obtenir un signal de sortie.

Comme exemple simple d'un usage courant de mixerctl, pour paramétrer le volume des voix gauche et droite à 200, vous devrez

$ mixerctl outputs.master=200,200
outputs.master: 255,255 -> 207,207
Remarquez que la valeur est devenue 207. La raison à cela est que le périphérique de cette carte audio est un codec AC'97, qui utilise seulement 5 bits pour le contrôle, ce qui ne laisse que 32 valeurs possibles. D'autres matériels peuvent avoir une résolution différente.

Pour activer le canal "master", vous devriez faire :

$ mixerctl outputs.master.mute=off
outputs.master.mute: on -> off

Pour que vos changements soient effectifs à chaque redémarrage vous devrez éditer /etc/mixerctl.conf, par exemple :

$ cat /etc/mixerctl.conf
outputs.master=200,200
outputs.master.mute=off
outputs.headphones=160,160
outputs.headphones.mute=off

13.2 - Jouer différents types de formats audio

Audio digitalisée

Formats audio sans perte (AU, PCM, WAV, FLAC, TTA)

Certains formats audio sans perte peuvent être joués sans qu'un logiciel tierce partie ne soit nécessaire, ils contiennent les enregistrements digitaux non compressés en flots d'octets. Ces formats incluent les fichiers Sun audio (AU), les fichiers raw PCM (sans en-têtes) et les RIFF WAV.

OpenBSD est fourni avec aucat(1), un programme pour enregistrer et jouer de l'audio non compressé. L'exemple suivant jouera un fichier WAV.

$ aucat -i filename.wav
aucat(1) supporte autant les écouteurs que les fichiers audio WAV avec l'option -i. aucat joue aussi les fichiers audio Sun ou les données audio sont encodées en 8 kHz monaural mulaw, qui est l'encodage le plus courant pour ce type de fichier audio.

Il est aussi possible de jouer des données audio non compressées en les envoyant directement sur le périphérique audio. Pour jouer un tel fichier, vous devrez connaître ses paramètres principaux : le type d'encodage, le nombre de canaux, la fréquence, et le nombre de bit par morceau. Si vous ignorez ces paramètres, vous pourrez les retrouver en utilisant l'utilitaire : file(1).

$ file music.au
music.au:  Sun/NeXT audio data: 16-bit linear PCM, stereo, 44100 Hz
$ file music.wav
music.wav: Microsoft RIFF, WAVE audio data, 16 bit, stereo 44100 Hz
La seule chose qu'il vous reste à savoir sur ces fichiers d'exemple est qu'ils sont encodés dans le format d'octet "little-endian" utilisant la quantification linéaire signée. Vous pouvez vérifier cela en lisant son en-tête avec hexdump(1). Si vous utilisez un fichier sans en-tête (raw), il n'y a aucun moyen de connaître les paramètres à l'avance. Configurez les paramètres suivants en utilisant audioctl(1).
play.encoding=slinear_le
play.rate=44100
play.channels=2
play.precision=16
Ensuite, envoyez le fichier audio au périphérique son :
$ cat music.au > /dev/sound
Si vous avez appliqué les bons paramètres, vous devriez entendre ce que vous souhaitiez entendre.

Remarque : Utilisez toujours /dev/sound, et non /dev/audio, si vous souhaitez que les paramètres appliqués restent en place.

Il y a, bien évidemment, d'autres utilitaires que vous pouvez utiliser pour jouer ces fichiers. Comme XMMS qui est disponible dans les ports et paquetages et peut jouer bien d'autres formats audio.

À l'inverse de ce qui a été dit précédemment, il existe des formats audio sans perte de qualité. Free Lossless Audio Codec (FLAC) et TTA en sont des exemples. L'implémentation FLAC a été portée sous OpenBSD et peut être trouvée dans audio/flac dans les paquetages et les ports.

Formats audio utilisant la compression par perte (Ogg Vorbis, MP3, WMA, AAC)

La compression par perte de qualité est souvent utilisée pour l'audio ou les autres fichiers multimédia. L'idée est qu'un certain volume de données est supprimé pendant la compression, en utilisant une méthode qui fait que le résultat compressé est toujours très exploitable et dispose d'une bonne qualité pour être joué. L'avantage de ces techniques est qu'ils autorisent de plus gros ratios de compression, ce qui résulte en une plus faible place disque utilisée et de plus besoins en bande passante.

Un bon exemple est le format libre, ouvert et non déposé Ogg Vorbis. Pour jouer des fichiers Ogg Vorbis, vous pouvez utiliser l'utilitaire ogg123, qui est inclus dans le paquetage audio/vorbis-tools. Par exemple :

$ ogg123 music.ogg

Audio Device:   Sun audio driver output

Playing: music.ogg
Ogg Vorbis stream: 2 channel, 44100 Hz
Time: 00:02.95 [02:21.45] of 02:24.40  (133.1 kbps)  Output Buffer  87.5%
Bien sûr, les plugins Ogg Vorbis existent pour beaucoup d'autres logiciels audio.

Un autre exemple est le très populaire encodage MPEG-1 Audio Layer 3 (MP3), qui a, cependant, ses problèmes de redistribution et brevets. Beaucoup de programmes peuvent jouer des fichiers MP3, consultez la section audio du système de paquetages et de ports et choisissez celui que vous souhaitez.

Que dire du format Windows Media Audio (WMA) ? Les fichiers de ce type peuvent être lus en utilisant x11/mplayer qui se sert de l'architecture FFmpeg.

Un bon point de départ pour en savoir plus sur les différents formats de fichiers audio est de lire l'article Wikipedia suivant : Audio file formats (en anglais).

Son synthétisé

MIDI

Le protocole "Musical Instrument Digital Interface" (MIDI) est fourni par MIDI devices. Si vous ne possédez pas de synthétiseur MIDI, mais que vous voulez jouer un fichier MIDI standard (SMF), vous pouvez utiliser un logiciel de rendu de données MIDI générant des fichiers audio. Par défaut, le port audio/timidity utilise les fichiers MIDI et les joue sur le périphérique audio :
$ timidity file.mid

MOD

Un module "Soundtracker" est un format binaire qui mixe les plages audio avec des ordres de séquences, autorisant à jouer de très grands morceaux de musique digitalisée avec un qualité raisonnablement bonne.

Le moyen le plus simple de jouer vos fichiers MOD favoris sur OpenBSD est probablement d'utiliser le logiciel XMMS, disponible via les paquetages et les ports. Vous devriez installer le sous-paquetage -mikmod pour XMMS afin de lui permettre d'utiliser la bibliothèque sonore MikMod, qui supporte les modules de formats MOD, S3M, IT et XM.

Vous trouverez aussi liste de "trackers" dans la section audio de la collection de ports et de paquetages, comme par exemple tracker, soundtracker. Avec ces trackers, vous ne pouvez pas seulement jouer mais aussi générer vos propres modules. Remarquez que tous les trackers ne sont pas supportés par les outils de l'arbre des ports. Vous êtes invités à envoyer un port de votre programme de tracker favori.

13.3 - Comment jouer des CDs dans OpenBSD ?

Il est possible de jouer un CD audio aussi bien en ayant le lecteur de CD jouant le disque et envoyant les données audio analogique à la carte sonore qu'en lisant les données audio en envoyant les échantillons numériques à la carte sonore à travers le bus PCI.

Pour jouer un CD audio, en utilisant la sortie analogique de votre lecteur CD-ROM, vous pouvez

Un utilitaire pratique en ligne de commande appelé cdio(1) a été inclus dans le système de base. Appelé sans paramètres, il entrera en mode interactif. Si vous souhaitez jouer un CD-ROM, entrez :

$ cdio play

Cela lira depuis le premier lecteur CD-ROM, cd0, par défaut. Notez que l'utilisateur qui lance cdio doit bénéficier des permissions de lecture sur le périphérique CD-ROM (ex. /dev/rcd0c). Étant donné que par défaut ce périphérique n'est accessible en lecture que par root et le groupe "operator", pour plus de facilité vous pouvez ajouter l'utilisateur au groupe operator en éditant la ligne correspondante dans /etc/group. Une autre solution est de modifier les permissions du périphérique comme vous le souhaitez.

Vous aurez peut-être besoin d'activer l'entrée CD au niveau du mixeur de sons. Au même titre que les sorties, le nom réel de ce canal d'entrée varie selon les systèmes. Mais la commande à utiliser ressemble à la commande suivante :

$ mixerctl inputs.cd.mute=off
Il est aussi possible qu'il n'y ait pas de connexion audio analogique entre votre lecteur CD et le périphérique audio. Dans ce cas vous pouvez utiliser les commandes cdplay de cdio pour envoyer les données audio du CD vers la carte sonore à travers le bus PCI.
$ cdio cdplay

Si vous préférez une belle GUI, il y a beaucoup de lecteurs de CDs basés sur X11 dans la collection de paquetages et de ports. Consultez simplement la section audio.

13.4 - Puis-je utiliser OpenBSD pour enregistrer des séquences audio ?

Oui. La plupart des périphériques supportent l'enregistrement. aucat(1) est distribué avec OpenBSD et peut être utilisé pour l'enregistrement.
$ aucat -o file.wav
La commande précédente commencera l'enregistrement d'un fichier au format WAV. Appuyez sur [CTRL]-C pour terminer l'enregistrement. Le fichier contiendra des échantillons signés 16-bit stéréo, échantillonné à 48 kHz. D'autres formats d'échantillonnage, taux d'échantillonnage et nombre de voix peuvent être enregistrés. Lisez le manuel pour plus de détail.

Utilisez aucat pour rejouer le fichier :

$ aucat -i file.wav

Si l'enregistrement semble fonctionner mais que la sortie de l'enregistrement est muette ou n'est pas ce que vous souhaitez, le mixer a sûrement besoin d'être configuré. Soyez sûr que vous sélectionnez le bon périphérique pour enregistrer et que la source n'est pas muette. Vous pouvez configurer les paramètres nécessaires en utilisant mixerctl(1). Par exemple :

inputs.mic.mute=off
inputs.mic.preamp=on
inputs.mic.source=mic0
record.source=mic
record.volume=255,255
record.volume.mute=off
record.mic=255
record.mic.mute=off
Il y a des paramètres pour l'enregistrement avec un microphone. La pré-amplification a été activée, car sinon le son enregistré peut être quelque peu silencieux sur certains systèmes.

13.5 - Comment configurer un serveur audio ?

Qu'est-ce que le serveur audio sndiod(1) ?

Le démon sndiod(1) est une couche intermédiaire entre les programmes audio ou MIDI et le matériel. Il effectue le traitement audio nécessaire pour permettre à n'importe quel programme de fonctionner sur n'importe quel matériel supporté. Il dispose d'au moins un sub-device auquel un certain nombre de programmes audio peuvent se connecter et l'utiliser comme si c'était un matériel audio. Pendant la lecture, sndiod reçoit des données audio simultanément de tous les programmes, il mixe et envoie le résultat au matériel audio. De même, pendant l'enregistrement il duplique les données audio enregistrées à partir du périphérique et l'envoie à tous les programmes.

Par défaut, il accepte les connexions provenant d'un seul système; il s'initialise seulement lorsque les programmes utilisent ses services, ce qui signifie qu'utilises des ressources du système négligeables. Les systèmes sans matériel audio peuvent utiliser sndiod pour faire en sorte que lorsqu'un matériel de ces matériels est branché à chaud sur la machine, il puisse être utilisé.

Ai-je besoin d'un serveur audio ?

Si les applications que vous utilisez sont compatibles avec votre matériel et que vous ne prévoyez pas de lancer plusieurs applications en même temps, vous n'avez absolument pas besoin d'un serveur audio. Depuis OpenBSD 5.1, sndiod(1) est lancé par défaut durant la phase de démarrage du système. Il n'y a pas plus de raisons de désactiver sndiod(1) sur un système sans matériel audio que de désactiver getty(8) sur un système bancal.

Notez que sndiod peut être contourné en utilisant rsnd/0 en tant que périphérique audio à la place de celui par défaut.

Quel temps de latence configurer ?

Le temps de latence est le temps entre la décision pour un programme de jouer un échantillon et le moment où l'utilisateur entend l'échantillon. Comme les données audio sont toujours en cache, ce délai est proportionnel à la taille du cache audio. Les valeurs suivantes sont recommandées : Plus le cache audio est petit (pour avoir un temps de latence faible), plus les probabilités sont grandes d'avoir des problèmes de overrun/underrun. Le cache en overruns/underruns donnera au son un "bégaiement".

sndiod(1) impose une latence minimale sur toutes les applications audio, et la latence par défaut est 160ms. Si vous prévoyez d'utiliser des applications qui requièrent une plus faible latence, utilisez l'option ``-b'' pour sélectionner la latence désirée (exprimée en nombre de frames). Par exemple à 48000 échantillons/seconde, 50ms de latence correspond à :

48000 échantillons/seconde x 0.050 secondes = 2400 échantillons
ensuite, ajoutez:
sndiod_flags="-b2400"
à /etc/rc.conf.local.

Une latence plus faible améliore-t-elle la synchronisation audio-vidéo ?

Non. Synchroniser l'audio à la vidéo ne nécessite pas une latence faible. Les problèmes de synchronisation sont souvent causés par le logiciel lui-même (mauvaise implémentation, bogues,  ...). Forcer l'application à utiliser des cache plus petits (en démarrant sndiod(1) en mode latence faible) peut cacher les problèmes actuels dans certains cas et donner la sensation que le logiciel fonctionne mieux, mais normalement la bonne chose à faire est de commencer à chercher le bogue correspondant.

Comment utiliser une carte audio à distance ?

sndiod(1) peut être configuré pour accepter les connexions depuis le réseau, permettant ainsi à d'autres machines d'utiliser la carte audio. Sur le système distant (celui avec la carte audio), ajoutez:
sndiod_flags="-L-"
à /etc/rc.conf.local. Sur le système local, configurez votre programme pour qu'il utilise:
snd@hostname/0
où ``hostname'' est l'adresse du système distant. La variable d'environnement AUDIODEVICE devrait être définie à la valeur précédente pour faire de la carte audio distante le périphérique audio par défaut.

Notez qu'un système capable de se connecter au port TCP 11025 de la machine distante sera capable d'utiliser le périphérique audio. Pour des raisons de confidentialité, seul un utilisateur peut se connecter au système à la fois. Si plusieurs systèmes doivent utiliser le même périphérique audio simultanément, le cookie d'autorisation de sndio(7) doit être le même. Pour ce faire, copiez votre fichier ~/.aucat_cookie sur tous les comptes qui pourraient utiliser le périphérique audio.

Pour éviter les bogues, le trafic TCP sur le port 11025 devrait être prioritaire avec packet filter. Avec la configuration par défaut, sndiod va utiliser environ 200kB/s de bande passante.

13.6 - Que puis-je faire si j'ai des problèmes audios ?

Si vous n'entendez rien quand vous jouez de l'audio, il est possible que le contrôle du mixage soit trop faible ou simplement muet. Voir la section 13.1 - Comment puis-je configurer mon périphérique audio pour configurer le mixage. Merci de rendre non muet toutes les entrées et sorties avant de reporter un problème.

Si le son est distordu, il est possible que votre carte audio ne supporte qu'un unique ou nombre limité de taux d'échantillonnage ou d'encodages. Voir la section 13.1 - Comment configurer mon périphérique audio ? par exemple pour déterminer quels paramètres audio votre périphérique supporte.

Si votre périphérique ne supporte seulement que des encodages peu courants ou qu'un ou peu de taux d'échantillonnage, et l'application que vous utilisez ne peut pas faire les conversions audio nécessaires, considérez aucat(1) comme serveur audio. Voir le paragraphe 13.5 - Comment configurer un serveur audio ?

Si vous avez toujours des problèmes, voici quelques choses à considérer :

Si vous croyez que votre périphérique doit fonctionner, mais que pour une raison inconnue ce n'est pas le cas, il est temps de déboguer. Les étapes suivantes peuvent déterminer si les données sont traitées par le DAC.

$ cat > /dev/audio < /dev/zero &
[1] 9926
$ audioctl play.{seek,samples,errors}
play.seek=48000
play.samples=3312000
play.errors=0
$ audioctl play.{seek,samples,errors}
play.seek=57600
play.samples=7065600
play.errors=0
$ audioctl play.{seek,samples,errors}
play.seek=48000
play.samples=9379200
play.errors=0
$ kill %1
$ fg %1
cat > /dev/audio < /dev/zero
Terminated
Ici nous observons que le compteur des données traitées play.samples augmente chaque fois lors de la vérification, donc les données passent. Nous observons aussi que le périphérique récupère assez de données dans le tampon play.seek et que le périphérique n'a pas de problèmes via play.errors. C'est une bonne chose.

Il faut remarquer que même si vous avez des enceintes connectées quand vous faites vos tests, vous n'entendrez rien. Le test envoie des zéros au périphérique qui devient silencieux pour tous les encodages par défaut supportés.

Depuis que nous savons que le périphérique peut traiter des données, c'est un bonne idée de vérifier encore les paramètres de mixage. Soyez sûr que toutes les sorties et entrées ne sont pas muettes et à un niveau raisonnable.

Si à ce moment vous continuez d'avoir des problèmes, il est probablement temps d'envoyer un fichier de rapport de bogue. En plus du rapport d'information de bogue comme un dmesg complet et une description du problème, merci d'inclure aussi le sortie par défaut de mixerctl -v et les sorties des tests précédents du traitement DAC.

13.7 - Comment puis-je utiliser mes instruments MIDI ?

Le protocole "Musical Intrument Digital Interface" (MIDI) fournit un façon standardisée et efficace de représenter les informations musicales comme données électroniques. Une donnée MIDI contient uniquement les informations nécessaires au synthétiseur pour jouer les sons, au lieu des sons eux-mêmes. Plus d'informations : Tutorial on MIDI and Music Synthesis.

Pour jouer des données MIDI, un synthétiseur connecté au port MIDI de la machine est indispensable. De façon similaire, pour enregistrer des données MIDI, un instrument MIDI est indispensable (comme un clavier MIDI). Certaines cartes sonores embarquent des synthétiseurs MIDI qui sont attachés au ports MIDI. Les instruments MIDI évolués peuvent contenir plusieurs éléments (synthétiseurs, claviers, contrôle de la surface, etc...), ils apparaissent comme plusieurs ports MIDI sous OpenBSD.

Quand OpenBSD est déjà fonctionnel, regardez les ports MIDI dans la sortie de la commande dmesg(8). Un exemple de ports MIDI dans une sortie dmesg :

umidi0 at uhub2 port 2 configuration 1 interface 0 "Roland Roland XV-2020" rev 1.10/1.00 addr 2
midi0 at umidi0: <USB MIDI I/F>
umidi1 at uhub1 port 2 configuration 1 interface 1 "Evolution Electronics Ltd. USB Keystation 61es" rev 1.00/1.25 addr 3
midi1 at umidi1: <USB MIDI I/F>
Il montre deux ports MIDI correspondants à : Ces périphériques sont reconnus par sndio(7) comme rmidi/0 et rmidi/1. Pour tester votre clavier MIDI vous pouvez utiliser l'utilitaire hexdump(1) qui affiche les données MIDI que vous jouez dessus :
$ aucat -Mq rmidi/1 -o - | hexdump -e '1/1 "%02x\n"'
90
3c
71
...
La sortie du clavier peut être connectée à l'entrée du synthétiseur comme :
$ aucat -M -q rmidi/0 -q rmidi/1
Maintenant vous pouvez entendre sur le synthétiseur ce que vous jouez sur le clavier MIDI. Referez-vous aux pages du manuel aucat(1) pour plus d'informations.

L'utilitaire principal pour jouer des fichiers MIDI est midiplay(1). Jouer un fichier MIDI standard, dans cet exemple à travers le synthétiseur, est aussi simple que :

$ midiplay -f rmidi/0 file.mid

Pour enregistrer des fichiers MIDI, vous pouvez utiliser l'utilitaire smfrec fournit dans le port audio/midish, ainsi :

$ smfrec -d rmidi/0 -i rmidi/1 file.mid
enregistrera ce qui est joué au clavier (rmidi/1) pendant qu'il enverra en temps réel sur le synthétiseur (rmidi/0) ce que vous pourrez entendre en jouant. Une opération plus compliquée comme l'édition, routage, mixage et la transformation de données MIDI peut être réalisée en utilisant l'utilitaire rmidish disponible dans le port audio/midish.

13.8 - Parlez-moi de l'encodage Ogg Vorbis et MP3

Ces formats ont déjà été mentionnés dans Jouer différents formats audio. Dans cette section nous donnerons une brève introduction à l'encodage de tels fichiers. Si vous êtes intéressé par le fonctionnement de ces codecs de compression audio, de plus amples informations peuvent être trouvées dans les articles Wikipedia concernant Vorbis et MP3.

Ogg Vorbis

L'encodage de formats audio raw, WAV ou AIFF en Ogg Vorbis peut être réalisé via l'utilitaire oggenc, faisant partie du paquetage audio/vorbis-tools, qui est disponible via le système de ports et de paquetages d'OpenBSD.

Disons que vous avez un certain nombre de fichier WAV à encoder, par exemple votre album favori que vous venez juste d'extraire de son CD. Pour encoder tous ces fichiers en utilisant une fréquence d'environ 192 kbps, vous pouvez utiliser une commande comme celle-ci :

$ oggenc *.wav -b 192
Une fois terminé, cela vous fournira un ensemble de fichiers .ogg dans le dossier courant. Des exemples plus précis ainsi que les options d'encodage peuvent être trouvés dans le manuel oggenc.

MPEG-1 Audio Layer 3 (MP3)

Si pour quelque raison que ce soit, vous souhaitez utiliser le format MP3, vous pouvez utiliser "Lame ain't an MP3 encoder" (LAME), un outil d'éducation utilisé pour apprendre l'encodage MP3. Lame est inclus dans l'arbre des sources OpenBSD. Notez que pour des raisons de brevets MP3, vous ne trouverez pas ce paquetage dans le Set de CDs officiels.

Ci-dessous se trouve un exemple simple d'encodage d'un fichier WAV avec une fréquence de 192 kbps :

$ lame -b 192 track01.wav track01.mp3
Pour toutes les options et les détails, merci de consulter le manuel fourni avec lame.

13.9 - Comment lire des vidéos DVDs sous OpenBSD ?

Pour l'instant, OpenBSD supporte les médias DVD à travers le système de fichiers ISO 9660 qui est aussi utilisé pour les CD-ROMs et, depuis la version 3.8, également à travers le système de fichiers plus récent, Universal Disk Format (UDF), présent sur certains DVDs. Cependant, presque tous les disques DVD-Video et DVD-ROM utilisent le format passerelle UDF, qui est une combinaison des systèmes de fichiers DVD MicroUDF (sous-ensemble de UDF 1.02) et ISO 9660. Ce format est utilisé afin de garantir la compatibilité ascendante.

Puisque la plupart des ordinateurs disposant d'un lecteur DVD-ROM utilisent un décodage logiciel, il est recommandé d'avoir au moins un processeur Pentium II 350-MHz ou équivalent pour disposer d'une bonne qualité d'écoute.

Quelques utilitaires de lecture DVD populaires ont été portés sur OpenBSD. Comme par exemple ogle ,mplayer, xine et kaffeine. Veuillez lire les instructions d'installation livrées avec ces paquetages, car ces fichiers peuvent nécessiter plus de configuration. Avec ces utilitaires il est possible de lire des DVD directement en accédant au périphérique raw. Bien sûr, il est possible de monter d'abord le DVD en utilisant mount_cd9660(8), et de jouer les fichiers sur ce système de fichiers ou un autre.

Remarque :

13.10 - Comment graver des CDs et DVDs ?

13.10.1 - Introduction et configuration de base

Vous devriez tout d'abord être sûr que votre graveur CD/DVD a bien été reconnu et configuré par le noyau. La plupart des périphériques SCSI sont reconnus. Les matériels SATA, IDE/ATAPI et USB sont supportés au travers de l'émulation SCSI. Vous trouverez rapidement votre périphérique dans la sortie d'un dmesg(8). Cherchez simplement les lignes commençant par "cd", par exemple :
cd0 at scsibus0 targ 0 lun 0: <TOSHIBA, CD-ROM XM-5702B, 2826> SCSI0 5/cdrom removable
cd1 at scsibus1 targ 4 lun 0: <PLEXTOR, CD-R PX-R412C, 1.04> SCSI2 5/cdrom removable

Mais cdrecord -scanbus ne fonctionne pas!

Oui. OpenBSD utilise un espace de nommage de périphérique différent de celui du système d'exploitation pour lequel cdrecord a été écrit. Tous les périphériques doivent être dans la sortie dmesg, comme mentionné ci-dessus. L'information dont vous avez besoin se trouve ici.

Error: mount_cd9660: /dev/cd2c on /mnt/cdrom: No such file or directory

Par défaut, l'installeur OpenBSD ne crée que deux périphériques cd cd0 et cd1. Pour commencer à utiliser votre périphérique cd2, vous devez créer le périphérique nécessaire pour celui-ci. La méthode recommandée pour cela est d'utiliser le script MAKEDEV(8) (Sélectionnez votre plate-forme) :
# cd /dev
# ./MAKEDEV cd2
Dans ce qui suit, nous accéderons principalement au graveur de CD/DVD à travers le périphérique raw et non le périphérique block.

Vérifier le fonctionnement du graveur de CD/DVD

Il est recommandé de vérifier que votre graveur de CD/DVD fonctionne correctement. Dans cet exemple, j'utilise un graveur DVD USB 2.0 :
cd2 at scsibus2 targ 1 lun 0: <LITE-ON, DVDRW LDW-851S, GS0C> SCSI0 5/cdrom removable
Essayez de l'utiliser en y montant un CD/DVD. Si vous le souhaitez, vous pouvez aussi vérifier les taux de transfert que vous obtenez en copiant des fichiers sur votre disque dur. La commande time(1) sera votre meilleure amie.

Si quelque chose se passe mal ici et que vous obtenez des erreurs durant cette phase, il est important de les corriger avant de commencer à écrire un CD/DVD.

Je souhaite maintenant graver un CD ! Pouvons-nous commencer ?

Auparavant, il est judicieux de garder quelques conseils en tête :

13.10.2 - Graver des CDs

Créer des CD-ROMs de données

Tout d'abord, vous devrez créer un système de fichier ISO 9660 à mettre sur un CD-ROM. Pour cela vous pouvez utiliser l'utilitaire mkhybrid(8) fourni dans le système de base ou mkisofs du paquetage cdrtools qui est plus performant avec des arborescences importantes. Dans l'exemple suivant, nous utiliserons mkhybrid bien que l'utilisation de mkisofs soit similaire.

Comme exemple d'utilisation, j'ai essayé de sauvegarder les sources d'OpenBSD dans une image ISO 9660 :

$ mkhybrid -R -o sys.iso /usr/src/sys

Using ALTQ_RMC.000;1 for  /usr/src/sys/altq/altq_rmclass_debug.h (altq_rmclass.h)
...
Using IEEE8021.00H;1 for  /usr/src/sys/net80211/ieee80211_amrr.c (ieee80211.c)
 10.89% done, estimate finish Sat Nov  3 08:01:23 2007
 21.78% done, estimate finish Sat Nov  3 08:01:28 2007
...
 87.12% done, estimate finish Sat Nov  3 08:01:31 2007
 98.01% done, estimate finish Sat Nov  3 08:01:32 2007
Total rockridge attributes bytes: 896209
Total directory bytes: 2586624
Path table size(bytes): 11886
Max brk space used 0
45919 extents written (89 Mb)

L'option -R demande à mkhybrid de rajouter des extensions Rock Ridge dans l'image ISO 9660. Le "Rock Ridge Interchange Protocol" a été créé pour supporter le système de fichiers POSIX à l'intérieur du système de fichiers ISO 9660, comme les longs nom de fichiers, les créateurs de fichiers, les permissions, les liens de fichiers, les fichiers de périphériques, les hiérarchies de fichiers profondes (plus de 8 niveaux de sous-dossiers), etc...

Si vous souhaitez que les longs noms de fichiers sur votre CD-ROM soient lisibles sur les systèmes Windows et DOS, vous devriez ajouter le paramètre -J pour inclure les extensions Joliet dans l'image ISO 9660.

Après avoir créé les systèmes de fichiers, vous pouvez le vérifier en montant l'image ISO 9660. Si tout se passe bien, vous êtes maintenant prêt à écrire le CD-R(W). La façon la plus aisée pour faire cela consiste à employer l'utilitaire cdio(1).

Si vous utilisez des média réinscriptibles tels que des CD-RW, vous devez tout d'abord procéder à un effacement avant de pouvoir faire une réécriture.

# cdio -f cd1c blank
Vous êtes maintenant prêt à graver l'image créée dans l'exemple précédent sur un CD-R(W) vierge. Vous pourrez utiliser une commande similaire à :
# cdio -f cd1c tao sys.iso
En utilisant les options spécifiées ci-dessus, nous demandons à cdio d'utiliser le second périphérique CD-ROM comme graveur de CD.

Pour vérifier que le CD-ROM a bien été écrit, vous pouvez le monter et vérifier que tout ce qui doit y être y est. Pour monter le système de fichier, vous devez utiliser le périphérique block pour le lecteur de CD-ROM, qui dans ce cas est toujours le graveur de CD :

# mount /dev/cd1c /mnt/cdrom

Créer des CDs audio

Pour graver des CDs audio, vous pouvez encore une fois utiliser cdio(1) avec l'option tao -a.

Comme exemple, je ferais une copie de sauvegarde d'un de mes CDs de musique. Cela implique deux étapes :

  1. Copier les pistes audio depuis votre CD original Par exemple :
    # cdio -f cd1c cdrip
    
    Cette commande va extraire une série de fichiers WAV de votre second lecteur CD-ROM et les écrire sur votre disque.
  2. Graver les pistes sur un CD vierge Par exemple :
    # cdio -f cd1c tao -a *.wav
    

13.10.3 - Graver des DVDs

Il y a quelques détails importants à propos des DVDs que vous devriez savoir avant de créer vos propres DVDs.

Remarques importantes :

Différents formats de DVD

Il y a plusieurs formats différents de DVD. Les plus utilisés sont les formats DVD-R, DVD-RW, DVD+R et DVD-RW (R signifie enregistrable une seule fois, RW signifie qu'il peut être réécrit quelques milliers de fois). Il existe d'autres standards plus compétitifs.

Un format différent est le DVD-RAM, qui a principalement été développé comme un lecteur de données et dispose de fonctions d'écriture de paquets avancées, autorisant à l'utiliser comme une sorte de disque dur optique. DVD-RAM n'est pas recommandé pour une utilisation vidéo car les vidéos sont écrites sur le disque dans un format non compatible avec les lecteurs de DVD normaux.

Le point le plus important est d'utiliser le média adapté à votre graveur de DVD. Si vous souhaitez la compatibilité avec d'autres lecteurs de DVD, veuillez lire cette section de la FAQ DVD.

Vitesse de gravure DVD

Il est important de spécifier que les indications de vitesses des DVDs diffèrent de celles des CD-ROMs. La table suivante en donne un aperçu :

Vitesse de Lecture/Écriture DVD Taux de transfert (Mo/s) Vitesse de Lecture/Écriture CD-R(W)
1x 1.32 9x
2x 2.64 18x
4x 5.28 36x
8x 10.57 72x

Comme on peut le voir dans le tableau, les taux de transfert sont relativement hauts, et vous devrez vérifier que votre bus (SCSI, IDE/ATAPI, SATA, USB) est assez performant pour les supporter. Spécifiquement, les vielles interfaces USB 1.0 et 1.1 travaillent à des taux plus bas, avec des vitesses de transfert de 1.5 Mbit/s et 12 Mbit/s, respectivement. Cela signifie que l'USB 1.0 a une vitesse maximum de 178.8 kByte/s et USB 1.1 de 1.43 MB/s. USB 2.0 est plus rapide : 480 Mbit/s ou 57.2 MB/s. En général, les vitesses des bus SCSI, SATA et IDE/ATAPI sont correctes.

Graver les DVDs

Basiquement, le processus est très similaire à celui d'écrire des CD- R(W)s. Le logiciel, cependant, diffère. À ce moment, la meilleure option est growisofs depuis le paquetage sysutils/dvd+rw-tools. Cet utilitaire écrit une image ISO 9660 sur le média DVD. Tous les formats DVD sont supportés par dvd+rw-tools.

Dans le cas où vous voudriez plus d'informations sur le média présent dans votre graveur de DVD (par exemple si vous avez perdu le texte d'information dans la boite du cd ou êtes simplement désorganisé comme moi), vous pouvez utiliser l'utilitaire dvd+rw-mediainfo. Il y a deux options pour écrire le DVD:

J'ai créé une image ISO 9660 pré-masteurisée depuis les modules CVS d'OpenBSD (src, xenocara, ports et www) présents dans le dossier /cvs de mon disque. J'ai utilisé la commande suivante, qui ressemble beaucoup à celle que j'ai utilisé pour créer l'image CD-ROM précédente.

$ mkhybrid -r -o cvs.iso /cvs
Si vous le souhaitez, testez le système de fichiers ISO 9660 en montant l'image. Pour écrire cette image (environ 2Go) sur un disque DVD, on peut utiliser :
# growisofs -dvd-compat -Z /dev/rcd2c=cvs.iso
Executing 'builtin_dd if=cvs.iso of=/dev/rcd2c obs=32k seek=0'
/dev/rcd2c: pre-formatting blank DVD+RW...
/dev/rcd2c: "Current Write Speed" is 4.1x1385KBps.
23822336/1545832448 ( 1.5%) @3.9x, remaining 5:19
42172416/1545832448 ( 2.7%) @3.9x, remaining 5:20
60522496/1545832448 ( 3.9%) @3.9x, remaining 4:54
...
1504706560/1545832448 (97.3%) @3.9x, remaining 0:07
1523318784/1545832448 (98.5%) @3.9x, remaining 0:04
1541898240/1545832448 (99.7%) @3.9x, remaining 0:00
/dev/rcd2c: flushing cache
/dev/rcd2c: writing lead-out
/dev/rcd2c: reloading tray
L'option -Z demande à growisofs de graver une session initiale sur le périphérique, qui dans ce cas est mon graveur de DVD, attaché à cd2. L'option -dvd-compat finalise le disque, ce qui signifie qu'aucune nouvelle session ne peut y être rajoutée. Cela devrait fournir une meilleure compatibilité avec les lecteurs DVD et quelques vielles unités DVD-ROM.

Remarquez comment growisofs indique la vitesse d'écriture, dans notre cas 3.9x, ce qui est ce que l'on peut attendre en combinant les vitesses du média et du graveur, comme indiqué par le dvd+rw-mediainfo.

Si vous ne disposez pas de suffisamment de place pour stocker une image de ISO 9660 four un DVD, vous pouvez écrire vos données directement sur le DVD. Essayons simplement une simulation de création du système de fichiers.

# growisofs -dry-run -Z /dev/rcd2c -R /cvs
Si cela fonctionne, retirez simplement l'option -dry-run et commencez l'écriture du DVD.
# growisofs -Z /dev/rcd2c -R /cvs

Il est aussi possible d'ajouter des données à un DVD existant, en utilisant l'option -M, qui fond une nouvelle session dans une session existante :

# growisofs -M /dev/rcd2c -R /mydata
Pour plus d'informations à propos de growisofs, consultez sa page de manuel.

Lorsque vous avez terminé d'écrire le DVD, montez-le et vérifiez que tout ce que vous souhaitiez présent y soit effectivement.

Pourquoi je n'obtiens pas la vitesse que je veux ?

Au lieu de la vitesse d'écriture précédente, vous pourriez voir quelque chose comme ceci :
  4784128/1545832448 ( 0.3%) @0.7x, remaining 26:50
  7929856/1545832448 ( 0.5%) @0.7x, remaining 29:05
  14123008/1545832448 ( 0.9%) @0.7x, remaining 27:06
  ...
ce qui est bien plus lent. Cela signifie qu'il ne transite pas assez d'informations sur l'un des bus que votre DVD utilise. Dans l'exemple précédent, le graveur de DVD USB fut installé sur une machine sur laquelle le driver ehci(4), utilisé par les contrôleurs USB 2.0, ne s'est pas initialisé correctement. Comme d'habitude, vous êtes invités à envoyer des patchs et résultats de vos tests. Le graveur de DVD fut ralenti par l'interface USB 1.1 plus lente, ce qui a réduit la vitesse de gravure. L'USB 1.1 est limité à 12 Mbit/s, ce qui correspond à 1.43 MB/s ou 1.08x en terme de vitesse DVD. Le graveur de DVD est descendu à une plus basse vitesse de gravure pour diminuer le risque de buffer overrun (défaut de données à écrire).

13.11 - Je voudrais mes fichiers multimédia au format FOO.

Conversion entre différents formats audios

Admettons que vous souhaitiez convertir le son enregistré avec FAQ 13 - Enregistrer des séquences audio. Cet enregistrement a été enregistré en format brut. Il serait utile de le convertir car le format brut ("raw") ne contient pas d'en-tête et les paramètres devront être spécifiés à chaque utilisation du fichier.

Un bon outil de conversion de format est audio/sox, disponible au travers des ports et des paquetages. sox supporte les formats AIFF, AU, MP3, Ogg Vorbis, RIFF WAV et raw, ainsi que certains autres plus exotiques. Ci-dessous vous trouverez un exemple de conversion de l'enregistrement vers le format RIFF WAV.

$ sox -U -c 1 -r 8000 -b myvoice.raw myvoice.wav
Notez que les paramètres spécifiés correspondent aux paramètres d'enregistrement spécifiés avant l'enregistrement. Cela n'est qu'un exemple. De nombreux autres programmes et bibliothèques peuvent être utilisés en conversion audio.

Note : Il n'est pas recommandé de convertir entre différents formats de compression dits destructeurs ("lossy"). Par exemple, les codecs MP3 et Vorbis suppriment certaines informations du fichier audio original. Ainsi, lorsque vous convertissez un fichier MP3 en Ogg Vorbis, le résultat final sonnera certainement moins bon que l'original.

Conversion entre différents formats vidéos

Il est important de faire une distinction entre Pour le moment, le support des containeurs MPEG et AVI est le plus abouti.

Il existe deux utilitaires populaires, multimedia/transcode et mencoder (qui fait partie de x11/mplayer). Ils utilisent ou peuvent utiliser la bibliothèque libavcodec disponible dans le port graphics/ffmpeg et qui génère un format de sortie de bonne qualité. Vous pouvez bien sûr utiliser ffmpeg directement. Il devrait aussi être possible d'utiliser l'encodeur XviD présent dans multimedia/xvidcore.

La documentation, qui vient avec ces paquetages sous la forme de pages de manuel ou de documents HTML dans /usr/local/share/doc, contient de nombreux exemples, c'est pourquoi il est HAUTEMENT recommandé de lire ces documents.

13.12 - Est-il possible de lire des fichiers en streaming sous OpenBSD ?

Oui, c'est possible. De nombreux streams audio et vidéos fonctionneront sans soucis sur un nombre limité de plates-formes. Certains, quant à eux, ne fonctionneront pas.

Ce document ne représente pas une réponse exhaustive sur la manière de faire fonctionner tous les formats de streaming possibles sur n'importe qu'elle architecture. Tout d'abord, vous devriez vous renseigner sur la technologie de streaming. Quoiqu'un peu daté, le chapitre à propos du streaming tiré du livre "Designing Web Audio" aux éditions O'Reilly représente un bon début.

La première chose à savoir est qu'il existe plusieurs protocoles de streaming. Le protocole de streaming définit la façon dont les flux seront envoyés à travers le réseau. Ils ont été développés afin de garantir une transmission audio/vidéo efficace en temps réel par internet. En bref, le protocole de streaming est un protocole applicatif (niveau 7) capable d'utiliser les protocoles de transport UDP ou TCP (niveau 4). Le protocole de transport UDP ("User Datagram Protocol") convient parfaitement pour ce type d'application puisqu'il n'effectue aucune retransmission de paquets ou autre type de charge réseau. Un certain nombre de protocoles spécialisés mais propriétaires ont été développés, par exemple Microsoft Media Services (MMS - services média de Microsoft) et le Real Time Streaming Protocol (RTSP - protocole de transmission de flux en temps réel). Comme nous le verrons, HTTP (qui utilise TCP) est également parfois utilisé, même s'il ne permet pas de transmettre des flux à une vitesse régulière comme UDP, RTSP et MMS.

Ensuite, il y a le format de streaming qui représente la façon dont les données audio/vidéo ont été organisées et peuvent être lues. Les formats de streaming les plus utilisés sont le MP3, Real Audio (RA, RM) et le Windows Media (ASF) qui sont tous des technologies propriétaires. Parfois, vous rencontrerez certains streams au format Ogg Vorbis.

Pour l'exemple, j'expliquerai, en quelques étapes, comment j'arrive à écouter Radio 1, une des stations radios nationales belges. Sous OpenBSD, les plugins (modules externes) de navigateurs ne sont pas disponibles, ce qui signifie que la mise en place se résume rarement en un "clic et lecture".

Les flux Windows Media (ASF) fonctionneront la plupart du temps bien qu'ils puissent contenir des données aux formats supportés uniquement grâce au port graphics/win32-codecs qui ne tourne que sous i386 ('pkg_info win32-codecs' vous donnera la liste des codecs supportés). Certains flux Real Audio peuvent fonctionner sous i386 en utilisant mplayer en conjonction avec les ports graphics/win32-codecs et emulators/fedora/base (lisez ce fil de la liste de discussion des ports).

13.13 - Puis-je utiliser un plugin Java avec mon navigateur ? (spécifique à i386 & amd64)

Le plugin Java fait partie du kit de développement Java ("Java Development Toolkit" - JDK). Pour des raisons de licence ,OpenBSD ne peut pas distribuer de paquetages binaires du JDK. Cela signifie que vous devrez le compiler à partir des ports. De plus amples informations sur la compilation du JDK sont disponibles dans FAQ 8 - Langages de programmation. Une fois le paquet créé, vous pouvez installer le JDK complet ou simplement l'environnement d'exécution Java ("Java Runtime Environment" - JRE) qui se trouve dans un sous-paquetage et contient le plugin web.

À la fin de l'installation, des instructions seront affichées afin d'utiliser le plugin Java avec Firefox ou un navigateur basé sur Seamonkey. Créez le lien comme expliqué et vous devriez voir le plugin Java lorsque vous entrerez "about:plugins" dans la barre d'adresse.

Pour le navigateur web Konqueror de KDE, le binaire java doit être dans votre PATH, ou son chemin absolu doit être configuré du menu Settings -> Configure Konqueror -> Java & JavaScript. Par défaut le binaire java se trouve dans /usr/local/jre-version/bin/ ou /usr/local/jdk-version/bin/, cela dépend si vous avez installé le JRE ou le JDK.

Remarque : Le support Java a été testé uniquement avec les navigateurs Firefox, Seamonkey et Konqueror. Si il fonctionne bien avec d'autres navigateurs merci de nous le signaler.

13.14 - Puis-je utiliser un plugin Flash avec mon navigateur ?

Le plugin Flash est distribué par Adobe sous forme binaire uniquement. Adobe ne fournit pas de plugin natif pour OpenBSD. Considérant leur passif en sécurité, nous les remercions pour cette négligence.

Si vous cherchez juste à regarder des vidéos flash de sites courants, il y a plusieurs options dans les paquetages, incluant : get_flash_videos, minitube, youtube-dl, get_iplayer et yt. Aussi, le projet Gnash a fait beaucoup de progrès dernièrement, et doit répondre à vos besoins.

[Index de la FAQ] [Section 12 - Questions Spécifiques Aux Plates-Formes Et Au Matériel] [Section 14 - Configuration des disques]


[back] www@openbsd.org
$OpenBSD: faq13.html,v 1.65 2013/05/09 13:43:01 ajacoutot Exp $