1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
#include "stdafx.h"
#include "bass.h"
#include "bassmix.h"
#include <sstream>
#include <string>
#include <iostream>
#include <random>
#include <time.h>
class Play_list {
private:
int rand_a_b(int a, int b);
int* init_tableau(int a, int b);
void melanger(int* tableau, int taille);
std::string new_file_audio(std::string P_playlist, char P_separateur);
void CALLBACK SyncProc(HSYNC handle, DWORD channel, DWORD data, void *user);
std::string m_liste_fichier_audio;
int m_nombre_fichier_audio; // Nombre total de fichiers audio dans la play list
int* m_tab_playlist; // Tableau d'ordre de lecture de la playlist
int cpt_tab; // Position interne de parcours de la playlist
public:
void SynchroPlaylist(DWORD P_HDMixer, DWORD P_Flags, QWORD P_Param, DWORD P_Nb_File_audio, const char *P_PlayList, DWORD P_len_char, BOOL P_Lect_alea);
int m_position_actuelle; // Position actuelle de lecture dans le tableau
DWORD m_mixer;
DWORD m_source;
};
....
.....
// FUNCTION DE CALLBACK SPECIFIQUE BASS
//-------------------------------------
void CALLBACK Play_list::SyncProc(HSYNC handle, DWORD channel, DWORD data, void *user)
{
HSTREAM l_next_stream=0;
BOOL L_Return;
std::string l_fic_audio = new_file_audio(m_liste_fichier_audio,';');
l_next_stream = BASS_StreamCreateFile(false,l_fic_audio.c_str(),0,0,BASS_STREAM_DECODE|BASS_SAMPLE_FLOAT);
L_Return = BASS_Mixer_StreamAddChannel(m_mixer, l_next_stream, BASS_STREAM_AUTOFREE|BASS_MIXER_NORAMPIN);
L_Return = BASS_ChannelSetPosition(m_mixer,0,BASS_POS_BYTE);
}
void Play_list::SynchroPlaylist(DWORD P_HDMixer, DWORD P_Flags, QWORD P_Param, DWORD P_Nb_File_audio, const char *P_PlayList, DWORD P_len_char, BOOL P_Lect_alea)
{
srand(time(NULL));
m_liste_fichier_audio = P_PlayList;
m_nombre_fichier_audio = P_Nb_File_audio;
m_tab_playlist=init_tableau(1,P_Nb_File_audio);
...
std::string First_Fic_Audio = new_file_audio(m_liste_fichier_audio,';');
m_mixer = BASS_Mixer_StreamCreate(44100,2,BASS_MIXER_END);
BASS_ChannelSetSync(m_mixer,BASS_SYNC_END|BASS_SYNC_MIXTIME,0,Play_list::SyncProc,0);
m_source = BASS_StreamCreateFile(false,First_Fic_Audio.c_str(),0,0,BASS_STREAM_DECODE|BASS_SAMPLE_FLOAT); //1st file open
BASS_Mixer_StreamAddChannel(m_mixer,m_source,BASS_STREAM_AUTOFREE);
} |
Partager