Вопрос или проблема
У меня есть звуковая карта, которая поддерживается только частично в Alsa, т. е. воспроизведение работает только на 48 кГц. Большинство моих аудиофайлов записаны на 44.1 кГц, и я хотел бы использовать Exaile в качестве музыкального плеера, так как он имеет все необходимые мне функции.
Проблема в том, что gstreamer – это бекенд для Exaile – не конвертирует частоту дискретизации с настройками, которые у меня есть, поэтому воспроизведение аудиофайлов приводит к ускорению, в то время как воспроизведение файлов с помощью mplayer работает нормально, mplayer производит конвертацию частоты дискретизации при воспроизведении.
Существует ли способ заставить gstreamer конвертировать частоту дискретизации?
ИЗМЕНЕНИЕ: Звуковая карта, о которой идет речь, – это E-MU 0404 PCI Express, см. http://alsa-project.org/main/index.php/Matrix:Vendor-Creative_Labs и http://alsa-project.org/main/index.php/Matrix:Module-emu10k1-fpga
Недавно я приобрел E-MU 0404 USB, так что, возможно, мой опыт с ней может вам помочь.
После некоторых усилий она, похоже, может воспроизводить как 44100 Гц, так и 48000 Гц (и, вероятно, – но я не проверял – различные частоты до 192 кГц…)
GStreamer способен на конвертацию частоты дискретизации, но это, вероятно, не самое подходящее место для ее настройки. Как вы, безусловно, заметили, как ее настроить невероятно затруднительно и, вероятно, будет связано с gconf. Тем не менее, есть ряд других мест, которые должны работать. Я перечислил их в порядке предпочтения.
Трюк с этими устройствами, похоже, заключается в том, чтобы установить ползунок ‘Clock Rate’ в микшере (терминальный alsamixer должен просто показывать его, я думаю, что другие требуют, чтобы вы сделали ползунок видимым). Установка его на 0 дает 44100 Гц, 1 дает 48000 Гц и так далее. Раздражает – но работоспособно.
Обратите внимание: если вы хотите использовать SPDIF-выход, вам нужно настроить ваш медиаплеер на вывод из устройства 1. Если кто-то пытается получить проходной сигнал (AC3/DTS), это не сработает, если частота дискретизации не настроена правильно (обычно, настройка 48000 кГц, т. е. ‘1’).
На этом этапе все должно работать, ниже описано, как делать вещи, не возясь с этим ползунком:
Если вы действительно хотите выполнить конвертацию частоты дискретизации, вы должны быть в состоянии получить желаемый эффект, создав соответствующий ~/.asoundrc (это предполагает, что E-MU – второе звуковое устройство – вы можете проверить с помощью aplay -l). Следующее не тестировалось, так как у меня нет аналоговых кабелей под рукой:
pcm.!default {
card 1
device 0
rate 48000
}
ctl.!default {
type hw
card 1
}
Настройка через ALSA должна была заставить все работать, однако, если вы предпочитаете настроить это через PulseAudio, отредактируйте /etc/pulse/daemon.conf и убедитесь, что строка default-sample-rate выглядит так (убедитесь, что она не закомментирована с помощью ‘ ; ‘ и число корректное):
default-sample-rate = 48000
(из https://wiki.archlinux.org/index.php/PulseAudio#Choppy.2C_overdriven_sound)
Ответ или решение
GStreamer и Конвертация Частоты Дискретизации: Решение Проблемы
При работе с аудио и видео, выбор правильных инструментов и конфигураций имеет решающее значение для качества воспроизведения. В вашем случае, у вас есть не полностью поддерживаемая звуковая карта E-MU 0404, которая воспроизводит только в частоте 48 кГц, в то время как большинство ваших аудиофайлов записано в 44.1 кГц. Для решения этой проблемы и чтобы использовать Exaile в качестве медиаплеера, необходимо настроить GStreamer для конвертации частоты дискретизации.
Основы GStreamer
GStreamer — это мощный мультимедийный фреймворк, который поддерживает множество форматов аудио и видео, а также позволяет использовать различные кодеки и плагины. Однако его настройка, особенно для задач типа преобразования частоты дискретизации, может быть неочевидной, что вы уже, вероятно, заметили.
Конфигурация ALSA
Первый и наиболее предпочтительный способ решения вашей проблемы заключается в правильной конфигурации ALSA (Advanced Linux Sound Architecture). Ваша звуковая карта имеет возможность менять частоту дискретизации, и это может быть сделано следующим образом:
-
Проверьте текущие настройки: Запустите
alsamixer
в командной строке. Убедитесь, что у вас видны все элементы управления, и найдите «Clock Rate». Установка этого параметра:0
— 44100 Гц1
— 48000 Гц
Этот шаг важен, так как правильная установка частоты дискретизации на уровне ALSA поможет избежать дополнительных проблем с воспроизведением.
-
Создайте конфигурационный файл для ALSA: Если вы хотите явно задать частоту 48 кГц для ваших приложений, создайте файл
~/.asoundrc
с следующим содержимым (замените1
на номер вашей звуковой карты, если необходимо):pcm.!default { card 1 device 0 rate 48000 } ctl.!default { type hw card 1 }
Это позволит ALSA автоматически изменять частоту дискретизации при воспроизведении.
Использование PulseAudio
Если в вашем окружении активно используется PulseAudio, то вам также следует изменить конфигурацию PulseAudio:
- Откройте файл
/etc/pulse/daemon.conf
. - Убедитесь, что строка
default-sample-rate
установлена на48000
и не закомментирована:default-sample-rate = 48000
Изменения в конфигурации PulseAudio могут потребовать перезапуска службы с помощью команды:
pulseaudio -k
pulseaudio --start
Также стоит отметить, что если вы хотите использовать выход SPDIF, настройте медиаплеер на использование устройства 1.
Примечания по использованию GStreamer с Exaile
После вышеизложенных шагов, GStreamer должен автоматически конвертировать вашу 44.1 кГц аудиодорожку в 48 кГц во время воспроизведения. Если вы столкнетесь с дальнейшими трудностями, не забудьте проверить вывод команд GStreamer на наличие ошибок.
-
Тестирование: Попробуйте воспроизвести аудиофайлы с помощью Exaile или другого приложения, используя GStreamer в качестве бэкенда. Обратите внимание на любые сообщения об ошибках.
-
Дополнительная настройка: Если проблема остается, стоит проверить, какие плагины GStreamer установлены у вас. Плагины для работы с преобразованием частоты дискретизации могут быть представлены как
audio/resample
, и в зависимости от вашей конфигурации, они могут потребоваться для улучшения качества звука.
Заключение
Конвертация частоты дискретизации в GStreamer — это вполне осуществимая задача, и правильная настройка ALSA и PulseAudio значительно упростит данный процесс. Следуя представленным рекомендациям, вы сможете наслаждаться вашим аудио без искажений и проблем, связанных с несовпадением частоты дискретизации.