草庐IT

原始PCM录制与播放

lozoho 2023-12-17 原文

arecord 和 aplay 使用说明

来源:https://blog.csdn.net/liupin2008/article/details/124347278

arecord和aplay是alsa-utils一部分,我们在Linux系统下进行音频开发时经常使用,非常方便。
先简单介绍一下。

arecord 采集原始音频
arecord -r 8000 -t raw -c 1 -f S16_BE ./test

aplay 播放原始音频
aplay -t raw -r 8000 -f S16_BE -c 1 ./test

参数说明:
-r 采样频率 8000 48000 44100等
-t 录音文件类型 voc, wav, raw or au
-c 声道数,1:单声道;2:双声道
-f 采样格式,S16:16位; BE: 大端 ; LE: 小端
最后是 文件路径

注意:播放异常时,检查采集时的参数是否和播放时的参数一致。
————————————————

总结

总结一下,pcm原始数据,录制时使用什么参数,播放时一定要设置一样的参数。不然,听到的就是一团噪音。
比如我的PCM文件,录制时使用参数:频率48000Hz,S16_LE。但是播放时使用命令:

aplay pcm_001.pcm

这个命令就是使用aplay默认参数播放pcm_001.pcm,而默认参数是:Unsigned 8 bit, Rate 8000 Hz, Mono

这样显然听到的就是一团的噪音。

应该使用如下命令:

aplay -t raw -r 48000 -f S16_LE -c 1 ./pcm_001.pcm

类比

1.视频采集时的原始数据yuv,也有不同的参数设置比如YUV420,YUV422,YUV444,还有RGB16,RGB24,RGB32,还有不同宽高的设置,等等。播放时同样需要设置,播放器不知道这个视频文件的宽高,数据排列形式,而且参数没有设置对,就会出现花屏。
如果已经封装过的格式,比如MP4,MKV,这些就是已经把宽高,编码格式都写在文件的开头,播放器就会根据文件头的参数设置编码器和解码器,展示的宽高,音频的参数。

2.图片的原始数据raw,各大相机厂商有不同的格式,比如索尼的ARW,佳能CR2,索尼有自己的软件可以打开这种文件,佳能也有。但是PS的camera raw集成了各家厂商的软件,全部都可以打开并且显示出来。这些原始数据,其实就是二进制数据的集合,各家厂商在文件开头写入了设备的参数,比如设备型号,光圈,快门这些参数。
如果采用压缩格式JPEG保存照片,由于JPEG是一个公开的图片格式,按照固定的格式储存了宽高参数,所以任意一款图片浏览器都可以打开。

