/dev/dspに記録してサウンドを出力

/dev/dspに記録してサウンドを出力

任意のデータを書き込ん/dev/dspでスピーカーからノイズが出ることがあることを知っています。しかし、ファイルにどのデータを渡しても、ノイズは同じです。文章を書いて意味のある音を作り出すことが可能かどうか疑問に思います/dev/dsp

答え1

可能なプログラムにもかかわらず可能です。ファイルを生成するこの種のオリジナルフォーマットです。

どのように機能し、デバイスでサウンド出力用にプログラムする必要があるのか​​に興味がある場合は、ソースコードを確認してください。ソックス。このプログラムは、与えられた入力ファイルをトランスコーディングし、出力を/dev/dsp-t oss

コンソールでサウンドを再生する最も簡単な方法を探している場合は、OSSの代わりにALSAを使用する方が良いかもしれません。aplayalsa-utilsの一部を使用してください。デフォルトでインストールされている可能性が高いです。

答え2

これ高度なbashスクリプトガイド。例29.2:

#!/bin/b[as][1]h
# music.sh

# Music without external files

# Author: Antonio Macchi
# Used in ABS Guide with permission.


#  /dev/dsp default = 8000 frames per second, 8 bits per frame (1 byte),
#+ 1 channel (mono)

duration=2000       # If 8000 bytes = 1 second, then 2000 = 1/4 second.
volume=$'\xc0'      # Max volume = \xff (or \x00).
mute=$'\x80'        # No volume = \x80 (the middle).

function mknote ()  # $1=Note Hz in bytes (e.g. A = 440Hz ::
{                   #+ 8000 fps / 440 = 16 :: A = 16 bytes per second)
  for t in `seq 0 $duration`
  do
    test $(( $t % $1 )) = 0 && echo -n $volume || echo -n $mute
  done
}

e=`mknote 49`
g=`mknote 41`
a=`mknote 36`
b=`mknote 32`
c=`mknote 30`
cis=`mknote 29`
d=`mknote 27`
e2=`mknote 24`
n=`mknote 32767`
# European notation.

echo -n "$g$e2$d$c$d$c$a$g$n$g$e$n$g$e2$d$c$c$b$c$cis$n$cis$d \
$n$g$e2$d$c$d$c$a$g$n$g$e$n$g$a$d$c$b$a$b$c" > /dev/dsp
# dsp = Digital Signal Processor

exit      # A "bonny" example of an elegant shell script!

計算結果についてコメントがありますか?

答え3

少なくともFreeBSDでは、/dev/dsp8000Hzのサンプルレートを持つ8ビット符号なしモノラルオーディオが必要です。既存のファイルを変換します。音楽.m4a、この形式ffmpeg(ヘッダーなしの生オーディオ)の場合は、次のようにします。

ffmpeg -i music.m4a -ar 8000 -ac 1 -c:a pcm_u8 -f u8 music.raw

music.raw結果ファイルは以下を使用して再生できます。

cat music.raw > /dev/dsp

答え4

ALSAを使用している場合は、次のようにaplayを使用できます。

cat foobar.wav | aplay

出力は次のとおりです。

Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo

関連情報