Я пытаюсь сделать программу, которая работает как телефонный звонок. Я включил OpenAL libarary. Я успешно слышу голос, который записал как эхо. Но я хочу записывать голос 50 мс и отправлять его через сокет каждые 50 мс. А другой парень должен получить daha баффа из гнезда и сыграть его.
int main()
{
ALCdevice *dev[2];
ALCcontext *ctx;
ALuint source, buffers[3];
char data[5000];
ALuint buf;
ALint val;
float ttotal;
unsigned int ccount;
long int c1ount;
c1ount = 0;
dev[0] = alcOpenDevice(NULL);
ctx = alcCreateContext(dev[0], NULL);
alcMakeContextCurrent(ctx);
alGenSources(1, &source);
alGenBuffers(3, buffers);
/* Setup some initial silent data to play out of the source */
alBufferData(buffers[0], AL_FORMAT_MONO16, data, sizeof(data), 22050);
alBufferData(buffers[1], AL_FORMAT_MONO16, data, sizeof(data), 22050);
alBufferData(buffers[2], AL_FORMAT_MONO16, data, sizeof(data), 22050);
alSourceQueueBuffers(source, 3, buffers);
/* If you don't need 3D spatialization, this should help processing time */
alDistanceModel(AL_NONE);
dev[1] = alcCaptureOpenDevice(NULL, 22050, AL_FORMAT_MONO16, sizeof(data) / 2); //22050 mean 22.050 samples per second. or 44100 for 44.1 per second.
/* Start playback and capture, and enter the audio loop */
alSourcePlay(source);
alcCaptureStart(dev[1]); //starts ring buffer
while (1)
{
/* Check if any queued buffers are finished */
alGetSourcei(source, AL_BUFFERS_PROCESSED, &val);
if (val <= 0)
continue;
/* Check how much audio data has been captured (note that 'val' is the
* number of frames, not bytes) */
alcGetIntegerv(dev[1], ALC_CAPTURE_SAMPLES, 1, &val);
/* Read the captured audio */
alcCaptureSamples(dev[1], data, val);
//***** Process/filter captured data here *****//
c1ount = c1ount + 1;
if (c1ount >= 33) {
break;
}
//for (int ii=0;ii<val;++ii) {
// data[ii]*=0.1; // Make it quieter
//}
//***** end Process/filter captured data here *****//
/* Pop the oldest finished buffer, fill it with the new capture data,
then re-queue it to play on the source */
alSourceUnqueueBuffers(source, 1, &buf);
alBufferData(buf, AL_FORMAT_MONO16, data, val * 2 /* bytes here, not
frames */, 22050);
alSourceQueueBuffers(source, 1, &buf);
/* Make sure the source is still playing */
alGetSourcei(source, AL_SOURCE_STATE, &val);
if (val != AL_PLAYING)
{
alSourcePlay(source);
}
}
cout << "fgggggggg\n";
/* Shutdown and cleanup */
alcCaptureStop(dev[1]);
alcCaptureCloseDevice(dev[1]);
alSourceStop(source);
alDeleteSources(1, &source);
alDeleteBuffers(3, buffers);
alDeleteBuffers(1, &buf);
alcMakeContextCurrent(NULL);
alcDestroyContext(ctx);
alcCloseDevice(dev[0]);
return 0;
}
Я не знаю, как проигрывать звук от баффов, полученных от сокета. Я пытался
alSourceQueueBuffers(source, 1, &buf);
/* Make sure the source is still playing */
alGetSourcei(source, AL_SOURCE_STATE, &val);
if (val != AL_PLAYING)
{
alSourcePlay(source);
}
но это не работает. Я ничего не слышу Спасибо
@ AlgirdasPreidžius Я ничего не слышу
Я забыл упомянуть: пожалуйста, редактировать вопрос с соответствующей информацией вместо того, чтобы добавлять ее в комментарии.
@ AlgirdasPreidžius Так ты не знаешь, как это исправить? Я не сказал, что получил ошибку. Я сказал, что она не работает, значит, я ничего не слышу. Почему ты заботишься об этом. Все понимают, что данные не воспроизводятся, когда читают. Это не работает.
1) «Я не сказал, что получил ошибку, я сказал, что это не работает» Я видел множество людей, которые описывали свои проблемы как «это не работает», когда реальная проблема варьировалась от ошибки компиляции до ошибки сегментации и неправильного вывода, и это как раз проблема такого утверждения. . Это не означает что-нибудь. Мы не ты, поэтому мы не можем сделать вывод, что "не работает" означает для ты. Если вы ничего не слышите - почему вы не можете просто сказать это? Он несет больше смысла, чем «не работает». 2) Если бы я знал ответ - я бы ответил. Я просто попросил разъяснений.
@ AlgirdasPreidžius. Если у вас недостаточно знаний для решения проблемы, нажмите кнопку "Назад", чтобы найти проблемы на уровне элемента. Не трать мое время зря. Спасибо за предупреждения.





"но это не работает." - бесполезное описание проблемы. Пожалуйста, поясните, как, точно, это не работает.