linux ubuntu系统安装 Linux下怎样同时对麦克风及系统声音进行录音

微信公众号
让Ubuntu默认ALSA底层声音驱动换上OSS4声音系统(3)
D. 配置启动时默认启用 OSS4 而非 ALSA:
sudo dpkg-reconfigure linux-sound-base
选择 OSS 而非 ALSA 或 default。
然后重启电脑,系统级配置基本完成。然后可以给支持自定义音频系统的软件配置成使用 OSS4,比如 Audacious,Wine,Audacity,VLC, (s)mplayer,clementine。&
如果你想删除 PulseAudio,也有办法,但是不保证所有程序都能正确输出声音。首先是按照前一种配置方法里的 B、C、D 调整设置,然后按照 E 和 F 对 PulseAudio 开刀。
E. 使用 GStreamer 接管 GNOME 声音系统,安装为 GStreamer 后端编译的 libcanberra(有危险,慎重!):
sudo add-apt-repository ppa:dtl131/ppa
sudo apt-get update
sudo apt-get purge pulseaudio
sudo apt-get upgrade
F. 配置 Rhythmbox 等程序使用 Gstreamer (没错,还需要配置)
gconf-editor
找到 system/gstreamer/0.10/audio/default,将其中所有仍被设置为 pulsesink 的键(如 musicaudiosink 和 chataudiosink)都改为 osssink。
系统默认的音量控制插件会失效,因为它是基于 PulseAudio 的,可以在面板上单击右键,添加一个 GNOME 的声音控制。
然后重启,应该绝大部分声音系统都没有问题了。可能存在的问题:
1.Flash,需要安装 flashplugin-nonfree-extrasound 来获得支持 oss4 的 libflashsupport。
2.Firefox,xulrunner 无法编译成同时支持 Alsa 和 OSS4,所以HTML5音视频可能有问题。
1. 声音输入不能用,或者有噪音
运行命令:
在显示的界面里把 pink 下拉菜单中选成 input,勾选界面里所有的 input-mix 和 input-mix-mute,然后在 pink 处拖动滑块减小音量,一般以 80% 上下为宜,否则会有噪音。
2. 如何查看是否已经加载了 OSS4 内核模块,以及我的声卡用了什么模块?
运行命令:
lsmod | grep -i oss
比如我是 HD Audio,输出如下:
oss_hdaudio
oss_usb,oss_hdaudio
3. 如何查看我的声卡型号?
lspci | grep -i audio
4. 64 位系统能用吗?
能,没问题。
其他类似的新闻
● ● ● ● ● ● ● ● ● ●
其他相关的新闻
大家感兴趣的内容
小伙伴最爱的新闻
小伙伴还关注了以下信息
小伙伴关注的焦点
小伙伴都在关注的热门词
Copyright (C) 2006- Inc. All Rights Reserved
孝感风信信息技术有限公司 ● 版权所有Linux下用ntp来对时
阅读:777次&&&时间: 10:08:06&&
Linux下更新系统时间的命令用:ntpdate
教育网下常用的时间服务器有s1a.,或者210.72.145.44
ntpdate 210.72.145.44
更多教育下的时间服务器可在这里找到: http://www./mem.htm。
如果想让系统退出时的把时间写到bios,则在/etc/conf.d/clock里有:
# If you want to set the Hardware Clock to the current System Time
# during shutdown, then say "yes" here.
CLOCK_SYSTOHC="no"
CLOCK_SYSTOHC 要为yes,否则关机时系统时间不会更新。
注意:升级系统时要注意文件/etc/conf.d/clock不要被覆盖,里面一般设有CLOCK="local",如果被覆盖了就成了UTC,这样就会出现跟windows时间不一样。
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
Copyright &
All Rights Reserved温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
&这些变量名都是在中
可以查到的,通过名称即可看出其用途,后面的赋值在该头文件中则并不是这样定义的,而是通过调用一些函数返回出来的,应该是声卡上对应的地址。在应用程序
中可通过ioctl(fd,cmd,arg)来对这些变量进行赋值。其中fd即为一个打开/dev/mixer的文件指针,cmd为上面所列的这些变
量,arg既是对这些变量进行操作所需赋给的结构体或变量。参考网站: dw.com/tech/server/1.asp
yc2440 录放音的软硬件配置
以下涉及到的开发运行环境均为(Yc2440板上的utu-linux操作系统)选择的语言为C。选用的交叉编译器为armv4l-unknown-linux-gcc。
录音硬件(uda1341声卡)
Uda1341是市面上应用比较广的声卡芯片支持PCM硬件编码以及放音和录音功能。UDA1341支持IIS总线数据格式,采用位元流转换技术进行信号处理,具有可编程增益放大器(PGA)和数字自动增益控制器(AGC)。
UDA1341对外提供两组音频信号输入接口,每组包括左右2个声道。由于IIS总线只处理音频数据,因此UDA1341还内置用于传输控制信号的L3总线接口。L3接口相当于混音器控制接口,可以控制输入/输出音频信号的低音及音量大小等。而且这些功能可以通过程序调用utu-linux提供的上层接口函数很好的实现,更方便的支持特定需求的录放。
软件平台(utu-linux)
Utulinux操作系统是yc2440开发版提供的嵌入式linux系列操作,其内核为2.6.13版本。这样对于编程和开发来说就可以直接基于linux操作系统,而无需发太多的时间去考虑底层硬件的工作机制,很大程度上提高了工作效率。用linux系列的操作系统的一个优点就是在pc版linux上编译通过的程序,基本上在板载linux上也能测试通过。另外就是基于linux系统的大部分技术均为开源项目,可以很好的学习别人的成果。所以我们目前选择了utulinux而非wince。
Linux上的声卡驱动分两种,一种为OSS系列,另外一种为ALSA系列。
ALSA (Advanced
Linux Sound Architecture(高级Linux声音体系)的缩写)
是为声卡提供驱动的Linux内核组件。
一部分的目的是支持声卡的自动配置,以及完美的处理系统中的多个声音设备,这些目的大多都已达到。另一个声音框架JACK使用
提供低延迟的专业级音频编辑和混音能力。ALSA是一个完全开放源代码的音频驱动程序集,而且完全兼容OSS。
Sound System)是 linux
平台上一个统一的音频接口,
即只要音频处理应用程序按照OSS的API来编写,那么在移植到另外一个平台时,只需要重新编译即可。值得注意的是OSS只是部分开源。
无论是选择ALSA还是OSS都是为了一个目的:将声卡抽象为一个统一的设备供linux程序员使用。我们前期测试选用的OSS系列。
安装声卡驱动
驱动源程序使用的是厂商附带的uda1341.c文件。
a、将该文件放置到sound/oss/目录下。
将bitfield.h放到include/asm-arm/plat-yc24xx/目录
b、在该目录下的Makfile文件的适当部位(和别的obj一起的地方)添加:
Obj-$(CONFIG_yC2440_UDA1341)+=
yc2440_uda1341.o
以便能选择编译该文件。
c、在该目录下的kconfig文件的头部添加:
yC2410_SND_UDA1341
"yC2440 UDA1341 driver (yC2440)"
depends on
SOUND_PRIME &&
SOUND && ARCH_yC2440
UDA1341 can be found in Samsung's yC24XX
platforms. If you have a board based on one
of these. Say Y or Nhere.
If unsure, say N.
以便能在menuconfig的时候能选择到这个声卡。
d、在arch/arm/mach-yc2440/mach-smdk2440.c文件中添加iss的platform_device(
默认已经有了 )
static struct
platform_device *smdk2440_devices[] __initdata = {
&s3c_device_iis,
menuconfig 选择driver-&sound-&oss-&uda1341
,选择对声卡的支持。编译完毕,下载到yc2440开发板,使用madplay播放mp3文件。
测试声卡驱动是否安装成功
在linux上测试声卡是否正常非常方便,用两个简单的命令即可实现:
将声音录为PCM数据
将PCM数据播放
yc2440开发板下录音的实现机制
录音实现的大体流程:
测试声卡是否正常工作
通过mixer调节声卡输入和输出时的音量大小及各种效果(比较重要)
打开声卡设备
默认目录为/dev/dsp
打开声音文件
将wav头信息读入声音文件
从dsp声卡设备中读入pcm数据
关闭设备及保存声音文件
大体流程的伪代码分两部分给出,一部分为基于mixer编程的专门负责调节声卡的录音效果,第二部分为录音程序。
mixer混音编程
常用命令简介
声卡上的混音器由多个混音通道组成,它们可以通过驱动程序提供的设备文件/dev/mixer进行编程。对混音器的操作是通过ioctl系统调用来完成的,并且所有控制命令都由SOUND_MIXER或者MIXER开头,表1列出了常用的几个混音器控制命令:
SOUND_MIXER_VOLUME
主音量调节
SOUND_MIXER_BASS
SOUND_MIXER_TREBLE
SOUND_MIXER_SYNTH FM
SOUND_MIXER_PCM
主D/A转换器
SOUND_MIXER_SPEAKER
SOUND_MIXER_LINE
音频线输入
SOUND_MIXER_MIC
麦克风输入
SOUND_MIXER_CD CD
SOUND_MIXER_IMIX
SOUND_MIXER_ALTPCM
从D/A 转换器
SOUND_MIXER_RECLEV
SOUND_MIXER_IGAIN
SOUND_MIXER_OGAIN
SOUND_MIXER_LINE1
声卡的第1输入
SOUND_MIXER_LINE2
声卡的第2输入
SOUND_MIXER_LINE3
声卡的第3输入
Mixer部分比较简单现将代码及注释附下:
&unistd.h&
&stdlib.h&
#include &stdio.h&
&sys/ioctl.h&
#include &fcntl.h&
&linux/soundcard.h&
/* 用来存储所有可用混音设备的名称
const char
*sound_device_names[] = SOUND_DEVICE_NAMES;
/* 混音设备所对应的文件描述符
int devmask,
/* 混音器信息对应的位图掩码
显示命令的使用方法及所有可用的混音设备
void usage()
fprintf(stderr,
"usage: %s &device& &left-gain%%& &right-gain%%&\n"
&device& &gain%%&\n\n"
&device& is one of:\n", name, name);
for (i = 0 ; i &
SOUND_MIXER_NRDEVICES ; i++)
i) & devmask) /* 只显示有效的混音设备
fprintf(stderr, "%s ", sound_device_names[i]);
fprintf(stderr,
int main(int argc,
char *argv[])
int left, right,
/* 增益设置 */
/* 系统调用的返回值 */
/* 选用的混音设备 */
/* 混音设备的名称 */
name = argv[0];
/* 以只读方式打开混音设备
open("/dev/mixer", O_RDONLY);
if (fd == -1) {
perror("unable
to open /dev/mixer");
/* 获得所需要的信息
ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devmask);
if (status ==
perror("SOUND_MIXER_READ_DEVMASK ioctl failed");
ioctl(fd, SOUND_MIXER_READ_STEREODEVS, &stereodevs);
if (status ==
perror("SOUND_MIXER_READ_STEREODEVS ioctl failed");
/* 检查用户输入
if (argc != 3 &&
argc != 4)
/* 保存用户输入的混音器名称
dev = argv[1];
/* 确定即将用到的混音设备
for (i = 0 ; i &
SOUND_MIXER_NRDEVICES ; i++)
if (((1 &&
i) & devmask) && !strcmp(dev, sound_device_names[i]))
SOUND_MIXER_NRDEVICES) { /* 没有找到匹配项
fprintf(stderr, "%s is not a valid mixer device\n", dev);
/* 查找到有效的混音设备
/* 获取增益值
if (argc == 4) {
/* 左、右声道均给定
atoi(argv[2]);
atoi(argv[3]);
/* 左、右声道设为相等
atoi(argv[2]);
atoi(argv[2]);
/* 对非立体声设备给出警告信息
if ((left !=
right) && !((1 && i) & stereodevs)) {
fprintf(stderr, "warning: %s is not a stereo device\n",
将两个声道的值合到同一变量中
level = (right
/* 设置增益
ioctl(fd, MIXER_WRITE(device), &level);
if (status ==
perror("MIXER_WRITE ioctl failed");
获得从驱动返回的左右声道的增益
right = (level &
0xff00) && 8;
/* 显示实际设置的增益
fprintf(stderr,
"%s gain set to %d%% / %d%%\n", dev, left, right);
/* 关闭混音设备
close(fd);
用mixer调节声卡输入和输出时的声音效果
用armv4l-unknown-linux-gcc编译好上面的程序之后,下载到yc2440开发版,先不带任何参数执行一遍,此时会列出声卡上所有可用的混音通道:
[nnliubin@localhost
sound]$ ./mixer
usage: ./mixer
&device& &left-gain%& &right-gain%&
&device& &gain%&
Where &device&
is one of:
之后就可以很方便地设置各个混音通道的增益大小了,例如下面的命令就能够将麦克风输入的左、右声道的增益分别设置为80%和90%:
[nnliubin@localhost sound]$ ./mixer mic 80 90
cd gain set to 80% / 90%
因为录音部分程序比较长,所以将使用部分代码加文字的方式进行描述,并且录成的格式均为wav。
在程序前就最基本的东西明确一下。声卡上的DSP设备进行声音录制和回放的基本框架,它的功能是先录制几秒种音频数据,将其存放在内存缓冲区中,然后再进行回放,其所有的功能都是通过读写/dev/dsp设备文件来完成的。(详见核心代码)
这样录音程序就完成了,按8000hz,8位进行采样录音时间设置的为30秒,调用的为OSS的ioctl接口。
运行如下命令看效果
armv4l-unknown-linux-gcc -o
把soundrec文件下载到yc2440开发板
运行./soundrec
就能进入录音界面了
yc2440开发板下放音的实现机制
为了更好的进一步检测我们的录音数据的正确性和录音效果决定写一专门播放wav文件的控制台播放器。其实录音功能实现以后,
放音功能的实现就可以类比实现了,只不过将过程反过来具体流程如下:
读wav文件的头,将各部分参数保存
通过ioctl来设置各个参数
将pcm数据读入/dev/dsp
完成以上功能以后,就能开发板上播放任何一首wav格式的声音文件了,以下为缩减版代码(一些和录音相当的部分就略去了)
将程序用交叉编译器编译成二进制可执行文件后,下载到yc2440开发版,就可以开始享受放音程序了。
1 .PCM 到wav
8k hz,量化
(也可能是8bit),单声道
&iostream&
&iostream&
//unsigned long = DWORD,unsigned short = WORD
//wav头的结构如下所示:
/*前面已经提到,这里省略*/
/*内容在此略去*/
/*内容略去*/
int main()
//补充,对IMA ADPCM 的处理,把数据转化为二进制存储状态
//打开输入文件和输出文件
fin.open("ADPCM16.txt",ios::binary);
fout.open("ADPCM.txt",ios::binary);
ADPCM16[2];
TWO_ADPCM_BYTE//高4位和低4位放到一个字节里,
ADPCM1,ADPCM2;//分别存储高字节和低字节;
//输入10进制数据转化为二进制存储,以下为转化算法:
while(fin&&ADPCM16[1]&&ADPCM16[2])
if((int)ADPCM16[1]&81)
//为a,b,c,d,e,f
ADPCM1=int(ADPCM16[1])-87;
ADPCM1=int(ADPCM16[1])-int('0');
if((int)ADPCM16[2]&81) //为a,b,c,d,e,f
ADPCM2=int(ADPCM16[2])-87;
ADPCM2=int(ADPCM16[2])-int('0');
TWO_ADPCM_BYTE = ADPCM1*16 + ADPCM2;
fout.write((char*)(&TWO_ADPCM_BYTE),1);
fin.close();
fout.close();*/
//加头程序
pcmHEADER;
//unsigned
*fp/*打开PCM文件*/,*fpCpy/*打开输出文件*/;
//HEADER部分;
strcpy(pcmHEADER.fccID,"RIFF");
strcpy(pcmHEADER.fccType,"WAVE");
if(fseek(fpCpy,sizeof(HEADER),SEEK_SET))//跳过HEADER的长度,以便下面继续写入wav文件的数据;
//初始化FMT成员数据并写入输出文件;
strcpy(pcmFMT.fccID,"fmt
fwrite(&pcmFMT,sizeof(FMT),1,fpCpy);
//DATA部分;
strcpy(pcmDATA.fccID,"data");
//跳过DATA的长度,开始写pcm数据部分,同时计算出数据量的大小;
fseek(fpCpy,sizeof(DATA),1);
//注:每次读入一个PCM数据(我们用的是16bit,也即2
fread(&m_pcmData,sizeof(unsigned
short),1,fp); //从.pcm中读入数据
fread(&m_pcmData,sizeof(char),1,fp); //从.pcm中读入数据
pcmDATA.dwSize=0;
//读入并存储数据
while(!feof(fp))
pcmDATA.dwSize+=2;
//计算数据的长度;每读入一个数据,长度就加2;
//参考:size_t
fread( void *buffer, size_t size, size_t count, FILE *stream );
fwrite(&m_pcmData,sizeof(unsigned
short),1,fpCpy);
fread(&m_pcmData,sizeof(unsigned
short),1,fp);
//音频采样大小为8
//pcmDATA.dwSize+=1;
//fwrite(&m_pcmData,sizeof(char),1,fpCpy);
//fread(&m_pcmData,sizeof(char),1,fp);
fclose(fp);
//关闭文件
pcmHEADER.dwSize=36+pcmDATA.dwS
rewind(fpCpy);
//将fpCpy变为.wav的头,以便于写入HEADER和DATA;
fwrite(&pcmHEADER,sizeof(HEADER),1,fpCpy);
//写入HEADER
fseek(fpCpy,sizeof(FMT),1);
//跳过FMT,因为FMT已经写入
fwrite(&pcmDATA,sizeof(DATA),1,fpCpy);
//写入DATA;
fclose(fpCpy);
//关闭文件
2 .yc2440开发板下录音
&unistd.h&
&sys/types.h&
&sys/ioctl.h&
&stdlib.h&
&linux/soundcard.h&
&string.h&
/* 录音时间
/* 采样频率
/* 采样位数
CHANNELS 1
/* 声道数*/
用于保存数字音频数据的内存缓冲区
char buf[LENGTH*RATE*SIZE/8];
struct{/*以下代码已略去*/
//用该结构来保存wav头部分里面的前10个字节
{/*以下代码已略去*/
//用该结构来保存wav头部分里面的fmt块
struct {/*以下代码已略去*/
//用该结构来存储wav头部分里面的data块
/* 声音设备的文件描述符
/* 用于ioctl调用的参数*/
/* 系统调用的返回值*/
/* 输出的声音文件*/
saveSize=LENGTH*RATE*SIZE/8; /* 数据大小*/
pcmHEADER;
//unsigned short m_pcmD
打开声音设备 */
= open("/dev/dsp", O_RDWR);
(fd & 0) {
perror("open of /dev/dsp failed");
设置采样时的量化位数*/
status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg);
printf("MIC gain is at %d %%\n",vol);
(status == -1)
perror("SOUND_PCM_WRITE_BITS ioctl failed
(arg != SIZE)
perror("unable to set sample size");
设置采样时的声道数 */
= CHANNELS;
status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS,
(status == -1)
perror("SOUND_PCM_WRITE_CHANNELS ioctl
(arg != CHANNELS)
perror("unable to set number of channels");
设置采样时的采样频率*/
status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg);
(status == -1)
perror("SOUND_PCM_WRITE_WRITE ioctl
printf("Say something:\n");
status = read(fd, buf, sizeof(buf)); /* 将数据读入缓冲区
(status != sizeof(buf))
perror("read wrong number of bytes");
printf("Save as test.wav:\n");
if((out=fopen("./test.wav","wb"))==NULL)
printf("cannot open outfile\n");}
//初始化header部分
/*该部分代码以略去*/
if(fseek(out,sizeof(HEADER),SEEK_SET))
//初始化Fmt部分
/*该部分代码已略去*/
//将FMT写入wav文件中
fwrite(&pcmFMT,sizeof(FMT),1,out);
//DATA部分初始化
/*该部分代码已略去*/
fwrite(buf, sizeof(char),saveSize,out);
/*存至wav中*/
rewind(out);
/*将文件指针定位到文件头*/
fwrite(&pcmHEADER,sizeof(HEADER),1,out);
/*写入header部分*/
fseek(out,sizeof(FMT),1);
fwrite(&pcmDATA,sizeof(DATA),1,out);
/*写入data部分*/
fclose(out);
close(fd);
/*关闭设备录音结束*/
yc2440开发板下放音
&sys/types.h&
&sys/ioctl.h&
&stdlib.h&
&stdint.h&
&linux/soundcard.h&
BUFSIZE 512
//定义缓冲区大小
/*和录音一样定义
header,fmt
data 三种数据结构来
保存wav的头信息
main(int argc, char *argv[])
/*定义所需的各种变量与录音类似*/
struct RIFF_Header riff_
struct Chunk_Header fmt_chunk, data_
struct Wave_F
buf[BUFSIZE];
//和录音一样定义各种放音参数
sndfd, status,
readbytes,
writebytes,
argc & 2 ){ //如果没有带命令行参数报错
fprintf(stderr, "Usage: wavplay
&filename&\n");
= fopen( argv[1], "r"); //以写的方式打开命令行参数里所带的声音文件
fwave == NULL ){
fprintf(stderr, "Can't open file %s\n",
fread(&riff_header, 1, sizeof(struct
RIFF_Header), fwave);
strncmp(riff_header.RIFF_ID, "RIFF", 4) ||
strncmp(riff_header.RIFF_Format, "WAVE",4)){
如果不满足wav文件的标准定义这里显示不可识别的文件形式
fprintf(stderr, "Unknown file format.\n");
= open("/dev/dsp", O_RDWR);
(sndfd & 0) { //以读写方式打开声音设备
perror("open of /dev/dsp failed");
fread(&fmt_chunk, 1, sizeof(struct
Chunk_Header), fwave);
!strncmp(fmt_chunk.Chunk_ID, "fmt ", 4) ){
chunk部分参数读进来并保存
/*该部分代码因与录音类似以略去*/
}else{ //如果不是标准的格式报错
fprintf(stderr, "Can't find fmt chunk.\n");
while( fread(&data_chunk, 1, sizeof(struct
Chunk_Header), fwave) != 0 )
if( !strncmp(data_chunk.Chunk_ID, "data",
//读wav文件里面的PCM数据
printf("Begin Play\n");
/* data chunk */
writed = 0;
while(writed & data_chunk.Chunk_Size){
//当pcm数据未处理完时继续处理
readbytes = fread(buf, 1, BUFSIZE, fwave);
//从声音文件读数据
writebytes = write(sndfd, buf, readbytes);
//将数据写入sndfd声卡设备实施放音
if( writebytes != readbytes )
perror("wrote wrong number of bytes");
/* 格式不对掠过
fseek(fwave, data_chunk.Chunk_Size +
fmt_chunk.Chunk_Size%2, SEEK_CUR);
fclose(fwave); //关闭各设备
close(sndfd);
阅读(10746)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_083070',
blogTitle:'Linux录音详解',
blogAbstract:'1)查看声卡:tong@tfylaptop:~/Documents/机器人舞蹈/程序/MIT/linux/tapping3(NEW)$ arecord -l**** List of CAPTURE Hardware Devices ****card 0: Intel [HDA Intel], device 0: STAC92xx Analog [STAC92xx Analog]& Subdevices: 3/3& Subdevice #0: subdevice #0& Subdevice #1: subdevice #1& Subdevice #2: subdevice #2',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:0,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}Linux下怎么对“本地”声音进行录音?(不是麦克风的录音)_百度知道Linux声音系统单一的问题:跪求不光能录话筒还能录系统声音的录音软件-红联Linux系统门户
您的位置:
&& 查看内容 - - -
Linux声音系统单一的问题:跪求不光能录话筒还能录系统声音的录音软件
dchwlinux发布于
&&字号: &&&&(网友评论&4&条)&
前段时间搜了下Linux下的录屏软件,发现有的能录声音,但是只能录话筒,要是我放一段音乐的话,录像时是录不了的,后来我又想用录音机后台录声音,可是也是只能录话筒里的,audacity也是一样,录音时还不能开别的声音。这样看来Linux的声音系统问题还不小。怪不得先前社区曾批评过声音系统的开发者。不过最近在用ubuntu10.04的时候发现系统自带的totem播放器居然不占用声音了,而且对音乐有预读取功能,把鼠标放在音乐文件上几秒钟就能听到音乐了,不用打开直接就能预听。刚开始的时候我还以为是杂音呢。发现这点小小的变化着实让我兴奋,要知道以前看个网络视频时别的播放器都别想开。声音方面我也很少配,都是默认的。我急求能录系统声音的软件,就是我放个歌玩儿个游戏声音都能录上去。大家知道的说一声。
作者: zcf115&发布日期:
ubuntu的声音预读取9.04就有了。你说的软件我帮你找找看。
作者: dchwlinux&发布日期:
作者: 王中云&发布日期:
作者: GJS&发布日期:
用Cool Edit Pro 可以,电脑的什么声音都可录上。
共有评论数 4/每页显示数 10
发表评论,与各位同人交流。回复请点击下方的我要评论按钮(游客可回复),要发表贴子请点击
Linux教程下载?“”(请点击),Linux教程免费下载。
求助Linux问题?论坛有39版块,覆盖所有Linux技术层面。前往“”
 |  |  |  |  |  |  |  |  |  |  |  | 
&2015 红联 Powered by SupSite

我要回帖

更多关于 ubuntu的linux系统 的文章

 

随机推荐