【问题标题】:Recording each channel using ALSA API使用 ALSA API 记录每个通道
【发布时间】:2014-04-01 20:01:01
【问题描述】:

我正在使用游戏机的眼睛,插入树莓派。我让树莓派识别 PSEye 的内置麦克风阵列,我可以使用

对输入电平进行采样
arecord -vv /dev/null -r 16000 -f S16_LE -c 4 -D iec958:CARD=CameraB409241,DEV=0 /dev/null < /dev/null

现在显然这显示了所有 4 个通道的电平相加。我想做的是分别记录每个频道。这可以使用 ALSA API 吗?

我看过这个http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html

看看这个http://www.linuxjournal.com/article/6735?page=0,2

但两者似乎都不是我需要的。我想这也类似于通过 ALSA 对立体声麦克风的两个通道进行采样。最终,我希望能够在特定时间点对每个麦克风的 dB 进行采样。

【问题讨论】:

  • 您是要录音,还是显示输入电平?
  • 我不想将它保存到文件中,不,我需要对每个麦克风的声级进行处理,所以只显示每个级别就更需要了..
  • 什么样的处理?
  • 我希望能够使用声压值进行波束成形技术。
  • 该示例程序有什么问题?只需将两个替换为四个即可。

标签: audio signal-processing raspberry-pi alsa pulseaudio


【解决方案1】:

如果你想将每个通道录制成独立的音频文件,那么你可以使用这个应用程序:

https://github.com/flatmax/gtkiostream/blob/master/applications/ALSACaptureSplitter.C

需要编译,这里有描述: https://lists.audioinjector.net/pipermail/people/2020-March/000028.html

要使用应用程序,请指定基本文件名和扩展名,例如: ALSACaptureSplitter /tmp/test wav

它可以录制成多种不同的音频文件格式。

您可以使用选项来更改设备,指定录制时间,频道数等。这是应用程序打印出来的帮助:

     ./applications/ALSACaptureSplitter -h
     ALSACaptureSplitter : An application to capture input and save to 
 independent files.
    Usage:
         ALSACaptureSplitter [options] outFileNamePrefix ext
         e.g. ALSACaptureSplitter [options] /tmp/out wav
         -D : The name of the device : (-D hw:0)
         -c : The number of channels to open, if the available number is less, then it is reduced to the available : (-c 2)
         -t : The duration to sample for : (-t 2.1)
         -r : The sample rate to use in Hz : (-r 48000)
    AUDIO FILE FORMATS:The known output file extensions (output file formats) are the following :
    8svx aif aifc aiff aiffc al amb amr-nb amr-wb anb au avr awb caf cdda cdr cvs cvsd cvu dat dvms f32 f4 f64 f8 fap flac fssd gsm gsrt hcom htk ima ircam la lpc lpc10 lu mat mat4 mat5 maud mp2 mp3 nist ogg paf prc pvf raw s1 s16 s2 s24 s3 s32 s4 s8 sb sd2 sds sf sl sln smp snd sndfile sndr sndt sou sox sph sw txw u1 u16 u2 u24 u3 u32 u4 u8 ub ul uw vms voc vorbis vox w64 wav wavpcm wv wve xa xi 

【讨论】:

【解决方案2】:

要为每个通道读入单独的缓冲区,请将 SND_PCM_ACCESS_RW_INTERLEAVED 替换为 SND_PCM_ACCESS_RW_NONINTERLEAVED,并将 snd_pcm_readi 替换为 snd_pcm_readn

【讨论】:

  • 配置中有吗?命令行界面?
  • @Rougher 这是关于应用程序和库之间的接口。不受外界影响。
  • 我还需要单独记录每个通道但要单独的文件。我在哪里可以开始阅读它,因为我不明白你的答案?谢谢。
  • 即使它可以是同一个文件,但如果可能的话,使用不同的通道。
  • stackoverflow.com/questions/65439370/… 也许你可以在这里提供帮助。谢谢
猜你喜欢
  • 2021-01-15
  • 2014-10-11
  • 1970-01-01
  • 2014-09-11
  • 2013-01-18
  • 2015-03-18
  • 2015-07-30
  • 2021-06-02
  • 2015-06-26
相关资源
最近更新 更多