Auteur Sujet: Teensy 3.1, 3.2 - Sonorisation locomotive  (Lu 138184 fois)

Benoit92

  • Full Member
  • ***
  • Messages: 200
    • Voir le profil
Teensy 3.1, 3.2 - Sonorisation locomotive
« le: décembre 23, 2017, 01:38:31 am »
Bonjour,
Je ne sais pas si c'est le bon forum qui semble être dédié à l'Arduino.
Pour les applications gestion moteur et accessoires, l'Arduino Nano fonctionne très bien.
Par contre, pour la gestion de son (données "son" intégrés au code), la capacité mémoire est insuffisante pour générer des sons de qualité.
J'ai donc installé le logiciel de chez PJRC "Teensyduino" qui me permet d'utiliser le même IDE que l'Arduino.

1) Pour coder le son,   il semble qu'il faille passer par "wav2sketch" (au lieu de "EncodeAudio" pour l'Arduino).

Type de fichier son (par exemple) : AudioSampleCashregister.h
// Audio data converted from WAV file by wav2sketch
#include "AudioSampleCashregister.h"

// Converted from cashregister.wav, using 22050 Hz, u-law encoding
const unsigned int AudioSampleCashregister[5809] = {
0x02005AB4,0x82060707,0x03010301,0x08038287,0x81820200,0x09120407,0x15091108,0x02080611,
0x0D050D11,0x8008150C,0x93810480,0x000D8890,0x0A060406,0x06000681,0x80828702,0x89928405,
0x04820983,0x8C860D05,0x880D0004,0x84000B0B,0x8C8D8C8F,0x84829181,0x14860600,0x0A0C080C,
0x84878006,0x908B8B8D,0x0000858D,0x82800710, ....................................
};

2) Ce Header sera intégré dans un fichier *.ino :
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
#include <Bounce.h>

// WAV files converted to code by wav2sketch
#include "AudioSampleSnare.h"        // http://www.freesound.org/people/KEVOY/sounds/82583/
#include "AudioSampleTomtom.h"       // http://www.freesound.org/people/zgump/sounds/86334/
#include "AudioSampleHihat.h"        // http://www.freesound.org/people/mhc/sounds/102790/
#include "AudioSampleKick.h"         // http://www.freesound.org/people/DWSD/sounds/171104/
#include "AudioSampleGong.h"         // http://www.freesound.org/people/juskiddink/sounds/86773/
#include "AudioSampleCashregister.h" // http://www.freesound.org/people/kiddpark/sounds/201159/

// Create the Audio components.  These should be created in the
// order data flows, inputs/sources -> processing -> outputs
//
AudioPlayMemory    sound0;
AudioPlayMemory    sound1;  // six memory players, so we can play
AudioPlayMemory    sound2;  // all six sounds simultaneously
AudioPlayMemory    sound3;
AudioPlayMemory    sound4;
AudioPlayMemory    sound5;
AudioMixer4        mix1;    // two 4-channel mixers are needed in
AudioMixer4        mix2;    // tandem to combine 6 audio sources
AudioOutputI2S     headphones;
AudioOutputAnalog  dac;     // play to both I2S audio board and on-chip DAC

// Create Audio connections between the components
//
AudioConnection c1(sound0, 0, mix1, 0);
AudioConnection c2(sound1, 0, mix1, 1);
AudioConnection c3(sound2, 0, mix1, 2);
AudioConnection c4(sound3, 0, mix1, 3);
AudioConnection c5(mix1, 0, mix2, 0);   // output of mix1 into 1st input on mix2
AudioConnection c6(sound4, 0, mix2, 1);
AudioConnection c7(sound5, 0, mix2, 2);
AudioConnection c8(mix2, 0, headphones, 0);
AudioConnection c9(mix2, 0, headphones, 1);
AudioConnection c10(mix2, 0, dac, 0);

// Create an object to control the audio shield.
//
AudioControlSGTL5000 audioShield;

// Bounce objects to read six pushbuttons (pins 0-5)
//
Bounce button0 = Bounce(0, 5);
Bounce button1 = Bounce(1, 5);  // 5 ms debounce time
Bounce button2 = Bounce(2, 5);
Bounce button3 = Bounce(3, 5);
Bounce button4 = Bounce(4, 5);
Bounce button5 = Bounce(5, 5);


void setup() {
  // Configure the pushbutton pins for pullups.
  // Each button should connect from the pin to GND.
  pinMode(0, INPUT_PULLUP);
  pinMode(1, INPUT_PULLUP);
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);

  // Audio connections require memory to work.  For more
  // detailed information, see the MemoryAndCpuUsage example
  AudioMemory(10);

  // turn on the output
  audioShield.enable();
  audioShield.volume(0.5);

  // by default the Teensy 3.1 DAC uses 3.3Vp-p output
  // if your 3.3V power has noise, switching to the
  // internal 1.2V reference can give you a clean signal
  //dac.analogReference(INTERNAL);

  // reduce the gain on mixer channels, so more than 1
  // sound can play simultaneously without clipping
  mix1.gain(0, 0.4);
  mix1.gain(1, 0.4);
  mix1.gain(2, 0.4);
  mix1.gain(3, 0.4);
  mix2.gain(1, 0.4);
  mix2.gain(2, 0.4);
}

