LINUX.ORG.RU

ALSA запись звука

 , ,


3

2

Помогите понять как захватывать с помощью ALSA звук тот что идёт в наушники. C pulseaudio проблем нет, звук захватывается так

$ ffmpeg -y -f pulse -i alsa_output.pci-0000_00_1f.5.analog-stereo.monitor -c:a copy out.wav
Отключаю pulseaudio:
$ pulseaudio -k
$ cat /etc/pulse/client.conf
...
autospawn = no
...
Пытаюсь записать звук с alsa:
$ ffmpeg -y -f alsa -i hw:0 -c:a copy out2.wav
звук не захватывается (в out2.wav тишина)
$ aplay -l
**** Список PLAYBACK устройств ****
карта 0: PCH [HDA Intel PCH], устройство 0: ALC887-VD Analog [ALC887-VD Analog]
  Подустройства: 1/1
  Подустройство №0: subdevice #0
карта 0: PCH [HDA Intel PCH], устройство 1: ALC887-VD Digital [ALC887-VD Digital]
  Подустройства: 1/1
  Подустройство №0: subdevice #0
карта 0: PCH [HDA Intel PCH], устройство 3: HDMI 0 [HDMI 0]
  Подустройства: 1/1
  Подустройство №0: subdevice #0
карта 0: PCH [HDA Intel PCH], устройство 7: HDMI 1 [HDMI 1]
  Подустройства: 1/1
  Подустройство №0: subdevice #0
карта 0: PCH [HDA Intel PCH], устройство 8: HDMI 2 [HDMI 2]
  Подустройства: 1/1
  Подустройство №0: subdevice #0

$ arecord -l
**** Список CAPTURE устройств ****
карта 0: PCH [HDA Intel PCH], устройство 0: ALC887-VD Analog [ALC887-VD Analog]
  Подустройства: 1/1
  Подустройство №0: subdevice #0
карта 0: PCH [HDA Intel PCH], устройство 2: ALC887-VD Alt Analog [ALC887-VD Alt Analog]
  Подустройства: 1/1
  Подустройство №0: subdevice #0

★★★★★

Последнее исправление: superuser (всего исправлений: 7)

hw:0

Так вроде это не так делается, нужно создать роут в alsarc который будет перенаправлять куда-то ещё. Во всяком случае у меня получалось сделать одновременную запись с микрофона и экрана, можно ещё сделать что себя будет слышно себе отдельно. Ищите гайды из 2006, если хотите повторить.

linuxnewbie
()
Ответ на: комментарий от superuser

Тебе обязательно слышать звуки во время записи? Если нет, то можно обойтись строкой:

pcm.!default { type plug slave.pcm "hw:Loopback,0,0" }
В ~/.asoundrc.

Kron4ek ★★★★★
()
Ответ на: комментарий от Kron4ek

с такой строчкой вообще ругается

$ ffmpeg -y -f alsa -i default out.wav
ffmpeg version 3.4.4-0ubuntu0.18.04.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)
  configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  WARNING: library configuration mismatch
  avcodec     configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared --enable-version3 --disable-doc --disable-programs --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libtesseract --enable-libvo_amrwbenc
  avfilter    configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared --enable-version3 --disable-doc --disable-programs --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libtesseract --enable-libvo_amrwbenc
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
[alsa @ 0x55ef716f8f40] cannot open audio device default (No such device)
default: Input/output error

superuser ★★★★★
() автор топика
Ответ на: комментарий от superuser

У меня работает. Модуль snd-aloop загружен?

lsmod | grep aloop

И тебе надо не default использовать, а hw:Loopback,1,0.

ffmpeg -y -f alsa -i hw:Loopback,1,0 out.wav

Kron4ek ★★★★★
()
Последнее исправление: Kron4ek (всего исправлений: 2)
Ответ на: комментарий от superuser

Запусти тест и посмотри на какое устройство у тебя звук выводится и слышно с ли звук

speaker-test -c 2

anonymous
()
Ответ на: комментарий от Kron4ek

Да, модуль не был загружен.

# modprobe snd-aloop pcm_substreams=1
# lsmod | grep aloop
snd_aloop              28672  0
snd_pcm               102400  5 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_aloop,snd_hda_core
snd                    86016  15 snd_hda_codec_generic,snd_seq,snd_seq_device,snd_hda_codec_hdmi,snd_hwdep,snd_seq_oss,snd_hda_intel,snd_hda_codec,snd_hda_codec_realtek,snd_timer,snd_aloop,snd_pcm,snd_rawmidi
Загрузил, теперь не ругается, но звука нет.

superuser ★★★★★
() автор топика
Последнее исправление: superuser (всего исправлений: 1)
Ответ на: комментарий от anonymous
speaker-test -c 2

speaker-test 1.1.3

Устройство для проигрывания - default
Параметры потока - 48000Гц, S16_LE, 2 каналов
Используется 16 октав "розового" шума
Ошибка открытия устройства воспроизведения: -16,Устройство или ресурс занято

это вот щас когда все заглохло
Перезагружаюсь!!!!!

superuser ★★★★★
() автор топика
Ответ на: комментарий от superuser

После записи нужно переименовывать или удалять файл ~/.asoundrc, иначе ты так ничего и не услышишь, так как вывод будет продолжать перенаправляться в loopback.

Kron4ek ★★★★★
()
Последнее исправление: Kron4ek (всего исправлений: 1)
Ответ на: комментарий от superuser

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

anonymous
()
Ответ на: комментарий от Kron4ek

Да, звук появился в файле. Но как сделать чтобы и слышно было во время записи и ~/.asoundrc не переименовывать

superuser ★★★★★
() автор топика
Ответ на: комментарий от anonymous

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

$ speaker-test -c 2

speaker-test 1.1.3

Устройство для проигрывания - default
Параметры потока - 48000Гц, S16_LE, 2 каналов
Используется 16 октав "розового" шума
Установлена частота в 48000Гц (запрошено 48000Гц)
Размер буфера от 2048 до 8192
Размер периода от 1024 до 1024
Используется максимальный размер буфера 8192
Периоды = 4
был установлен period_size = 1024
был установлен buffer_size = 8192
 0 - Front Left
 1 - Front Right
Время в периоде = 5,822968
 0 - Front Left
 1 - Front Right
Время в периоде = 5,973342
 0 - Front Left
 1 - Front Right
...

$ ffmpeg -y -f alsa -i default outdef.wav

в outdef.wav тишина

superuser ★★★★★
() автор топика
Ответ на: комментарий от superuser

Но как сделать чтобы и слышно было во время записи

Не знаю. Я сам пытался так сделать, но у меня не получилось.

Kron4ek ★★★★★
()
Ответ на: комментарий от anonymous

Cлава анонимусам!
Текущий ~/.asoundrc

pcm.multi {
    type route;
    slave.pcm {
        type multi;
        slaves.a.pcm "output";
        slaves.b.pcm "loopin";
        slaves.a.channels 2;
        slaves.b.channels 2;
        bindings.0.slave a;
        bindings.0.channel 0;
        bindings.1.slave a;
        bindings.1.channel 1;
        bindings.2.slave b;
        bindings.2.channel 0;
        bindings.3.slave b;
        bindings.3.channel 1;
    }

    ttable.0.0 1;
    ttable.1.1 1;
    ttable.0.2 1;
    ttable.1.3 1;
}

pcm.!default {
	type plug
	slave.pcm "multi"
} 

pcm.output {
	type hw
	card 0
}

pcm.loopin {
	type plug
	slave.pcm "hw:1,0,0"
}

pcm.loopout {
	type plug
	slave.pcm "hw:1,1,0"
}
пишу так:
$ ffmpeg -y -f alsa -ac 2 -i loopout out.wav

НО! если производили запись звука который давал например браузер и не закрыв его попытаться прослушать полученный out.wav, то получаем ошибку

$ aplay out.wav
aplay: main:788: ошибка открытия аудио-устройства: Устройство или ресурс занято
Как же правильно пользоваться-то?

И что за loopout, про него в ~/.asoundrc ничего нет !?

superuser ★★★★★
() автор топика
Ответ на: комментарий от superuser

ошибка открытия аудио-устройства: Устройство или ресурс занято

RTFM и вдогонку

может тебе в GUI проще будет разобраться?

поставь тогда jack и qjackctl (или даже catia) и не мучайся

anonymous
()
Ответ на: комментарий от superuser

Ты хочешь чтобы за тебя придумали как воплотить все твои выёживания? Плохой лор, не хочет за тебя работать...

ChekPuk ★★★
()
Ответ на: комментарий от ChekPuk

Ты хочешь чтобы за тебя придумали как воплотить все твои выёживания? Плохой лор, не хочет за тебя работать...

ловите этого засранца, он что-то знает

superuser ★★★★★
() автор топика
Ответ на: комментарий от superuser

Включи голову и подумай. Вот ты включил два устройства, луп и фактический выход.

НО! если производили запись звука который давал например браузер и не закрыв его попытаться прослушать полученный out.wav, то получаем ошибку

Куда у тебя выводится фокс и куда aplay?

ChekPuk ★★★
()
Ответ на: комментарий от ChekPuk

Куда у тебя выводится фокс и куда aplay?

Ну ты и рептилоид вредный!

superuser ★★★★★
() автор топика
Ответ на: комментарий от superuser

гугли alsa loopback capture. Потом включай мосг. Ничего сложного нет, у меня куда сложнее конфигурация:
https://gist.github.com/mittorn/1982dafe651f26d03cb2480ec82f6d19
ну и если snd_aloop модулем, то он должен быть загружен, иначе звука не будет нигде

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)
Ответ на: комментарий от superuser

оно сделано на основе более простого примера который легко гуглится

