Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
Эта заметка доступна на: English  Castellano  Deutsch  Francais  Nederlands  Russian  Turkce  Arabic  

[Photo of the Author]
автор Philip de Groot

Об авторе:

Скоро он получит Ph.D. по chemometrics в университете Неймегена. Ему нравится работать с Linux и передавать свой опыт, что он регулярно делает.


Содержание:

mp3-запись в реальном времени

[Illustration]

Резюме:

В этой заметке рассказывается, как записывать музыку при помощи Linux. В отличие от статьи в LinuxFocus в январе 2001, здесь не будет использоваться 'дорогостоящий' формат WAV. Вместо этого, запись будет сразу производиться в более экономичном формате mp3. С применением этого формата становиться реальностью 24-часовая запись в CD-качестве.



 

Введение

Обычно невозможно напрямую сконвертировать звук в формате wav в формат mp3 в реальном времени. Чтобы сделать это необходимо выполнить следующие действия:
  1. Во-первых, записать wav-файл при помощи записывающей программы.
  2. Использовать mp3 кодировщик (например 'Lame'), чтобы сконвертировать wav-файл в mp3.

Запись wav-файла быстро поглощает место на диске (100 Мб на 10 минут стерео звука в CD качестве). Это ограничивает продолжительность музыки, записанной в этом формате. mp3 кодировщик может переконвертировать 100 мегабайтный wav-файл в 10 мегабайт стандартного mp3 качества (128 kbps, стерео). Это позволяет вести цифровую запись музыки 24 часа подряд без перерыва! 24 часа это 60*24 = 1440 минут, они занимают всего 1,4 Гб (1440 Мб) на диске!!! Я воспользовался этим, чтобы записать хит-парад музыки 80-х годов из 300 песен (the eighties top 300), передаваемый Loostad radio (также доступны несколько страниц на английском). Запись прервалась только один раз - mp3-кодировщик недокументированно остановился после 24 часов..., запись была отличная! Я покажу вам какие программы я использовал и опишу другие способы делать mp3-записи в реальном времени. Также я указал адреса интернет страниц с программами, использованными в этой статье (ссылки идут далее по тексту).

 

Как это делать

Ниже обсуждаются два метода mp3-записи CD качества в реальном времени:

'Mpegrec' делает то же, что и 'sox|lame', но в нем сразу определены различные установки. Пользователю больше ничего не надо. Просто установите 'Lame'! Я советую использовать 'mpegrec'. Однако, имейте в виду, что эта программа останавливается после 24-х часов!!! Кроме того существует досадная ошибка при подсчете времени записи: продолжительность записи, установленная пользователем, используется некорректно. В большинстве случаев она намного короче!

 

Как использовать mpegrec

Использовать 'mpegrec' очень просто. В xterm наберите 'mpegrec -b 128 -o ./test.mp3' и все! Разъяснение опций:
-b Использовать mp3 битрейт 128 kbps. Стандартное значение в 'mpegrec' - 192 - странное(и слишком завышенное) значение. Почти все mp3 файлы имеют постоянный битрейт 128 kbps.
-o Имя выходного файла. В этом примере: ./test.mp3. Если имя выходного файла не указано, все посылается на стандартный выход ('stdout'). Обычно это xterm, где выполняется программа. Все mp3 коды будут выводиться на ваш экран вместо того, чтобы быть сохраненными в файл...

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

 

Как использовать 'sox|lame'

