Parlons Arduino > Composants
Teensy 3.1, 3.2 - Sonorisation locomotive
Benoit92:
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
--- Code: ---// 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, ....................................
};
--- Fin du code ---
2) Ce Header sera intégré dans un fichier *.ino :
--- Code: ---#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);
}
}
--- Fin du code ---
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
Dominique:
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
Benoit92:
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
--- Code: ---#include "xxx.h"
--- Fin du code ---
dans le programme .ino
Dominique:
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.
Benoit92:
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
--- Code: ---// 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);
}
--- Fin du code ---
AudioSampleSnare.cpp
--- Code: ---// 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, ............................................
};
--- Fin du code ---
AudioSampleSnare.h
--- Code: ---// Audio data converted from WAV file by wav2sketch
extern const unsigned int AudioSampleSnare[2817];
--- Fin du code ---
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!) ?
Navigation
[#] Page suivante
Utiliser la version classique