AudioStreamGeneratorPlayback
Очередь стерео PCM для одного воспроизведения генератора.
Получайте объект у запущенного AudioStreamPlayer с AudioStreamGenerator. Кадр Vector2 содержит левый и правый каналы; это не пара времени и частоты.
GetFramesAvailable показывает свободное место. PushBuffer принимает весь блок или отказывает; bool сообщает о записи в очередь, не о завершении воспроизведения. При нехватке входа микшер дополняет звук нулями и увеличивает GetSkips.
ClearBuffer разрешён только на неактивном playback. Генератор не реализует обычную перемотку Seek и не является готовым микрофонным/сетевым потоком. Используйте одного согласованного производителя данных.
Рабочий пример C# и диагностика.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Методы7
CanPushBufferbool
public bool CanPushBuffer(int amount);Проверяет, достаточно ли свободного места для указанного числа стереокадров. Это сравнение вместимости, не резервирование места и не проверка данных. Используйте одного согласованного производителя.
| Имя | Тип | По умолчанию |
|---|---|---|
amount | int | — |
amountНеотрицательное число стереокадров для проверки. Метод сравнивает его со свободным местом, а не проверяет корректность размера протокола.
booltrue, если запрошенное число кадров помещается сейчас; false, если свободного места меньше.
ClearBuffervoid
public void ClearBuffer();Очищает очередь только у неактивного playback и обнуляет его счётчик смешанного времени. Во время воспроизведения нативная реализация выдаёт диагностику и не очищает буфер. Не используйте как перемотку; счётчик GetSkips этой операцией не сбрасывается.
GetFramesAvailableint
public int GetFramesAvailable();Возвращает количество стереокадров, которые сейчас можно записать. Это свободное место, а не число непрослушанных кадров. Значение может расти по мере чтения микшером.
intЧисло свободных для записи стереокадров. Ноль означает, что очередь заполнена.
GetSkipsint
public int GetSkips();Возвращает число случаев, когда внутреннему смешиванию не хватило PCM и остаток был заполнен нулями. Это не количество пропущенных кадров и не частота процессорных кадров. Старт playback сбрасывает счётчик.
intЧисло событий нехватки PCM с последнего старта playback; рост указывает на проблему пополнения.
PushBuffer2 перегрузки
public bool PushBuffer(Vector2[] frames);Копирует блок нормализованных стереокадров в очередь. Если целый блок не помещается, возвращает false без частичной записи. Успешная запись означает принятие в очередь, а не завершённое воспроизведение. Сохраняйте фазу/состояние декодера между блоками.
| Имя | Тип | По умолчанию |
|---|---|---|
frames | Vector2[] | — |
framesМассив или span стереокадров: X — левый канал, Y — правый. Число элементов равно числу кадров, не сумме отсчётов двух каналов. Подготовьте конечные значения подходящего уровня.
booltrue, если весь блок принят в очередь; false, если блок не помещается. Количество частично принятых кадров не возвращается.
public bool PushBuffer(ReadOnlySpan<Vector2> frames);Копирует блок нормализованных стереокадров в очередь. Если целый блок не помещается, возвращает false без частичной записи. Успешная запись означает принятие в очередь, а не завершённое воспроизведение. Сохраняйте фазу/состояние декодера между блоками.
| Имя | Тип | По умолчанию |
|---|---|---|
frames | ReadOnlySpan<Vector2> | — |
framesМассив или span стереокадров: X — левый канал, Y — правый. Число элементов равно числу кадров, не сумме отсчётов двух каналов. Подготовьте конечные значения подходящего уровня.
booltrue, если весь блок принят в очередь; false, если блок не помещается. Количество частично принятых кадров не возвращается.
PushFramebool
public bool PushFrame(Vector2 frame);Добавляет один стереокадр: Vector2.X — левый канал, Y — правый. При заполненной очереди возвращает false. Для потока из многих кадров используйте блоки PushBuffer вместо отдельного вызова на каждый кадр.
| Имя | Тип | По умолчанию |
|---|---|---|
frame | Vector2 | — |
frameОдин нормализованный стереокадр. X/Y — амплитуды каналов, не время и частота; контролируйте конечность и уровень сигнала.
booltrue после записи кадра; false, если для него не было свободного места.