void loop() {
  // Update all the button objects
  button0.update();
  button1.update();
  button2.update();
  button3.update();
  button4.update();
  button5.update();

  // When the buttons are pressed, just start a sound playing.
  // The audio library will play each sound through the mixers
  // so any combination can play simultaneously.
  //
  if (button0.fallingEdge()) {
    sound0.play(AudioSampleSnare);
  }
  if (button1.fallingEdge()) {
    sound1.play(AudioSampleTomtom);
  }
  if (button2.fallingEdge()) {
    sound2.play(AudioSampleHihat);
  }
  if (button3.fallingEdge()) {
    sound3.play(AudioSampleKick);
  }
  if (button4.fallingEdge()) {
    // comment this line to work with Teensy 3.0.
    // the Gong sound is very long, too much for 3.0's memory
    sound4.play(AudioSampleGong);
  }
  if (button5.fallingEdge()) {
    sound5.play(AudioSampleCashregister);
  }

}


3) wav2sketch
Tout est expliqué sur le site ci-dessous ainsi que le lien pour le téléchargement de "wav2sketch.exe"
https://www.pjrc.com/teensy/td_libs_AudioPlayMemory.html

« Modifié: décembre 23, 2017, 02:30:07 pm par Benoit92 »

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3010
  • 100% Arduino et N
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #1 le: décembre 23, 2017, 01:13:01 pm »
Bonjour,
Ca ne traite pas spécifiquement du Teensy, mais plutôt d’un projet.

On pourra le déplacer plus tard.

Bon Noël
Dominique
« Modifié: décembre 23, 2017, 03:12:35 pm par Dominique »
Cordialement,
Dominique

Benoit92

  • Full Member
  • ***
  • Messages: 200
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #2 le: décembre 23, 2017, 03:08:43 pm »
Connaissez-vous la différence entre les 2 mèthodes ?:

1) intégrer directement les données de "son" dans le code (comme train35)
ou
2) intégrer les données "son" dans un fichier xxx.h, puis faire un #include "xxx.h" dans le programme .ino

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3010
  • 100% Arduino et N
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #3 le: décembre 23, 2017, 03:14:28 pm »
Normalement il n’y a pas de différence : le compilateur mettra les données du .h dans le programme.

Le découpage du source en plusieurs fichiers placés dans le même dossier que .ino n’est rien d’autre qu’une organisation plus pratique des codes sources. C’est équivalent à tout mettre dans le même fichier.
« Modifié: décembre 23, 2017, 03:18:35 pm par Dominique »
Cordialement,
Dominique

Benoit92

  • Full Member
  • ***
  • Messages: 200
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #4 le: décembre 28, 2017, 06:05:02 pm »
J'essaye d'avancer sur le Teensy (ça a l'air moins "simple" que l'Arduino).
J'ai repris l'exemple/PlayFromSketch" : https://github.com/lukvog/HUGO/blob/master/libraries/Audio_master/examples/PlayFromSketch/PlayFromSketch.ino comme recommandé sur le forum "PJRC forums".
J'ai enlevé tout ce qui concerne la shield : SGTL5000 audioShield. Sur PJRC, ce circuit, associé avec un teensy permet de réaliser des projets de gestion de sons assez complexes.
Cela donne :
PlayFromSketchV0.ino
// from PlayFromSketch.ino
//#include <output_dac.h>
//#include <output_dacs.h>
//#include <output_pwm.h>
//#include <play_memory.h>
//#include <spi_interrupt.h>
#include "Arduino.h"
#include <Audio.h>
//#include <Wire.h>
//#include <Bounce.h>

// WAV files converted to code by wav2sketch
#include <AudioSampleSnare.h>        // http://www.freesound.org/people/KEVOY/sounds/82583/

// Create the Audio components.  These should be created in the
// order data flows, inputs/sources -> processing -> outputs
AudioPlayMemory    sound0;
AudioOutputAnalog  dac;     // play to both I2S audio board and on-chip DAC

// Create Audio connections between the components
//
AudioConnection c1(sound0,dac);

void setup() {

  // Audio connections require memory to work.  For more
  // detailed information, see the MemoryAndCpuUsage example
  AudioMemory(10);
  analogWriteResolution(12);

  // turn on the output
//  audioShield.enable();
//  audioShield.volume(50);

  // by default the Teensy 3.1 DAC uses 3.3Vp-p output
  // if your 3.3V power has noise, switching to the
  // internal 1.2V reference can give you a clean signal
  //dac.analogReference(INTERNAL);

}

void loop() {
   sound0.play(AudioSampleSnare);

}

AudioSampleSnare.cpp
// Audio data converted from WAV file by wav2sketch
// Converted from AudioSampleSnare.wav, using 22050 Hz, u-law encoding