有关原始PCM录制与播放的更多相关文章

  1. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

  2. ruby - 如何以编程方式将 mp3 转换为 itunes 可播放的 aac/m4a 文件? - 2

    我一直在寻找一种以编程方式或通过命令行将mp3转换为aac的方法,但没有成功。理想情况下,我有一段代码可以从我的Rails应用程序中调用,将mp3转换为aac。我安装了ffmpeg和libfaac,并能够使用以下命令创建aac文件:ffmpeg-itest.mp3-acodeclibfaac-ab163840dest.aac当我将输出文件的名称更改为dest.m4a时,它无法在iTunes中播放。谢谢! 最佳答案 FFmpeg提供AAC编码功能(如果您已编译它们)。如果您使用的是Windows,则可以从here获取完整的二进制文件。

  3. ruby - 从 ruby​​ block 更改原始变量? - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:'passparameterbyreference'inRuby?在这个例子中:deftestverb='nothing'yieldverbputsverbendtest{|verb|verb='something'}它将打印“无”。是否可以将其更改为“某物”?谢谢

  4. ruby - 为什么 String::sub!() 会更改 Ruby 中克隆对象的原始对象? - 2

    我的Ruby代码中有一个看起来有点像这样的结构Parameter=Struct.new(:name,:id,:default_value,:minimum,:maximum)稍后,我使用创建了这个结构的一个实例freq=Parameter.new('frequency',15,1000.0,20.0,20000.0)在某些时候,我需要这个结构的精确副本,所以我调用newFreq=freq.clone然后,我更改newFreq的名称newFreq.name.sub!('f','newF')奇迹般地,它也改变了freq.name!像newFreq.name='newFrequency'这样

  5. ruby - 如何播放 mp3 文件? - 2

    我如何用ruby​​编写一个脚本,当从命令行执行时播放mp3文件(背景音乐)?我试过了run="mplayer#{"/Users/bhushan/resume/m.mp3"}-aosdl-vox11-framedrop-cache16384-cache-min20/100"system(run)但它也不起作用,以上是播放器特定的。如果用户没有安装mplayer怎么办。有没有更好的办法? 最佳答案 我一般都是这样pid=fork{exec'mpg123','-q',file} 关于ruby

  6. ruby - 如何从 Rack 获取原始格式的请求 header ? - 2

    我正在尝试使用Ruby从Rack获取原始格式的请求header,但还没有弄清楚。我从request.env得到的散列不是我想要的。在该散列中,header键被大写并使用下划线而不是破折号,如下所示:"CONTENT_TYPE"=>"应用程序/json;字符集=utf-8"我想要的是处理前的header,我正在寻找:"Content_Type"=>"application/json;charset=utf-8"我可以很容易地循环遍历request.env寻找以HTTP_开头的header并将它们拆分,将每个单词和gsub大写以将下划线替换为破折号以使它们成为我想要的格式。在处理标题时,以

  7. ruby-on-rails - 如何从服务器目录制作 Paperclip 进程文件? - 2

    我想对服务器目录中的所有文件运行Paperclip。基本上,我想允许用户将一些文件通过FTP传输到我的网络服务器,然后我可以手动运行rake任务让Paperclip处理所有文件(调整图像大小、更新数据库等)。我该怎么做? 最佳答案 我不确定我是否理解您的问题-您是在询问远程运行rake任务还是如何导入图像?在后一种情况下有一个答案。首先你需要一些模型来保存图像和一些其他数据,像这样:classPicture{:thumb=>"100x100>",:big=>"500x500>"}end您可以在lib/tasks文件夹中创建简单的ra

  8. ruby 声音播放 - 2

    这是2009年,早在2001年左右,ruby中的声音播放就没有好的绑定(bind)。有变化吗?我正在寻找可以控制原始声音或mp3、ogg和flac播放的东西。我的谷歌搜索已经枯竭。编辑:Linux、OSX,如果可能的话还有Windows。 最佳答案 您没有提到平台。Thispage描述了win32-sound库,它似乎至少支持WAV播放。对于一个更加平台中立的方式,Ruby/SDL为广受欢迎的SDL提供绑定(bind)图书馆。 关于ruby声音播放,我们在StackOverflow上找到

  9. ruby-on-rails - 是否可以在 Rails 中获取原始参数字符串? - 2

    给定以下网址:http://foo.com?bar=1&wee=2从操作中获取url的原始参数部分的最快方法是什么?即?bar=1&wee=2 最佳答案 当然,只需在您的Controller中使用request.query_string 关于ruby-on-rails-是否可以在Rails中获取原始参数字符串?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/399290/

  10. ruby - Ruby 中已排序元素的原始索引 - 2

    arr=[1,3,2,4]arr.sort#=>[1,2,3,4]我想要一个数组[0,2,1,3](原始索引按arr.sort顺序排列)在Ruby1.9.3中有没有一种简单的方法可以做到这一点?谢谢 最佳答案 xs=[1,3,2,4]original_indexes=xs.map.with_index.sort.map(&:last)#=>[0,2,1,3] 关于ruby-Ruby中已排序元素的原始索引,我们在StackOverflow上找到一个类似的问题:

随机推荐