当前位置:Linux教程 - Linux - 实时mp3录制

实时mp3录制

概述
这篇文章讲述了如何在Linux下录制音乐。在2001年1月为反对开销较大的WAV格式被采用,较小的mp3格式可以被直接录制成了争论的主题。24小时以CD音质录音在使用了这个格式后成为了现实。

介绍
通常情况下,wave声音实时地转换成mp3声音是不可能的。这个过程其中之一必须遵循:
·首先,以一个声音记录程序记录wave声音。
·使用一个mp3编码器(比例,""Lame"")将wave文件转换成mp3文件。
记录一个Wave文件将会很快地消耗磁盘空间(CD音质的环绕立体声10分钟要100MB)。这样就约束了以这种格式记录声音的存储能力。一个mp3编码器能够以普通mp3质量(128kbps,stereo)将Wave文件从100M转换成10M。
这个性能使24小时不间断地以数字记录音乐成为可能!24小时就是60*24=1440分钟,只要使用1,4GB的磁盘空间!!
我已经使用它来录制了""eighties top 300""。这个记录过程只有一次中断,mp3记录程序在24小时之后自动地停止没有任何声明....,但记录效果却非常好!我将告诉你我使用什么软件并且解释如果来制作实时的mp3。
以下讨论的是,两个可以用来制作实时的,stereo并且有CD质量的mp3的方法。
·使用软件""http://www.linuxfocus.org/English/March2001/article178.shtml#mpegrec""(需要mp3解码器""lame"").
·使用一个记录程序,比如sox,用它的管道输出到某个mp3解码器(sox|lame)。
""Mpegrec""与""sox|lame""效果一样,不同的是设置已经做好了。用户不需要作其它的任何事情。只要装入“Lame”!我建议你使用""mpegrec""。无论如何,需要紧记,这个程序在24小时后会停止!此外,另一个讨厌的毛病就是在记录时间上:
用户设置的记录时间并不被正常使用。大多数情况下,要短得多!

怎样使用mpegrec
使用""mpegrec""非常容易,输入“mpegrec -b 128 -o ./test.mp3""就可以了。
说明一下不同的选译:
-使用128Kbmps作为mp3的位速率。在mpegrec中的普通值是192,这是个奇怪的(并且太高)的值。几乎所有的mp3文件都有128kbps的位速率。
-输出文件的名字。在这个例子中,./test.mp3。如果输入文件没有指定,所有的输出被送到标准输出(stdout)。
这样,如何程序运行在终端下。所有的mp3代码将以屏幕显示的方式输出而不是存在文件中.....
注意:
请注意你的mixer-setting被正确地设置。如果没有,将什么也录不成!正确的记录源应用被选择,并且适当调整音量。

如何使用sox|lame
在终端屏幕下输入:
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驱动程序来。这个驱动程序被包括在内核之中,当普通声卡被支持时就有了。
-w 16位字长的音乐采样率(如果用不明白这点,不要紧)
-s “采样数据”是“有符号线性的”(如果你不明白这点,不要紧)
-r 44100 采样率是44100Hz(CD音质)。
-c 2 从双声道记录(stereo)。
/dev/dsp 这是声音采样的设备:这是一个Linux设备,用来描述记录数据。所有的设备,端口,磁盘等等,在/dev/目录下被访问。
wave流在/dev/dsp下被linux访问。实际上,这就等效于使用命令:cat /dev/dsp >test.wav(只有在mixer设置好了以后才会正常工作)。
-t raw 输出是 aw数据(无变化的,直接从soundcard输出)。
-t 使用普通输出,以-""标出。
lame 编码器:向录音管道送出到mp3的转换。
-x “输入强制字节转换”。我不知道这个功能的精确选项,但不用它,则过程不能执行。
-m s 编码为一个mp3文件。一般地,‘lame将它编码成joint-stereo:只有在两个声道有不同时才被编码。结果,会得到一个高的压缩结果,但是mp3质量比较差。
- 输入为""stdin。
./test.mp3 最后的mp3文件的名字。