const unsigned int AudioSampleSnare [2817] = {
0x02002BD3,0x65636656,0x6B6A6B67,0x7071706F,0x43637171,0x29ABBA23,0x3137474C,0x3A4A544D,
0x30C1542C,0xE14F6360,0xEDDCE2E6, ............................................
};

AudioSampleSnare.h
// Audio data converted from WAV file by wav2sketch
extern const unsigned int AudioSampleSnare[2817];

Résultat de la compilation :
C:\Documents\Arduino\PlayFromSketchV0\PlayFromSketchV0.ino:13:92: fatal error: AudioSampleSnare.h: No such file or directory
compilation terminated.
Erreur de compilation pour la carte Teensy 3.2 / 3.1

J'ai fait un certain nombre d'essais, mais je ne vois pas d'où vient l'erreur (certainement une erreur de débutant!) ?
« Modifié: décembre 29, 2017, 11:32:21 am par Benoit92 »

maxou9914

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #5 le: décembre 28, 2017, 11:28:13 pm »
Test en remplaçant  :
#include "AudioSampleSnare.h" 
Par
#include <AudioSampleSnare.h>

J'ai déjà eu le cas où le problème venait de là.

En attente de la suite  ;)

Benoit92

  • Full Member
  • ***
  • Messages: 200
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #6 le: décembre 29, 2017, 12:02:22 am »
J'ai essayé, mais cela donne le même résultat.
Par contre, j'ai lu également sur eskimon.fr dans la rubrique "Organisez votre code en fichiers":
Il peut arriver que le lien avec les symboles/librairies Arduino ne se fasse pas correctement.
Dans ce cas là, rajoutez l’include suivant au début de votre .h ou .cpp : #include "Arduino.h".

Même message d'erreur!

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #7 le: décembre 29, 2017, 09:49:23 am »
C’est normal que le nom du .ino que tu compiles ne soit pas le même que celui dont tu as donné le listing ?
« Modifié: décembre 29, 2017, 09:55:50 am par Dominique »
Cordialement

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3010
  • 100% Arduino et N
    • Voir le profil
Re : Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #8 le: décembre 29, 2017, 09:59:55 am »
Dans ce cas là, rajoutez l’include suivant au début de votre .h ou .cpp : #include "Arduino.h".

Pour programmer un Teensy, c’est sûrement pas très efficace  ;D :o 8)
Cordialement,
Dominique

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #9 le: décembre 29, 2017, 10:05:03 am »
Mais il y a un Arduino.h dans la lib du Teensy Dominique  :)
Cordialement

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3010
  • 100% Arduino et N
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #10 le: décembre 29, 2017, 11:00:36 am »
Et bien j’ai encore appris quelque chose ! Merci Jean-Luc !
Comme dirai ... c’est l’altitude ;)
Je vais regarder ce qu’il y a dedans.

J’ai le temps : 3 semaines à la montagne ;)
Cordialement,
Dominique

Benoit92

  • Full Member
  • ***
  • Messages: 200
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #11 le: décembre 29, 2017, 11:34:31 am »
J'ai repris mon post (ci-dessus) décrivant PlayFromSketch.

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #12 le: décembre 29, 2017, 11:45:01 am »
Juste une question : As tu bien sélectionné Teensy 3.2 / 3.1 dans Outils > Type de carte ?

Parce que je viens de télécharger https://codeload.github.com/lukvog/HUGO/zip/master, https://github.com/lukvog/HUGO, j'ai mis Audio_master dans librairies, relancé l'IDE, sélectionné Fichier > exemples  Audio_master > PlayFromSketch, je n'ai rien changé à l'exemple, et ça compile
Cordialement

Benoit92

  • Full Member
  • ***
  • Messages: 200
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #13 le: décembre 29, 2017, 01:32:35 pm »
Merci Jean-Luc,
J'ai bien choisi le Teensy 3.1 - 3.2 dans l'IDE pour la compilation. Mais, je vais revérifié !
Où as-tu mis les fichiers son "AudioSampleSnare.h", "AudioSampleSnare.cpp",.......... ?

Nota :
En intégrant le fichier son dans le corps du programme, ça compile, mais ce n'est pas très propre !
Opening Teensy Loader...
Le croquis utilise 31668 octets (12%) de l'espace de stockage de programmes. Le maximum est de 262144 octets.
Les variables globales utilisent 9720 octets (14%) de mémoire dynamique, ce qui laisse 55816 octets pour les variables locales. Le maximum est de 65536 octets.
« Modifié: décembre 29, 2017, 01:46:12 pm par Benoit92 »

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Réponse #14 le: décembre 29, 2017, 02:36:19 pm »
J'ai ouvert directement l'exemple

Si tu travailles sur une copie, il faut également copier les fichiers présent dans le répertoire de l'exemple dans le répertoire de ton sketch. Sinon, le compilateur ne trouvera pas ces fichiers
Cordialement