Документация Engee

Общедоступный интерфейс

PortAudioStream(input_channels = 2, output_channels = 2; options...)
PortAudioStream(duplex_device, input_channels = 2, output_channels = 2; options...)
PortAudioStream(input_device, output_device, input_channels = 2, output_channels = 2; options...)

Звуковые устройства могут быть либо экземплярами PortAudioDevice, которые возвращает функция devices, либо строками с именами устройств, которые сообщает операционная система. Чтобы поток использовался только для вывода, присвойте input_channels значение 0; чтобы поток использовался только для ввода, присвойте output_channels значение 0. Если вместо количества каналов передается функция maximum, используйте максимальное количество каналов, допускаемое соответствующим устройством. Если указано единственное устройство duplex_device, оно используется как для ввода, так и для вывода. Если устройства не указаны, используются системные устройства по умолчанию.

Тип PortAudioStream поддерживает все функции потока и буфера, определенные в SampledSignals.jl по умолчанию. Например, при загрузке SampledSignals с помощью using SampledSignals можно считать данные за 5 секунд в буфер с помощью buf = read(stream, 5s) независимо от частоты дискретизации устройства. write(stream, stream) создаст обратную петлю для считывания данных из входного потока и их воспроизведения в выходном.

Параметры:

  • adjust_channels = false: при значении true, если input_channels или output_channels превышает максимальное значение для соответствующего устройства, выполняется корректировка до максимального значения.

  • call_back = C_NULL: функция обратного вызова PortAudio.

В настоящее время можно передавать только C_NULL.

  • eltype = Float32: тип выборки для звукового потока.

  • flags = PortAudio.paNoFlag: флаги PortAudio.

  • frames_per_buffer = 128: количество фреймов на буфер.

  • input_info = C_NULL: информация о потоке, относящаяся к API хоста, для устройства ввода.

В настоящее время можно передавать только C_NULL.

  • latency = nothing: запрошенная задержка. При слишком низком значении поток может быть недогружен; рекомендуется использовать значения по умолчанию. Если оставить значение nothing, будут использоваться следующие значения по умолчанию.

    • Для потоков, предназначенных только для ввода или только для вывода, используйте большую задержку по умолчанию для соответствующего устройства.

    • Для дуплексных потоков используйте максимальную из больших задержек по умолчанию для устройств ввода и вывода.

  • output_info = C_NULL: информация о потоке, относящаяся к API хоста, для устройства вывода.

В настоящее время можно передавать только C_NULL.

  • reader = PortAudio.SampledSignalsReader(): устройство чтения, считывающее входные данные.

По умолчанию PortAudio.SampledSignalsReader. Пользователи могут передавать собственные средства чтения; см. описание PortAudio.Scribe.

  • samplerate = nothing: частота дискретизации. Если оставить значение nothing, будут использоваться следующие значения по умолчанию.

    • Для потоков, предназначенных только для ввода или только для вывода, используйте частоту дискретизации по умолчанию для соответствующего устройства.

    • Для дуплексных потоков используйте частоту дискретизации по умолчанию, если она одинакова для устройств ввода и вывода; в противном случае выдается ошибка.

  • warn_xruns = true: выводится предупреждение, если поток перегружен или недогружен, что часто происходит при компиляции Julia или при особенно большом прогоне сборки мусора.

Влияет только на дуплексные потоки.

  • writer = PortAudio.SampledSignalsWriter(): устройство чтения, записывающее выходные данные.

По умолчанию PortAudio.SampledSignalsReader. Пользователи могут передавать собственные средства чтения; см. описание PortAudio.Scribe.

Примеры:

Настройка сквозной передачи звука с микрофона на динамик

julia> using PortAudio, SampledSignals

julia> stream = PortAudioStream(2, 2; warn_xruns = false);

julia> try
            # для отмены нажмите CTRL+C
            write(stream, stream, 2s)
        finally
            close(stream)
        end

Для автоматического закрытия потока используйте синтаксис do

julia> using PortAudio, SampledSignals

julia> PortAudioStream(2, 2; warn_xruns = false) do stream
            write(stream, stream, 2s)
        end

Открытие устройств по именам

using PortAudio, SampledSignals
PortAudioStream("Built-in Microph", "Built-in Output"; warn_xruns = false) do stream
    write(stream, stream, 2s)
end
2 s

Запись звука в течение 10 секунд и сохранение записи в OGG-файл

julia> using PortAudio, SampledSignals, LibSndFile

julia> PortAudioStream(2, 0; warn_xruns = false) do stream
            buf = read(stream, 10s)
            save(joinpath(tempname(), ".ogg"), buf)
        end
2 s
devices()

Составляет список устройств, доступных в системе. Устройства отображаются с указанием внутреннего имени и максимального количества каналов ввода и вывода.