IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Signal Discussion :

Faire varier continuellement la fréquence d'échantillonnage d'une sortie audio


Sujet :

Signal

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2023
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Faire varier continuellement la fréquence d'échantillonnage d'une sortie audio
    Bonjour,
    Passionné de trains miniatures, je voudrais réaliser un bruiteur vapeur à partir d'enregistrements de locomotives réelles. Pour cela je veux modifier de façon continue la fréquence d'échantillonnage de l'echantillon sonore, par exemple en introduisant une fonction fs(n). Peut-on modifier dynamiquement le paramètre fs dans la fonction matlab sound pendant la lecture de l'échantillon ? en créant un handle? en utilisant simulink et dsp-toolbox, ce qui me parrait etre une solution bien compliquée
    J'ai réalisé un petit morceau de code avec la fonction resample que voici.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    mp3filename = 'D:\Documents\MATLAB\Enveloppe\vapeur-SF.mp3';
    wavFileName = 'D:\Documents\MATLAB\Enveloppe\vapeur-SF.wav';
     
    signal   = audioread(mp3filename);
    info = audioinfo(mp3filename);
    Fs = info.SampleRate;
     
    x1=resample(signal,1,2);
    x2=resample(signal,2,1);
    x3=resample(signal,3,1);
     
    somme=[x3(1:200000) x2(1:200000) signal(1:200000)];
     
    soundsc(somme,Fs);
    J'attends vos suggestions et idées

    Emmanuel,

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 34
    Points : 30
    Points
    30
    Par défaut
    Bonjour, pourquoi changer la fréquence d'échantillonage du fichier? Cela va uniquement modifier la hauteur du son.
    Si c'est le but recherché,pourquoi ne pas faire un pitch (Je ne connais pas matlab) ?
    https://fr.mathworks.com/help/audio/ref/shiftpitch.html

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Juillet 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Juillet 2014
    Messages : 46
    Points : 111
    Points
    111
    Par défaut
    Le ré-échantillonnage, conjugué à la restitution à une fréquence d'échantillonnage différente, va conduire à une transposition de fréquence, ou pitch-shifting. Ex : l'original est à 44100, je ré-échantillonne à 46000 et je le joue à 44100 -> il aurait baissé en fréquence du rapport 46000/44100. C'est comme ralentir le plateau du tourne-disque.

    Je ne suis pas persuadé que c'est ce que vous voulez. La dernière fois que j'ai entendu une locomotive à vapeur démarrer, c'était plutôt tccccccccch tccccccch tccch tch tch. Ça c'est une expansion/compression temporelle à hauteur constante, ou time-stretching. Dans ce cas : https://www.mathworks.com/help/audio...etchaudio.html

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2023
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Augmenter la vitesse de MATLAB LIVE
    Bonjour,
    Merci pour vos deux réponses, et désolé pour mon retard. Suite à la réponse de gouxosor, j'ai découvert MATLAB live, et j'ai fait un petit script très simple, toujours pour ma locomotive à vapeur, que je vous joins. Lorsque je déplace le curseur, le rythme de locomotive à vapeur varie effectivement bien, mais il y a un "silence" un "blanc" à chaque déplacement du curseur, ce qui ne me convient pas. Les caractéristiques de mon PC sont les suivantes: ASUS DESKTOP-44KS5K9 Core I7 3.07 GHz 6GO de RAM
    Comment peut-on supprimer ce blanc à chaque déplacement du curseur? En écrivant un sous programme en langage C ou autre? ou y a t'il une solution plus simple? Merci d'avance pour vos réponses et j'essayerai d'être plus réactif la prochaine fois

    Emmanuel,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    %Read in the first 11.5 seconds of an audio file and listen to it.
     
    mp3filename = 'D:\Documents\MATLAB\Enveloppe\vapeur-SF.mp3';
    wavFileName = 'D:\Documents\MATLAB\Enveloppe\vapeur-SF.wav'
     
    [audioIn,fs]   = audioread(mp3filename);
     
     
    Fsample = 39500; % Le curseur pour faire varier la fréquence d'échantillonnage se trouve ici
     
    player = audioplayer(audioIn,Fsample);
     
    play(player)

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Juillet 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Juillet 2014
    Messages : 46
    Points : 111
    Points
    111
    Par défaut
    Il y a des blancs parce que le script est ré-exécuté depuis le début. La re-lecture du fichier son, la ré-ouverture du pilote audio, sans compter d'autres opérations internes à MATLAB, prennent du temps.

    Faire varier le fréquence d'audioplayer est équivalent à appliquer resample avant d'appeller audioplayer à fréquence constante. Votre premier script est la voie à suivre, sauf que vous avez oublié le ; dans le calcul de la somme. Faites un whos signal pour constater que c'est un vecteur colonne.

    resample(x,p,q) effectue un ré-échantillonnage d'un facteur p/q. Il commence par sur-échantillonner d'un facteur p puis sous-échantillonne d'un facteur q. L'astuce est donc de trouver un rationnel au plus proche du facteur désiré. Ça nous conduit vers la fonction rat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [signal,fs] = audioread ('Coin.wav');
    somme = [ ];
     
    for f = [ 30000 32000 34000 36000 38000 40000 ]
     
    	[n d] = rat (fs/f);
    	transpose = resample (signal,n,d);
     
    	# Les vecteurs audio sont des vecteurs colonne
    	somme  = [ somme ; transpose ];
     
    end
     
    sound (somme,fs);
    C'est exactement comme si vous jouiez l'original à 30000Hz, puis à 32000, etc.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2023
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Comment éviter les "blancs" lors d 'une modification de la fréquence d'échantillonnage
    Merci jyber pour votre réponse,
    En fait mon vrai problème est de faire varier, avec la souris, ou des touches du clavier de façon dynamique et aléatoire la fréquence d'échantillonnage du signal audio sans faire apparaitre de "blancs" dont vous m'avez donné les raisons dans votre
    message.
    Je voudrais savoir si on peut remplacer l'instruction soundsc par un sous programme en C ou en python, où le pilote ne serait pas réouvert à chaque fois
    Mais peut être est-il plus simple de faire directement un programme en C ou en python et d'oublier matlab, mais je n'en n'ai pas les compétences et vous?

    Je vous remercie d'avance pour votre réponse efficace,

    Amicalement,

    Emmanuel

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Juillet 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Juillet 2014
    Messages : 46
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par manu_espagne Voir le message
    En fait mon vrai problème est de faire varier, avec la souris, ou des touches du clavier de façon dynamique et aléatoire la fréquence d'échantillonnage du signal audio sans faire apparaitre de "blancs" dont vous m'avez donné les raisons dans votre message.
    Malgré l'existence de MATLAB Live, MATLAB n'est pas un environnement temp-réel. C'est plutôt le domaine de SIMULINK ou autres applications DSP (Max-MSP, Reaktor, ...). Elle construisent un programme qui s'exécute en boucle sur des signaux infinis (disons non-bornés dans le temps) et permettent l'interaction en temps-réel.

    Le prix peut être un obstacle. Je vous suggère d'aller voir du côté de Processing https://processing.org/ . Ça sort du cadre de ce forum.

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/02/2015, 10h26
  2. Réponses: 1
    Dernier message: 21/07/2006, 12h11
  3. [FLASH 8] Faire varier l'alpha d'un bouton
    Par mathieu_t dans le forum Flash
    Réponses: 2
    Dernier message: 14/06/2006, 13h06
  4. [VBA-E]Faire varier la couleur d'une cellule
    Par benoue dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 24/03/2006, 16h38
  5. [vba] Faire varier un contrôle?
    Par decour dans le forum Access
    Réponses: 5
    Dernier message: 28/10/2005, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo