Да, потому что, если вы записываете напрямую с аппаратного устройства, вы можете записывать только те форматы, количество каналов, битрейт и т. д., которые напрямую поддерживаются аппаратным обеспечением. Итак, когда вы делаете что-то вроде
arecord -D hw:0,0 out.wav
, вы столкнетесь с этой проблемой; вам нужно либо добавить правильные параметры, как в
arecord -D hw:0,0 -c 1 -f S16_BE -f44100 out.wav
(конечно, с параметрами для вашего устройства, а не эти), либо вы можете использовать плагин преобразования, который ALSA автоматически делает доступным для каждого устройства, как в
arecord -D plughw:0,0 ... out.wav
и затем он будет преобразован в любой формат, который вы укажете.
То же самое относится к любому другому приложению, которое пытается записывать через ALSA. Вы также можете настроить свой собственный ~/.asoundrc
с разумными значениями по умолчанию, если хотите.
Используйте arecord -L
, чтобы получить список устройств/плагинов, с которых вы можете записывать.Возможно, вы захотите использовать автоматически предоставляемый плагин dsnoop
, но вы не сказали нам, для чего вам нужна запись и что именно вы делали, когда пытались записать.
Правка:
Хорошо, недостающая информация:
Вы используете программу под названием Mathworks. В этой программе есть блок аудиозахвата, в котором есть параметр Имя устройства. Параметр по умолчанию равен
hw:1,0
.
Пока для этого параметра установлено любое значение hw:...
, вы можете записывать всякое в ваш ~/.asoundrc
до посинения, и это ничего не изменит, потому что hw:...
означает "использовать оборудование напрямую, не говоря уже обо всех других плагинах, указанных в ~/.asoundrc
".
Первым шагом является определение правильного устройства: выполните arecord -l
, и вы увидите что-то вроде
card X: NAME_OF_CARD, device Y: NAME_OF_DEVICE
...
Теперь измените значение вышеуказанного параметра на plughw:X, Y
, например plughw:1,0
, удалите файл ~/.asoundrc
, чтобы удалить возможный дополнительный источник ошибок, и повторите попытку. plughw:...
поместит plug
плагин непосредственно перед данным аппаратным устройством в качестве ведомого.
Если он по-прежнему не работает, есть две возможные причины, и сообщение об ошибке, которое вы получите, подскажет, что это может быть:
(1) Блок Mathworks написан таким образом, что он работает только напрямую с аппаратными устройствами, а не с плагинами, и у него нет возможности изменить количество каналов (может быть, есть лишний параметр, о котором забыли упомянуть в документации). В этом случае вы мало что можете сделать. Вы можете попробовать использовать dsp.audiofilereader на именованном канале с arecord
на другом конце, но я не уверен, насколько хорошо это сработает, и это временная мера.
(2) Плагин plughw
должен автоматически преобразовывать каналы IIRC, но, возможно, это не так. Тогда вам придется явно прописать плагин в вашем ~/.asoundrc
, но давайте сделаем это только в случае необходимости.