Chargement...
 
Skip to main content

4 - Toutes les autres applications, les émulateurs...


[RÉSOLU] Audio Kontrol 1 en usb2 ça marche !! [PATCH]

Articles: 649 France
Bonsoir !

j'ai acheté il y a quelques temps une Audio Kontrol1 de chez Native instrument. Jusque là ça marchouillait. En fait j'avais de gros problèmes avec certains logiciels qui utilisent le midi, mais pas tous. Exemple : Rosegarden, puredata qui faisaient systématiquement planter jack, et obligation de redémarrer le systeme... un peu relou comme situation.

J'ai trouvé quelqu'un avec le meme soucis que moi sur la mailing liste LAU (linux audio user), et on a donc envoyé un mail aux développeurs qui nous ont tout de suite proposé un patch.
Le problème est maintenant résolu. Il y a encore quelques message d'erreurs dans le output de la commande "dmesg" mais en tout cas maintenant j'arrive à utiliser pure data et rosegarden sans problème. Donc le soucis majeur à disparu. Je poste ici le patch à appliqué.
(ps : Moi la fonction patch -p1 < .... n'a pas fonctionné donc j'ai modifié les fichiers directement à la main. Pensez à faire une copie de sauvegarde du fichier à modifier)

Merci à Takashi Iwai (developpeur du patch) et Daniel Mack un des principal développeur aussi pour ce driver.

__(remplacer les moins moins moins par 3 signe "-" (soustraction) sans espace entre chaque...
Je n'ai pas réussi à trouver comment faire pour insérer du code...)__


moinsmoinsmoins
diff --git a/sound/usb/caiaq/caiaq-device.h b/sound/usb/caiaq/caiaq-device.h
index f9fbdba..ab56e73 100644
moinsmoinsmoins a/sound/usb/caiaq/caiaq-device.h
+++ b/sound/usb/caiaq/caiaq-device.h
@@ -75,6 +75,7 @@ struct snd_usb_caiaqdev {
wait_queue_head_t ep1_wait_queue;
wait_queue_head_t prepare_wait_queue;
int spec_received, audio_parm_answer;
+ int midi_out_active;

char vendor_nameCAIAQ_USB_STR_LEN;
char product_nameCAIAQ_USB_STR_LEN;
diff --git a/sound/usb/caiaq/caiaq-midi.c b/sound/usb/caiaq/caiaq-midi.c
index 30b57f9..f19fd36 100644
moinsmoinsmoins a/sound/usb/caiaq/caiaq-midi.c
+++ b/sound/usb/caiaq/caiaq-midi.c
@@ -59,6 +59,11 @@ static int snd_usb_caiaq_midi_output_open(struct snd_rawmidi_substream *substrea

static int snd_usb_caiaq_midi_output_close(struct snd_rawmidi_substream *substream)
{
+ struct snd_usb_caiaqdev *dev = substream->rmidi->private_data;
+ if (dev->midi_out_active) {
+ usb_kill_urb(&dev->midi_out_urb);
+ dev->midi_out_active = 0;
+ }
return 0;
}

@@ -69,7 +74,8 @@ static void snd_usb_caiaq_midi_send(struct snd_usb_caiaqdev *dev,

dev->midi_out_buf0 = EP1_CMD_MIDI_WRITE;
dev->midi_out_buf1 = 0; /* port */
- len = snd_rawmidi_transmit_peek(substream, dev->midi_out_buf+3, EP1_BUFSIZE-3);
+ len = snd_rawmidi_transmit(substream, dev->midi_out_buf + 3,
+ EP1_BUFSIZE - 3);

if (len midi_out_urb, GFP_ATOMIC);
if (ret < 0)
- log("snd_usb_caiaq_midi_send(%p): usb_submit_urb() failed, %d\n",
- substream, ret);
+ log("snd_usb_caiaq_midi_send(%p): usb_submit_urb() failed,"
+ "ret=%d, len=%d\n",
+ substream, ret, len);
+ else
+ dev->midi_out_active = 1;
}

static void snd_usb_caiaq_midi_output_trigger(struct snd_rawmidi_substream *substream, int up)
{
struct snd_usb_caiaqdev *dev = substream->rmidi->private_data;

- if (dev->midi_out_substream != NULL)
- return;
-
- if (!up) {
+ if (up) {
+ dev->midi_out_substream = substream;
+ if (!dev->midi_out_active)
+ snd_usb_caiaq_midi_send(dev, substream);
+ } else {
dev->midi_out_substream = NULL;
- return;
}
-
- dev->midi_out_substream = substream;
- snd_usb_caiaq_midi_send(dev, substream);
}


@@ -161,16 +167,14 @@ int snd_usb_caiaq_midi_init(struct snd_usb_caiaqdev *device)
void snd_usb_caiaq_midi_output_done(struct urb* urb)
{
struct snd_usb_caiaqdev *dev = urb->context;
- char *buf = urb->transfer_buffer;

+ dev->midi_out_active = 0;
if (urb->status != 0)
return;

if (!dev->midi_out_substream)
return;

- snd_rawmidi_transmit_ack(dev->midi_out_substream, buf2);
- dev->midi_out_substream = NULL;
snd_usb_caiaq_midi_send(dev, dev->midi_out_substream);
}



Articles: 28 Belgique
Salut,

Sous Ubuntu Jaunty, j'ai énormément d'xruns, quelquesoit la configuration de Jack (de 128 à 512 échantillons par buffer, 2 ou 3 buffers).

Il y a eu certaines mises à jour pour ALSA v.1.0.19 qui n'est pas utilisé pour Jaunty:
http://www.alsa-project.org/main/index.php/Changes_v1.0.18_v1.0.19#USB_caiaq

Et toi, tu as testé?

Quelle était ta configuration stable jusque-là?

Mr°FrEeZe
Articles: 649 France
Salut,

Sous Ubuntu Jaunty, j'ai énormément d'xruns, quelquesoit la configuration de Jack (de 128 à 512 échantillons par buffer, 2 ou 3 buffers).

Il y a eu certaines mises à jour pour ALSA v.1.0.19 qui n'est pas utilisé pour Jaunty:
http://www.alsa-project.org/main/index.php/Changes_v1.0.18_v1.0.19#USB_caiaq

Et toi, tu as testé?

Quelle était ta configuration stable jusque-là?

Mr°FrEeZe


Salut,
En fait le patch que j'ai fourni c'est justement celui qui fait passer de alsa0.18 à alsa0.19.
Donc, à moins de patcher la 0.18 ou d'avoir la 0.19 tu auras sans doute des soucis.

Maintenant j'ai toujours un peu de problèmes avec cette cartes, mais je les ai plus ou moins résolu en utilisant Jack2 (jackmp) avec l'option -S ce qui donne un truc du genre :

jackd -R -S -dalsa -dhw:1 ....

Le -S doit etre avant la déclaration du backend.
J'avais essayer de résoudres mes soucis de xruns avec Stephane Letz (le développeur de jack2), et selon lui, il y a un soucis de synchronisation (ne m'en demande pas plus). Le "-S" permet de forcer la synchro. J'imagine qu'au niveau performance on doit perdre un peu mais comparé à tout ce que j'ai gagné à coté....

Depuis j'ai plus de xruns et c'est relativement stable.
La version 0.19 d'alsa corrige surtout des soucis avec le midi il me semble.

Voila en espérant que ça puisse t'aider.