Mixer
正确地设置mixer-setting是非常重要的。mixer决定了录音源。作为我们的目标,一个外部源与通过line-in接口与计算机声卡连接。则录音源应该是line-in。
除了正确地设置录音源外,还必须使microfone off:你不想在录音的同时有杂音。
注意:如果line-in没有被作为录音源,则不会有声音在line-in被获得(甚至你可以听见音乐)!!!不要忘记将line-on设成unmute。

获得好的录音效果
有可能你通常在xwindows下工作,并且mpegrec将在Xwindows下执行。但这并不是一个好的主意,理由是:
·X windows需要大量的系统资源。当然对于记录和编码音乐也是这样的。在Xwindows中,这样可能会对录制的声音有所干扰。
·如果你使用实时记录声音,最好不要在计算机上运行其它任务。如果这样,你最好不要用XWindows.
以上的注解表明了录音效果可以在没有图形环境存在的情况下达到最佳。这就意味着需要在Bash-Shell(文本模式的shell)。理由是:
·你需要在Bash shell中使用声音支持。在Xwindows被装入时会对声音支持作初始化。
·你需要一个在Bash shell下可使用的mixer
这两个问题能够很快被解决。第一个问题:
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初始化了声卡。
第二个问题就是选择声卡的line-in在你的文本模式下的bashshell下。我使用aumix程序。如果在bash下aumix被执行了,则mixer以交互模式被运行。你使用箭头来选择不同的录音源。<>键用来设置均衡。使用+和-来调整当前选择的声音源的音量。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 ""$1""

声音被初始化,line-in被选择作为录音源,并且mpegrec立即开始录音。

安装mpegrec
我把mpegrec软件的使用方法放在http://www.linuxfocus.org/common/src/article178/的文章中。关于mpegrec更多的信息可以在
http://www.netwaysglobal.com/mpegrec/找到。在这里可以找到源程序和被编译成win32的执行文件。
而lame文件和安装指南可以在http://www.linuxfocus.org/English/March2001/article178.shtml#lame找到。
在Linux下安装
·将文件复制到,比如/usr/local目录下
·解压文件:
gunzip mpegrec-1.0.src.tar.gz
tar -xvf mpegrec-1.0.src.tar
·输入 cd mpegrec-1.0
·输入make。编译程序。
·输入make install。这个程序就可以使用了。

安装lame
lame 的安装信息可以在http://www.mp3dev.org/mp3/找到。
安装步骤
·复制tar.gz文件到/usr/local/目录
·解压文件:
gunzip lame3.70.tar.gz
tar -xvf lame3.70.tar
·输入cd lame-3.70
·根据需要编辑Makefile。以下几行可能需要修改:
# remove these lines if you dont have GTK, or dont want the GTK frame analyzer
GTK = -DHAVEGTK ``gtk-config --cflags``
GTKLIBS = ``gtk-config --libs``
# Comment out next 2 lines if you want to remove VBR histogram capability
BRHIST_SWITCH = -DBRHIST
LIBTERMCAP = -lncurses
有“#”的行可能需要一个。你不需要这些额外的选项。
·输入make来编译‘lame.很有可能建立一个从/bin-directory到/usr/local/lame-3.70/lame的字符连接,使得可以在任何地方执行lame。Lame 已经准备好了。

安装sox
sox是一个用来记录,转换,或编辑声音的程序。比如,可以为声音文件加上回音效果。
sox可以作的转换有:转换wave文件到.au文件(SUN公司的音频格式)等。可以在http://www.linuxfocus.org/common/src/article178/和http://home.sprynet.com/~cbagwell/sox.html找到有关于sox更多的信息。
安装
·复制文件到/usr/local目录
·解压:
gunzip sox-12.17.tar.gz
tar -xvf sox-12.17.tar
·输入cd sox-12.17
·输入./configure.建立几样设置和建立Makefile。这个Makefile是专用于你的系统的。
·输入make编译sox
·输入 make install安装sox。