Наберите следующую команду в xterm:
sox -t ossdsp -w -s -r 44100 -c 2 /dev/dsp -t raw - | lame -x -m s - ./test.mp3
Описание опций:
sox Записывающая программа: звук записывается через линейный вход (line-in) звуковой карты.
-t ossdsp Звук поступает с звуковых драйверов OSS. Эти драйверы включены в состав ядра Linux, если включена стандартная поддержка звука.
-w Размер дискретизации 16 бит (если вы не понимаете смысл этого - не беспокойтесь - это не важно).
-s Данные дискретизации имеют тип 'signed linear' (если вы не понимаете смысл этого - не беспокойтесь - это не важно).
-r 44100 Частота дискретизации 44100 Гц (CD качество).
-c 2 Запись с 2 каналов (стерео).
/dev/dsp Устройство цифровой дискретизации: Linux-устройство с которого считываются записываемые данные. Все устройства, порты, диски и т.д. доступны в дериктории '/dev'. Поток записываемых данных в Linux можно получить из /dev/dsp. В действительности, чтобы получить звуковой файл вам достаточно использовать команду 'cat /dev/dsp >test.wav' (должен быть правильно настроен микшер!!!).
-t raw Выводятся необработанные данные (прямо со звуковой карты).
- Использовать стандартный выход, обозначаемый '-'.
lame Программа кодировщик: записываемый звук передается по каналу в lame для кодировки в mp3.
-x Производить обмен байтов источника. Я не знаю точное предназначение этой опции, но без нее ничего не работает (я замучался пока не нашел этого!).
-m s Кодировать стерео mp3-файл. По умолчанию, 'lame' кодирует его как 'joint-stereo': кодируются только РАЗЛИЧИЯ между каналами. Как результат компрессия получается лучше, но качество mp3 хуже.
- Входные данные поступают со стандартного входа ('stdin'). Для нашего примера это именно так.
./test.mp3 Имя конечного mp3-файла.
 

Микшер

Правильная настройка микшера очень важна. Микшер определяет откуда будут поступать входные данные. Стандартно установки KDE микшера следующие:
The standard KDE mixer-settings
Рис. 1: Установки KDE микшера по умолчанию.

Из рис. 1 видно, что сейчас поступление входных данных ожидается с микрофона. У нас же внешнее устройство подключено к компьютеру через линейный вход('line-in') звуковой карты. Источник входных данных должен быть 'line-in'(линейный вход). Если установить курсор мыши на канал линейного входа KDE микшера, то щелчок правой кнопкой вызовет меню изображенное на рис. 2.

Selecting the correct recording-source
Рис. 2: Установка источника данных для записи.

Выбираем 'RecSource' для установки линейного входа звуковой карты как источника для записи. Тем же образом уберите микрофон из источников для записи: вы же не хотите иметь дополнительный шум!

 

Внимание:

Если линейный вход не установлен источником для записи, звук не будет получен с линейного входа (даже если вы сами слышите музыку)!!! Не забудте установить линейный вход в режим включено ('unmute'). На рис. 2 это показано: линейный вход включен.

The KDE-mixer is set correctly
Рис. 3: Правильные установки микшера.

 

Меры предосторожности для получения хорошей записи

Похоже на то, что вы обычно работаете в XWindows и 'mpegrec' будет запущен под XWindows. Это не очень хорошо по следующим причинам:

Замечания выше показывают, что качество записи может быть улучшено если не использовать графическую оболочку. Это значит, что придется использовать Bash-shell (текстовый командный процессор). Такой подход влечет за собой следующие последствия:

Эти две проблемы решаются достаточно просто. Первая проблема, поддержка звука, решается так:
'modprobe -k sb'

Эта комманда загружает модуль 'sb', который устанавливает мою звуковую карту (SoundBlaster AWE 64). Если вы не знаете какой модуль будет установлен, посмотрите в своем '/etc/conf.modules' (SuSE) или '/etc/modules.conf' (в зависимости от дистрибутива). У меня часть, отвечающая за звуковую карту выглядит так:

alias char-major-14 sb
pre-install sb /sbin/modprobe "-k" "adlib_card"
pre-install sb /sbin/modprobe "-k" "awe_wave"
options sb io=0x220 irq=5 dma=1 dma16=5 # mpu_io=0x330
options adlib_card io=0x388 # FM synthesizer
post-install sb /usr/bin/sfxload "/win98/Program Files/Creative/ctsnd/sfbank/synthgs.sbk"
Ваша звуковая карта всегда определена в 'alias char-major-14' (если используются стандартные драйверы OSS, как обычно и бывает). Эта строка заканчивается 'sb', поэтому я знаю, что комманда 'modprobe -k sb' инициализирует сервисы звуковой карты.


Вторая проблема - выбор линейного входа вашей звуковой карты при помощи текстовой программы-микшера. Я использую программу 'aumix'. Если в Bash выполнить команду 'aumix', то микшер запустится в интерактивном режиме. В этом режиме настройки могут быть проверены и установлены визуально, см. рис. 4.

