Если я хорошо понял, здесь есть два вопроса.
Можно ли воспроизводить звук на двух или более устройствах вывода звука одновременно и как это достичь?
Возможно ли зацикливание данных через устройство ввода аудиосигнала (записи) так, что оно воспроизводится на соответствующем мониторе, например, отправленном через аудиопоток Skype вашему партнеру в вашем соответствующем случае.
Ответ на 1: Это абсолютно устроиства возможно, но все независимые аудиовыходы вашей системы может воспроизводить звуки одновременно. Например, некоторые профессиональные аудиоинтерфейсы (для производства музыки) имеют 8, 16, 64 независимых выхода, из которых все могут воспроизводиться одновременно. Это означает, что каждое устройство вывода поддерживает свой собственный буфер, который он потребляет независимо (кроме параллелизма в конечной разделяемой памяти для подачи буфера).
Как?
Большинство аудио-фреймворков/систем предоставляют функции, позволяющие получить «дескриптор устройства», в котором вам понадобится передать обратный вызов для подачи буфера с образцами (например, Open AL). Это будет вызываться независимо и асинхронно с помощью фреймворка/системы (в конечном счете, драйверов звуковых устройств). Так как это все работает асинхронно, вам не обязательно нужно многопоточность. Все, что вам нужно сделать в принципе, это поддерживать два (или более) аудиоустройства устройства вывода звука, каждый из которых использует отдельный обратный вызов для подачи двух (или более) отдельных устройств.
Примечание Вы также можете воспроизводить несколько звуков на одном устройстве. Большинство устройств/систем допускают такой «обмен ресурсами».На самом деле, это одна из целей, для которой фактически созданы звуковые карты. Смешать все звуки, создаваемые различными программами (и, следовательно, снять эту тяжелую нагрузку с CPU). Когда вы используете одно (физическое) устройство для воспроизведения нескольких звуков, концепция такая же, как и для нескольких устройств. Для каждого звука вы получаете логический дескриптор устройства. Только то, что эти дескрипторы относятся к нескольким «каналам» одного физического устройства.
Что вы должны использовать?
Open AL кажется, немного похож на использовании тяжелой артиллерии для этой простой задачи, я бы сказал (так как вы не хотите что много портативности, и, вероятно, не планирует реализовать свой собственный кодек и эффекты;))
Я бы порекомендовал вам использовать Qt здесь. Он очень портативный (Win/Mac/Linux), и у него есть очень удобный класс, который сделает вашу работу: http://qt-project.org/doc/qt-5.0/qtmultimedia/qaudiooutput.html
Посмотрите пример в документации, чтобы посмотреть, как играть в WAV-файл, с несколькими строки кода. Чтобы воспроизводить несколько файлов WAV одновременно, вам просто нужно открыть несколько QAudioOutput (в основном, вывести код из примера в функцию и называть его так часто, как вы хотите). Обратите внимание, что вам нужно закрыть/остановить QAudioOutput, чтобы звук переставал воспроизводиться.
Ответ на 2: То, что вы хотите сделать, называется loopback. Только очень ограниченное количество звуковых карт, например, аудиоустройства, обеспечивают так называемое устройство ввода петли, что позволяет записывать то, что в настоящее время выводится с помощью основного выходного сочетания звуковой карты, например. Тем не менее, даже такое устройство предоставлено, оно не позволит вам ничего проталкивать в устройство ввода микрофона. Устройство ввода микрофона принимает данные только от микрофонного D/A преобразователя. Это глубоко в H/W, вы не можете ничего смешать на своем уровне.
Это будет очень тяжело (IMHO практически невозможно), чтобы Skype отправил ваш звук стандартной настройке вашему партнеру по разговору. Единственное, что я могу придумать, - это иметь аудиоустройство с возможностями loopback (или просто физическое кабельное соединение с возможной линейкой мониторов на любую строку записи), и затем Skype настроен на использование этого устройства с обратной связью в качестве входного , Тем не менее, Skype не будет забрать с микрофона больше, а значит, вы не будете иметь разговор;)
Примечание: Когда мы говорим «одновременного» воспроизведения здесь, речь идет о синхронизации воспроизведения двух звуков, как обеспокоены восприятие в реальном времени (в диапазоне 10-20 мс). Мы не смотрим на фактическую синхронизацию на уровне выборки, а также связанные с ними проблемы с джиттером и фазовым сдвигом, возникающие при передаче звука на два физических устройства с двумя независимыми (свободными работающими) часами. Таким образом, когда приложение требует генерации фазового сигнала на независимых устройствах, необходимы механизмы восстановления часов, которые могут предоставляться драйверами или ОС.
Примечание: Программное обеспечение виртуального аудио устройства, такое как Virtual Audio Cable, обеспечит виртуальные устройства для обеспечения функциональности loopback в Windows. Такие среды, как Jack Audio, могут быть одинаковыми в среде UX.
Кроме того, я даже не знаю, где это отправило, не говоря уже, если она размещена правильно. Если он не в нужном месте, я был бы признателен за его перемещение. Благодарю. – Malkierian