MSDN.WhiteKnight - Stack Overflow answers
Ответ на "OpenALL С++ Запись и отдельно Проигрывание"
Answer 902777
В первом примере вот эта строка сохраняет данные аудио в массив data:
alcCaptureSamples(dev[1], data, val);
Длительность звука в массиве рассчитывается по формуле
t = (N Samples) / (SampleRate * N Channels)
Размер данных в массиве (в байтах) рассчитывается по формуле:
N Bytes = N Samples * (BitsPerSample / 8)
У вас N Channels = 1 (моно), SampleRate = 22050, BitsPerSample = 16, получаем:
t = val / 22050; N_bytes = val * 2;
Вам нужно объявить массив, размером достаточный для хранения требуемой длительности аудио, допустим, saved_data. После получения каждой порции через alcCaptureSamples накапливаете данные в этом массиве (просто через memcpy копируете в конец массива и сохраняете суммарный размер). Когда длительность достигает требуемого значения, останавливаете цикл, делаете свою обработку, а потом массив с накопленными данными передаете в alBufferData и выполняете код воспроизведения:
alSourceUnqueueBuffers(source, 1, &buf); alBufferData(buf, AL_FORMAT_MONO16, saved_data, N_bytes, 22050); alSourceQueueBuffers(source, 1, &buf);
Есть вот такой пример записи звука на чистом WASAPI, возможно будет полезен. Правда, там сохранение сразу в файл сделано, а не в массив.
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.