De tekst-georienteerde mixer 'aumix'
Рис. 4: Текстовый микшер 'aumix'.

Вы можете выбрать различные источники для записи при помощи стрелок. Кнопки '<' или '>'выбирают уровень (влево) или баланс (вправо). Кнопки '+' и '-' увеличивают и уменьшают уровень выбранного источника. 'm' включает или выключает текущий источник. Если источник выбран источником для записи, то красная буква 'R' отображается слева от него. Если источник может быть использован только для воспроизведения, отображается зеленая буква 'P'. Нажатие 's' сохраняет текущие настройки в '~/.aumixrc'. Эти установки очень легко активизируются при следующей загрузке командой 'aumix -l'.


Чтобы автоматизировать эти действия, я написал небольшой скрипт './mrec test.mp3'. Он содержит следующие строки:
#!/bin/sh
if [ -z "$1" ]; then
    echo "Usage: mrec mp3-output-file"
    exit 0
fi
modprobe -k sb
aumix -l
mpegrec -b 128 -o ./test.mp3

Звук инициализируется, линейный вход выбирается как источник для записи и 'mpegrec' начинает запись.

 

Установка mpegrec

Я сделал 'mpegrec' использованую в этой статье доступной для скачивания: Windows (win32) версия и Linux версия. http://www.netwaysglobal.com/mpegrec/ можно найти больше информации об 'mpegrec'. Здесь можно найти исходники и скомпилированную win32 версию. Страницы с более подробной информацией не существует, но кое-что можно найти здесь.

Файлы 'lame' и описание инсталляции можно найти здесь.

Установка в Linux


Внимание: Я не буду рассказывать об установке под windows, скажу только что для использования нужна версия 'lame' для этой ОС!!! Версия 'mpegrec' для windows также доступна для заинтересованных. В архив .tar.gz включена хорошая документация. Также много полезной информации расположено на их сайте.

 

Установка lame

Версия 'lame' используемая в этой статье также доступна для скачивания: Windows (win32) версия and a Linux версия. Домашняя страница 'lame' - http://www.mp3dev.org/mp3/.

Установка в Linux

 

Установка sox

'Sox' - программа для записи, конвертирования и редактирования звука. Например, при помощии ее можно добавить эхо в звуковой файл. Читайте man-страницы посвященные 'sox' (man sox) для более подробной информации. 'Sox' может конвертировать файлы следующим образом: сконвертировать wave-файл в .au-файл (стандартный SUN-овский аудио формат) и наоборот. Эта возможность иногда очень удобна! Версия 'sox' используемая в данной статье может быть найдена здесь, домашняя страница 'sox' - http://home.sprynet.com/~cbagwell/sox.html.

Установка в Linux

 

Другие проблемы

Я нашел две проблемы:

Cron

Это главная проблема в SuSE. 'Тяжелый' процесс запускается для обновления man-страниц и удаления старых логов. Этот процесс очень важен, но использует слишком много производительности процессора, которая нужна для mp3 кодировки. Я переименовал 'cron' на время записи, таким образом он не находился и не запускался. После записи я переименовал 'cron' назад! Используйте следующую команду, чтобы изменить имя 'cron-у':

mv /usr/sbin/cron /usr/sbin/cron.backup

Похоже, что местоположение 'cron-а' отличается для других дистрибутивов. Вы можете его найти при помощи:

which cron

Проверьте не нужен ли 'cron' для других задач! На рабочей машине с Linux проблем не должно быть.

Проблемы драйвера звука

Эта проблема была решена использованием Alsa драйверов. Смотрите документацию по Alsa (она не включена в архив driver/utilities), чтобы получить инструкции по установке драйверов. Но лучше не использовать эти драйверы, если не возникло реальной проблемы.  

Страница отзывов

У каждой заметки есть страница отзывов. На этой странице вы можете оставить свой комментарий или просмотреть комментарии других читателей.
 talkback page 

Webpages maintained by the LinuxFocus Editor team
© Philip de Groot, FDL
LinuxFocus.org

Click here to report a fault or send a comment to LinuxFocus
Translation information:
nl -> -- Philip de Groot
nl -> en Philip de Groot
en -> ru Kolobynin Alexey

2001-06-19, generated by lfparser version 2.8