nouveaux sons

This commit is contained in:
antpoms 2025-06-14 17:47:10 +02:00
parent 5c65b99604
commit 4bbdbfe6e4
62 changed files with 51 additions and 67 deletions

View file

@ -25,67 +25,70 @@ AudioEmitter::AudioEmitter() {
system.reset(rawSystem);
ERRCHECK(system->init(512, FMOD_INIT_NORMAL, nullptr));
std::vector<FMOD::Sound *> rawChords(7);
ERRCHECK(system->createSound("media/accords/do.wav", FMOD_LOOP_OFF, nullptr,
std::vector<FMOD::Sound *> rawChords(14);
printf("coucou\n");
ERRCHECK(system->createSound("media/chords/variation1/C.mp3", FMOD_LOOP_OFF, nullptr,
&rawChords[0]));
ERRCHECK(system->createSound("media/accords/re.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/chords/variation1/D.mp3", FMOD_LOOP_OFF, nullptr,
&rawChords[1]));
ERRCHECK(system->createSound("media/accords/mi.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/chords/variation1/E.mp3", FMOD_LOOP_OFF, nullptr,
&rawChords[2]));
ERRCHECK(system->createSound("media/accords/fa.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/chords/variation1/F.mp3", FMOD_LOOP_OFF, nullptr,
&rawChords[3]));
ERRCHECK(system->createSound("media/accords/sol.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/chords/variation1/G.mp3", FMOD_LOOP_OFF, nullptr,
&rawChords[4]));
ERRCHECK(system->createSound("media/accords/la.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/chords/variation1/A.mp3", FMOD_LOOP_OFF, nullptr,
&rawChords[5]));
ERRCHECK(system->createSound("media/accords/si.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/chords/variation1/B.mp3", FMOD_LOOP_OFF, nullptr,
&rawChords[6]));
for (int i = 0; i < 7; i += 1) {
ERRCHECK(system->createSound("media/chords/variation2/C.mp3", FMOD_LOOP_OFF, nullptr,
&rawChords[7]));
ERRCHECK(system->createSound("media/chords/variation2/D.mp3", FMOD_LOOP_OFF, nullptr,
&rawChords[8]));
ERRCHECK(system->createSound("media/chords/variation2/E.mp3", FMOD_LOOP_OFF, nullptr,
&rawChords[9]));
ERRCHECK(system->createSound("media/chords/variation2/F.mp3", FMOD_LOOP_OFF, nullptr,
&rawChords[10]));
ERRCHECK(system->createSound("media/chords/variation2/G.mp3", FMOD_LOOP_OFF, nullptr,
&rawChords[11]));
ERRCHECK(system->createSound("media/chords/variation2/A.mp3", FMOD_LOOP_OFF, nullptr,
&rawChords[12]));
ERRCHECK(system->createSound("media/chords/variation2/B.mp3", FMOD_LOOP_OFF, nullptr,
&rawChords[13]));
for (int i = 0; i < 14; i += 1) {
chords.push_back(std::unique_ptr<FMOD::Sound>(rawChords[i]));
}
int nbr_drums = 3;
std::vector<FMOD::Sound *> rawDrums(nbr_drums);
ERRCHECK(system->createSound("media/percussions/drums1.wav", FMOD_LOOP_OFF,
nullptr, &rawDrums[0]));
ERRCHECK(system->createSound("media/percussions/drums2.wav", FMOD_LOOP_OFF,
nullptr, &rawDrums[1]));
ERRCHECK(system->createSound("media/percussions/drums3.wav", FMOD_LOOP_OFF,
nullptr, &rawDrums[2]));
for (int i = 0; i < nbr_drums; i += 1) {
drums.push_back(std::unique_ptr<FMOD::Sound>(rawDrums[i]));
}
std::vector<FMOD::Sound *> rawNotes(15);
ERRCHECK(system->createSound("media/notes/A1.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/notes/A1.mp3", FMOD_LOOP_OFF, nullptr,
&rawNotes[0]));
ERRCHECK(system->createSound("media/notes/B1.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/notes/B1.mp3", FMOD_LOOP_OFF, nullptr,
&rawNotes[1]));
ERRCHECK(system->createSound("media/notes/C1.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/notes/C1.mp3", FMOD_LOOP_OFF, nullptr,
&rawNotes[2]));
ERRCHECK(system->createSound("media/notes/D1.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/notes/D1.mp3", FMOD_LOOP_OFF, nullptr,
&rawNotes[3]));
ERRCHECK(system->createSound("media/notes/E1.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/notes/E1.mp3", FMOD_LOOP_OFF, nullptr,
&rawNotes[4]));
ERRCHECK(system->createSound("media/notes/F1.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/notes/F1.mp3", FMOD_LOOP_OFF, nullptr,
&rawNotes[5]));
ERRCHECK(system->createSound("media/notes/G1.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/notes/G1.mp3", FMOD_LOOP_OFF, nullptr,
&rawNotes[6]));
ERRCHECK(system->createSound("media/notes/A2.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/notes/A2.mp3", FMOD_LOOP_OFF, nullptr,
&rawNotes[7]));
ERRCHECK(system->createSound("media/notes/B2.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/notes/B2.mp3", FMOD_LOOP_OFF, nullptr,
&rawNotes[8]));
ERRCHECK(system->createSound("media/notes/C2.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/notes/C2.mp3", FMOD_LOOP_OFF, nullptr,
&rawNotes[9]));
ERRCHECK(system->createSound("media/notes/D2.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/notes/D2.mp3", FMOD_LOOP_OFF, nullptr,
&rawNotes[10]));
ERRCHECK(system->createSound("media/notes/E2.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/notes/E2.mp3", FMOD_LOOP_OFF, nullptr,
&rawNotes[11]));
ERRCHECK(system->createSound("media/notes/F2.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/notes/F2.mp3", FMOD_LOOP_OFF, nullptr,
&rawNotes[12]));
ERRCHECK(system->createSound("media/notes/G2.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/notes/G2.mp3", FMOD_LOOP_OFF, nullptr,
&rawNotes[13]));
ERRCHECK(system->createSound("media/notes/A3.wav", FMOD_LOOP_OFF, nullptr,
ERRCHECK(system->createSound("media/notes/A3.mp3", FMOD_LOOP_OFF, nullptr,
&rawNotes[14]));
for (int i = 0; i < 15; i += 1) {
notes.push_back(std::unique_ptr<FMOD::Sound>(rawNotes[i]));
@ -195,7 +198,7 @@ AudioEmitter::AudioEmitter() {
}
FMOD::Sound *metronome_Sound;
ERRCHECK(system->createSound("media/notes/A1.wav", FMOD_DEFAULT, nullptr,
ERRCHECK(system->createSound("media/notes/A1.mp3", FMOD_DEFAULT, nullptr,
&metronome_Sound));
ERRCHECK(system->playSound(metronome_Sound, nullptr, true, &timer));
ERRCHECK(timer->setVolume(0));
@ -264,18 +267,6 @@ int AudioEmitter::nextNote(int currentNote) {
return sampleIndex(markov_matrix_melody[currentNote]);
}
int AudioEmitter::noteSecondaire(int note) {
std::vector<int> notesPossibles = {note - 4, note - 3, note + 3, note + 4,
note + 5};
std::vector<double> proba = {0.05, 0.10, 0.60, 0.05, 0.2};
for (int i = 0; i < proba.size(); i += 1) {
if ((notesPossibles[i] < 0) || (notesPossibles[i] >= notes.size())) {
proba[i] = 0;
}
}
return randomWeightedChoice(notesPossibles, proba);
}
/**
* generate music
*
@ -299,7 +290,7 @@ std::vector<std::pair<float, int>> AudioEmitter::generateMusic() {
for (int i = 1; i < 4; i += 1) {
chordProgression[i] = nextChord(chordProgression[i - 1]);
}
int index_drums = rand() % 3;
for (int i = current_beat; i < current_beat + nbr_melo_max; i += 1) {
// Chords
FMOD::Channel *channelChords = nullptr;
@ -313,14 +304,6 @@ std::vector<std::pair<float, int>> AudioEmitter::generateMusic() {
ERRCHECK(channelChords->setPaused(false));
activeChannels.push_back(channelChords);
// Drums
FMOD::Channel *channelDrums = nullptr;
ERRCHECK(system->playSound(drums[index_drums].get(), nullptr, true,
&channelDrums));
ERRCHECK(channelDrums->setDelay(delay, 0, true));
ERRCHECK(channelDrums->setPaused(false));
activeChannels.push_back(channelDrums);
// Mélodie
std::vector<float> rythme_melodie = rythmes[rand() % rythmes.size()];
for (float time : rythme_melodie) {
@ -333,8 +316,8 @@ std::vector<std::pair<float, int>> AudioEmitter::generateMusic() {
(unsigned long long)(note_start * sampleRate);
ERRCHECK(channelNote->setDelay(delayNote, 0, true));
ERRCHECK(channelNote->setPaused(false));
index_note = nextNote(index_note);
result.push_back(std::pair<float, int>(note_start, index_note));
index_note = nextNote(index_note);
activeChannels.push_back(channelNote);
}
}