Bonjour à tous,
Voila que depuis que je reussi a enregistrer du son à partir d'un micro je reprend un ancien projet.
Il y a environ un an grace à l'aide précieuse de Mongaulois j'avais réussi à envoyer un son sur le réseau. Alors comme maintenant je sais enregistrer un son du micro je vous le donne en mille je voudrai faire un logiciel de .... voip .

Ceci dit je vois qu'une seule façon de réussir a enregistrer ce que je dis tout en recevant ce que l'autre dis.
C'est pourquoi je pensais enregistrer dans un thread et recevoir dans le thread principal.

Le probleme est quand faisant un truc que j'arrive a faire dans le thread principal, dans le deuxieme thread la lecture du son ne s'effectue pas.

Voila des brides de codes sensibles :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
#include "QThreadCapture.h"
 
 
QThreadCapture::QThreadCapture(QTcpSocket* _socket)
{
  socket=new QTcpSocket(_socket);
}
 
QThreadCapture::~QThreadCapture()
{
  delete socket;
}
 
void QThreadCapture::run()
{
  QOpenAl capture(LOAD);
  QOpenAl play(PLAY);
 
  son=capture.loadSound("ocean.wav");
  std::cout<<"Fin capture"<<std::endl;
  play.playSound(son);
 
}
les fonctions loadSound et playSound :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
void QOpenAl::playSound(vector<ALshort> musique)
{
  ALuint buffer;
 
  //Remplissage avec les echantillons lus
 
  alGenBuffers(1,&buffer);
  alBufferData(buffer,AL_FORMAT_MONO16, &musique[0],musique.size() * sizeof(ALshort),SampleRate);
 
 
  //Mise en attente du buffer
 
  BufferEnAttente.push_back(buffer);
 
  if (alGetError() != AL_NO_ERROR)
    {
      cerr<<"OpenAl erreur : lors de la lecture"<<endl;
      return;
    }
 
   alSourcePlay(*Source);
} 
vector<ALshort> QOpenAl::loadSound(const string& Filename)
{
 
	//librairy sndfile
	//ouverture du fichier audio avec libsndfile
	SF_INFO FileInfos;
	SNDFILE* File = sf_open(Filename.c_str(), SFM_READ, &FileInfos);
	if (!File)
		cerr<<"impossible d'ouvrir le fichier"<<endl;
 
	//Lecture du nombre d'echantillon et taux echantillon
	ALsizei NbSamples = static_cast<ALsizei>(FileInfos.channels * FileInfos.frames);
	SampleRate = static_cast<ALsizei>(FileInfos.samplerate);
 
	//Lecture des echantillon audio au format 16 bits signe
	vector<ALshort> Samples(NbSamples);
	if (sf_read_short(File, &Samples[0], NbSamples)<NbSamples)
		cerr<<"Impossible"<<endl;
 
	//fermeture du fichier 
	sf_close(File);
	//playSound(Samples);
 
	return Samples;
}

Voila merci d'avance.
Bon lundi de pantecote