OpenAL TCP Audio Streaming C++ WINDOWS

Я пытаюсь сделать программу, которая работает как телефонный звонок. Я включил 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);
    }

но это не работает. Я ничего не слышу Спасибо

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

Algirdas Preidžius 12.03.2018 15:55

@ AlgirdasPreidžius Я ничего не слышу

İsmet Bn 12.03.2018 15:57

Я забыл упомянуть: пожалуйста, редактировать вопрос с соответствующей информацией вместо того, чтобы добавлять ее в комментарии.

Algirdas Preidžius 12.03.2018 15:59

@ AlgirdasPreidžius Так ты не знаешь, как это исправить? Я не сказал, что получил ошибку. Я сказал, что она не работает, значит, я ничего не слышу. Почему ты заботишься об этом. Все понимают, что данные не воспроизводятся, когда читают. Это не работает.

İsmet Bn 12.03.2018 16:02

1) «Я не сказал, что получил ошибку, я сказал, что это не работает» Я видел множество людей, которые описывали свои проблемы как «это не работает», когда реальная проблема варьировалась от ошибки компиляции до ошибки сегментации и неправильного вывода, и это как раз проблема такого утверждения. . Это не означает что-нибудь. Мы не ты, поэтому мы не можем сделать вывод, что "не работает" означает для ты. Если вы ничего не слышите - почему вы не можете просто сказать это? Он несет больше смысла, чем «не работает». 2) Если бы я знал ответ - я бы ответил. Я просто попросил разъяснений.

Algirdas Preidžius 12.03.2018 16:08

@ AlgirdasPreidžius. Если у вас недостаточно знаний для решения проблемы, нажмите кнопку "Назад", чтобы найти проблемы на уровне элемента. Не трать мое время зря. Спасибо за предупреждения.

İsmet Bn 12.03.2018 16:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
125
0

Другие вопросы по теме