나는 ices2와 icecast2를 처음 사용하지만 이어폰에서 내 목소리를 들을 수 있는 스트림을 설정했습니다. 따라서 시스템은 몇 가지 기본적인 성공을 거두었습니다. 이제 실제 목표는 다음과 같습니다.
Zoom R16 레코더의 오디오 인터페이스 기능을 사용하여 8가지 언어를 스트리밍하려고 합니다. arecord --dump-hw-params hw1,0
R16에서 실행 하면 다음이 반환됩니다.
Recording WAVE 'hw1,0' : Unsigned 8 bit, Rate 8000 Hz, Mono
HW Params of device "default":
--------------------
ACCESS: RW_INTERLEAVED
FORMAT: U8 S16_LE S16_BE S24_LE S24_BE S32_LE S32_BE FLOAT_LE FLOAT_BE MU_LAW A_LAW S24_3LE S24_3BE
SUBFORMAT: STD
SAMPLE_BITS: [8 32]
FRAME_BITS: [8 1024]
CHANNELS: [1 32]
RATE: [1 384000]
PERIOD_TIME: (2 4294967295)
PERIOD_SIZE: [1 1398102)
PERIOD_BYTES: [128 1398102)
PERIODS: [3 1024]
BUFFER_TIME: (7 4294967295]
BUFFER_SIZE: [3 4194304]
BUFFER_BYTES: [384 4194304]
TICK_TIME: ALL
--------------------
질문 1:예를 들어 사이에 공백이 있는 숫자는 무엇을 의미합니까 SAMPLE_BITS: [8 32]
? 이는 샘플 비트가 8, 16 또는 32일 수 있다는 의미입니까?
질문 2:"alsa/alsa_open_module 샘플 형식을 입력하는 동안 오류가 발생했습니다. 사용할 수 없습니다: 잘못된 인수" 해결 방법
ices2를 시작하려고 하면 종료되고 로그에 다음과 같이 표시됩니다.
[2023-12-10 20:48:46] INFO ices-core/main IceS 2.0.3 started...
[2023-12-10 20:48:46] EROR input-alsa/alsa_open_module Sample format not available: Invalid argument
[2023-12-10 20:48:46] EROR input/input_loop Couldn't initialise input module "alsa"
[2023-12-10 20:48:46] INFO ices-core/main Shutdown complete
ices2에 사용하는 구성 파일은 다음과 같습니다.
<?xml version="1.0"?>
<ices>
<!-- run in background --> <background>0</background>
<!-- where logs go. --> <logpath>/var/log/ices2</logpath>
<logfile>ices.log</logfile>
<!-- size in kilobytes --> <logsize>2048</logsize>
<!-- 1=error, 2=warn, 3=infoa ,4=debug --> <loglevel>4</loglevel>
<!-- logfile is ignored if this is set to 1 --> <consolelog>0</consolelog>
<!-- optional filename to write process id to --> <pidfile>/var/log/ices2/ices.pid</pidfile>
<stream>
<!-- metadata used for stream listing -->
<metadata>
<name>8 Languages</name>
<genre>Dharma Teaching</genre>
<description>Translation of 2024 International Spring Festival</description>
<url>http://localhost/</url>
</metadata>
<!-- Input module.
This example uses the 'alsa' module. It takes input from the
ALSA audio device (e.g. line-in), and processes it for live
encoding. -->
<input>
<module>alsa</module>
<param name="rate">48000</param>
<param name="channels">8</param>
<param name="device">hw:1,0</param>
<param name="periods">2</param>
<!-- Read metadata (from stdin by default, or -->
<!-- filename defined below (if the latter, only on SIGUSR1) -->
<param name="metadata">1</param>
<param name="metadatafilename">testES</param>
</input>
<!-- Stream instance.
You may have one or more instances here. This allows you to
send the same input data to one or more servers (or to different
mountpoints on the same server). Each of them can have different
parameters. This is primarily useful for a) relaying to multiple
independent servers, and b) encoding/reencoding to multiple
bitrates.
If one instance fails (for example, the associated server goes
down, etc), the others will continue to function correctly.
This example defines a single instance doing live encoding at
low bitrate. -->
<instance>
<!-- Server details.
You define hostname and port for the server here, along
with the source password and mountpoint. -->
<hostname>localhost</hostname>
<port>8000</port>
<password>hackme</password>
<mount>/spanish.ogg</mount>
<yp>1</yp> <!-- allow stream to be advertised on YP, default 0 -->
<!-- Live encoding/reencoding:
channels and samplerate currently MUST match the channels
and samplerate given in the parameters to the alsa input
module above or the remsaple/downmix section below. -->
<encode>
<quality>0</quality>
<samplerate>24000</samplerate>
<channels>8</channels>
</encode>
<!-- stereo->mono downmixing, enabled by setting this to 1 -->
<downmix>0</downmix>
<!-- resampling.
Set to the frequency (in Hz) you wish to resample to, -->
<resample>
<in-rate>48000</in-rate>
<out-rate>24000</out-rate>
</resample>
</instance>
</stream>
</ices>
그러나 일반적으로 내가 알고 싶은 것은 다음과 같습니다.
질문 3:레코더의 채널 1은 스페인어로, 채널 2는 프랑스어로, 채널 3은 독일어로, 채널 8은 스트리밍할 수 있도록 구성 파일을 입력해야 합니다. 실제로 8개의 서로 다른 프로필이 필요하고 8개의 ices2 인스턴스를 실행한다고 가정합니다. 그런데 적절한 채널을 어떻게 선택합니까?
편집: 또한 이 방법은 8채널 wav 파일을 녹음하는 데에도 효과적이라고 말할 수 있습니다.
arecord -D hw:1,0 -f S32_LE -r 48000 -c 8 testr16.wav
답변1
좋습니다. 우리는 주로 다음과 같은 핵심 영역을 포함하여 작업을 시작했습니다.
- ALSA 수준에서 스트림 분할 ( 분할을
~/.asoundrc
위해 ) 하드웨어 장치의 모든 스트림은 동일한 ipc_key를 사용해야 합니다.dsnoop
- ices2 구성 파일에서
--device는plug:{name from .asoundrc}
--올바른 채널을 가져옵니다. 저는 8채널로 설정했습니다. 비록 alsa가 이제 단일 채널 pcm을 제공하지만 이로 인해 스트리밍하는 동안 삐걱거리는 소음이 발생합니다! /etc/icecast2/icecast.xml
증가 해야 한다<sources>8</sources>
이것이 최종입니다 ~/.asoundrc
. 모든 dsnoop 채널은 동일한 하드웨어 장치에서 나오므로 다음 사항이 필요합니다.동일한ipc_key. 그렇지 않은 경우 한 채널에서 녹화를 시작하면 나머지 채널은 다음과 같이 보고됩니다.기기가 사용 중입니다..
pcm_slave.r16 { pcm "hw:1,0"; rate 48000; channels 8 }
pcm.ch1 { type dsnoop; ipc_key 3700; slave r16; bindings.0 0; }
pcm.ch2 { type dsnoop; ipc_key 3700; slave r16; bindings.0 1; }
pcm.ch3 { type dsnoop; ipc_key 3700; slave r16; bindings.0 2; }
pcm.ch4 { type dsnoop; ipc_key 3700; slave r16; bindings.0 3; }
pcm.ch5 { type dsnoop; ipc_key 3700; slave r16; bindings.0 4; }
pcm.ch6 { type dsnoop; ipc_key 3700; slave r16; bindings.0 5; }
pcm.ch7 { type dsnoop; ipc_key 3700; slave r16; bindings.0 6; }
pcm.ch8 { type dsnoop; ipc_key 3700; slave r16; bindings.0 7; }
ALSA를 다시 시작하는 것을 잊지 마세요:sudo /etc/init.d/alsa-utils restart
그런 다음 8개의 독립적인 ices2 구성 파일을 만들었습니다.
ices-alsa-r16.1.xml
ices-alsa-r16.2.xml
...
ices-alsa-r16.8.xml
이것이 구성 파일입니다. 변경된 세 가지 사항은 장치, 마운트 및 PID입니다.
장치: plug:ch1
마운트 plug:ch8
: ch1.ogg
PID 파일 ch8.ogg
:r16.1.pid
r16.8.pid
<?xml version="1.0"?>
<ices>
<!-- run in background -->
<background>1</background>
<logpath>/var/log/ices2</logpath>
<logfile>ices.log</logfile>
<logsize>2048</logsize>
<loglevel>4</loglevel>
<consolelog>0</consolelog>
<pidfile>/var/log/ices2/r16.8.pid</pidfile>
<stream>
<metadata>
<name>8 Languages</name>
<genre>Dharma Teaching</genre>
<description>Translation of 2024 International Spring Festival</description>
<url>http://localhost/</url>
</metadata>
<input>
<module>alsa</module>
<param name="rate">48000</param>
<param name="channels">1</param>
<param name="device">plug:ch8</param>
<param name="periods">3</param>
<param name="buffer-time">500</param>
</input>
<instance>
<hostname>localhost</hostname>
<port>8000</port>
<password>hackme</password>
<mount>/ch8.ogg</mount>
<encode>
<quality>0</quality>
<samplerate>24000</samplerate>
<channels>1</channels>
</encode>
<resample>
<in-rate>48000</in-rate>
<out-rate>24000</out-rate>
</resample>
</instance>
</stream>
</ices>
여기에 좋은 정보가 있습니다:
https://alsa.opensrc.org/Asoundrc
https://bootlin.com/blog/audio-multi-channel-routing-and-mixing-using-alsalib/