mittorn ★★★★★
()
Ответ на: комментарий от superuser

у тебя здесь dmix нету. без dmix только с одного процесса работает

mittorn ★★★★★
()

Итак остановился на такой конфигурации при которой всё прекрасно пишется и воспроизводится:

1) В /etc/pulse/client.conf д.б. прописан autospawn = no
Проверяем:

$ grep autospawn /etc/pulse/client.conf
; autospawn = yes
autospawn = no

2) Для автозагрузки модуля ядра snd-aloop, добавиляем его в /etc/modules

3) ~/.asoundrc (src: https://bbs.archlinux.org/viewtopic.php?pid=1153194#p1153194 )

$ cat ~/.asoundrc
pcm.!default {
  type asym
  playback.pcm "LoopAndReal"
  #capture.pcm "looprec"
  capture.pcm "hw:0,0"
}

pcm.looprec {
    type hw
    card "Loopback"
    device 1
    subdevice 0
}


pcm.LoopAndReal {
  type plug
  slave.pcm mdev
  route_policy "duplicate"
}


pcm.mdev {
  type multi
  slaves.a.pcm pcm.MixReale
  slaves.a.channels 2
  slaves.b.pcm pcm.MixLoopback
  slaves.b.channels 2
  bindings.0.slave a
  bindings.0.channel 0
  bindings.1.slave a
  bindings.1.channel 1
  bindings.2.slave b
  bindings.2.channel 0
  bindings.3.slave b
  bindings.3.channel 1
}


pcm.MixReale {
  type dmix
  ipc_key 1024
  slave {
    pcm "hw:0,0"
    rate 48000
    #rate 44100
    periods 128
    period_time 0
    period_size 1024 # must be power of 2
    buffer_size 8192
  }
}

pcm.MixLoopback {
  type dmix
  ipc_key 1025
  slave {
    pcm "hw:Loopback,0,0"
    rate 48000
    #rate 44100
    periods 128
    period_time 0
    period_size 1024 # must be power of 2
    buffer_size 8192
  }
}

4) пишем / проверяем

$ ffmpeg -y -f alsa -ac 2 -i looprec out.wav
$ aplay out.wav

Что за looprec так и не понял, надо изучать основательно.

superuser ★★★★★
() автор топика
Ответ на: комментарий от mittorn

с этим конфигом тоже работает
хотя с начала вроде не завелось...
магия какая-то

superuser ★★★★★
() автор топика
Последнее исправление: superuser (всего исправлений: 1)

извинения за офф, подскажите, пожалуйста, как единовременно воспроизводить 2 аудиодорожки на разных аудиоустройствах? 1 фильм, два зрителя с разными предпочтениями, 1 usb и 1 джек гарнитуры.

anonymous
()
Ответ на: комментарий от anonymous

навряд ли ты найдёшь плеер, который так умеет, но можно переквонвертировать дорожки в какое-нибудь квадро (должно, по идее, довольно быстро конвертироваться) и выводить пары каналов на разные устройства. через тот же multi в alsa или вовсе через jack. в pulseaudio наверяка тоже есть что-то типа multi (module-remap-sink, возможно).

anonymous
()

В микшере нужно выбрать, какое устройство захватывать. И убедиться, что оно не Mute. Как в Windows 98/XP
Upd: я думал, что ты захватываешь микрофон. Тогда мой совет не подходит.

ZenitharChampion ★★★★★
()
Последнее исправление: ZenitharChampion (всего исправлений: 1)

дрямсЪ с работающим конфигом!

сколько уже было слов, что без dmix из коробки с alsa «всё плохо»©™.. но воз и ныне там.. субъективно, твой конфиг кажется переусложнённым и без «деталей» (рейты, объём буфера и т.п.), но, если работает и радует - имеет право..

anonymous
()
Ответ на: комментарий от anonymous

p.s.: насчёт «без деталей» - сарказм..
субъективно, одного dmix на воспроизведение - достаточно (биндинг сразу в нём пишем), плюс pcm на лупбэк и ctl.mixer

anonymous
()

Шёл 2019 год, на ЛОР-е не знают как настроить ALSA.

Надо по таким фундаментальным технологиям видеоролики обучающие делать.
Чтобы всё сразу и понятно в 1 ролике и с приятным ведущим(ей) (надо устроить опрос (вдруг тут девок больше?)).
За счёт государства.
Передайте выше глас народа.

superuser ★★★★★
() автор топика
Ответ на: комментарий от superuser

Шёл 2019 год, на ЛОР-е не знают как настроить ALSA.

Да, вообще, оборзели звезданутые.

Надо по таким фундаментальным технологиям видеоролики обучающие делать.
За счёт государства.

Совсем обрзели.

anonymous
()
Ответ на: комментарий от superuser

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

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

Я понимаю когда человек просто не понимает, но если он ещё и лоровцев Хаит за свою тугодумность, то за такое бы насандалить бы седалище таковому дерзейшему выскочке.

ChekPuk ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.