/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/dsp샘플 속도가 8000Hz인 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

관련 정보