エンターテイメントのために/dev/snd/でランダムノイズを生成する

エンターテイメントのために/dev/snd/でランダムノイズを生成する

最近、私は魔法の/ devフォルダを探しています。ノイズを発生させるためにオーディオデバイスにランダムなデータを書きたいです。

私はALSAを使用しています。

だから私はcatにランダムなデータを/ devフォルダのプレイファイルにパイプするように指示します。

 cat file-of-random-data > /dev/snd/pcmC0D0p

その後、猫からエラーが発生しました。

 cat: write error: File descriptor in bad state

サウンドカードから素晴らしい静的再生サウンドを得るために、この問題をどのように解決しますか?

答え1

これがうまくいかない理由は、インターフェイスが使用されなくなったためだと思います。/dev/dsp少なくとも厳しい状況では、通常、これ以上オーディオを作成するために使用することはできません。

あなたのシステムにこれを行うことができるプログラムがありますpadsp。これにより/dev/audio、または/dev/dspファイルが新しいオーディオサーバーシステムにマップされます。

端末を起動し、 を使ってルートモードに入りますsudo su

次にcat /dev/urandom出力をにパイプpadspし、コマンドを使用してteeデータを送信します/dev/audio。端末にゴミが多いため、にリダイレクトする必要があります/dev/null

スーパーユーザーになったら、次のコマンドを試してください。

cat /dev/urandom | padsp tee /dev/audio > /dev/null

マウスなどの他のデバイスを試すこともできます。/dev/psauxたとえば、以下を使用するか、USBドライバを使用します。これにより、メモリを実行することもできます。 /dev/mem

以前はうまくいかなかった理由が明確になることを願っています。

個人的にはランダムな静的なプレイよりもマウスやメモリが楽しいと思います!

答え2

cat /dev/urandom | aplay 入力する必要があるコマンドです。オーディオグルー​​プに属していない場合は、aplayの前にsudoを付けることができます。これもデーモンを妨げません(pulseaudioこのコマンドがアクティブな間は実行中で、「ノイズ」が正しく聞こえます)。

編集(2019年8月6日):以前のバージョンのコマンドにはpadsp tee。実際、この分野で働いて、これがまったく話にならないことに気づきました。また、更新されたコマンド(現在、この回答の冒頭に表示されているコマンド)が職場で1日に複数回使用されるために機能することがわかります。cataplay

答え3

/dev/audioまたは/dev/sndで他のデバイスのいずれかを試してください。これらはすべてオーディオデータシンクではなく、ミキサー、マイクなどをキャプチャした可能性があります。

答え4

修正する(2020-12-25):stdinからstdoutにデータを渡し、PCMファイルの場合はstdoutを設定するシェルスクリプトを作成しました。確認するhttps://github.com/psqli/pcmsh

重要な要約:データを読み書きする前に、デバイスのパラメータを設定する必要があります。

ステップバイステップ:

  1. PCMデバイスの電源を入れます。たとえば: fd = open("/dev/snd/pcmC0D0p", O_RDWR)。オンの場合はPCMOPEN状態です。

  2. 設定パラメータを使用してくださいioctl(fd, SNDRV_PCM_IOCTL_HW_PARAMS, (struct snd_pcm_hw_params*) p)。ハードウェアパラメータ構造にはマスク(各ビットは値です)間隔([最小、最大]範囲)。設定されていないパラメータは入力する必要があります(マスクに設定されているすべてのビット/値、範囲全体の間隔)。ハードウェアパラメータを設定した後、PCMSETUP状態になります。バラよりpcm_set_config()TinyALSAのコードです。

    ACCESS、、、FORMATおよびRATE設定CHANNELSで十分PERIOD_SIZEですPERIODS。他のパラメータはこれらのパラメータの変形です。ただし、BUFFER_SIZE一部の機器では非多重に設定できますPERIOD_SIZE

  3. ioctl(fd, SNDRV_PCM_IOCTL_PREPARE)デバイスとALSAランタイム変数を準備するために呼び出されます。それ以降はPCM状態になりますPREPARED

  4. 読み取り(キャプチャ)または書き込み(再生)を開始します。

PCMデバイスを読み書きする最小アプリケーションのコードのほとんどは、ハードウェアパラメータを中心にしています。

関連情報