Как получить импульсный аудиовыход?

Из справочной страницы zip,

-P password
       --password password
              Use  password  to encrypt zipfile entries (if any).  THIS IS INSECURE!  Many multi-user operating systems provide ways for any user to see the current command line of any other user; even
              on stand-alone systems there is always the threat of over-the-shoulder peeking.  Storing the plaintext password as part of a command line in an automated script is even  worse.   Whenever
              possible,  use the non-echoing, interactive prompt to enter passwords.  (And where security is truly important, use strong encryption such as Pretty Good Privacy instead of the relatively
              weak standard encryption provided by zipfile utilities.)

Как указано на странице руководства, ЭТО ОЧЕНЬ НЕБЕЗОПАСНО!

Итак, вы можете попробовать следующее: Снова со страницы руководства zip,

--encrypt
              Encrypt the contents of the zip archive using a password which is entered on the terminal in response to a prompt (this will not be echoed; if standard error is not a tty, zip  will  exit
              with an error).  The password prompt is repeated to save the user from typing errors.

Команда звучит примерно так:

zip --encrypt foo.zip foo.txtкоторый запрашивает пароль на терминале,

Enter password: 
Verify password: 
updating: foo.txt (stored 0%)

ВНИМАНИЕ:Шифрование, используемое zip, не очень надежное. Его можно легко взломать!

0
25.07.2019, 11:30
2 ответа

Основываясь на ответе dirkt, я написал небольшую программу , которая захватывает приемник PulseAudio по умолчанию и записывает необработанные данные PCM в файл. Предполагая, что у вас есть клиент PulseAudio, вам нужно сначала запросить информацию о сервере PA :

.
pa_context_get_server_info(ctx, &pa_server_info_cb, nullptr /*userdata*/);

Структура информации о сервере содержит имя приемника по умолчанию. Это «куда идет звук» на пути к звуковой карте. Как заявил dirkt, мы можем подключиться к sink_name.monitor, чтобы прослушать указанный приемник.

Для этого сначала создайте новый поток, затем настройте обратные вызовы и, наконец, подключите его для записи.

void pa_server_info_cb(pa_context *ctx, const pa_server_info *info, void* /*userdata*/)
{
    pa_sample_spec spec;
    spec.format = PA_SAMPLE_S16LE;
    spec.rate = 44100;
    spec.channels = 1;
    pa_stream *stream = pa_stream_new(ctx, "output monitor", &spec, nullptr);

    pa_stream_set_state_callback(stream, &pa_stream_notify_cb, nullptr /*userdata*/);
    pa_stream_set_read_callback(stream, &pa_stream_read_cb, nullptr /*userdata*/);

    std::string monitor_name(info->default_sink_name);
    monitor_name += ".monitor";
    if (pa_stream_connect_record(stream, monitor_name.c_str(), nullptr, PA_STREAM_NOFLAGS) != 0) {
        std::cerr << "Failed to connect for recording\n";
        return;
    }
}

В обратном вызове read данные доступны через pa_stream_peek(). Обязательно обратитесь к pa _stream _peek ()docs , чтобы узнать, когда pa_stream_drop()после просмотра!

При программировании я нашел документацию по API PulseAudio очень полезной и хорошо написанной.

1
28.01.2020, 02:29

Вы не «захватываете» выход Pulseaudio.

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

Исходного кода pavucontrolдолжно хватить для начала.

1
28.01.2020, 02:29

Теги

Похожие вопросы