Выходной звук путем записи в/dev/dsp

Когда Вы используете dd на /dev/sdb вместо /dev/sdb1 или /dev/sdb2, Вы копируете все разделы с упомянутого диска в один файл.

Необходимо смонтировать каждый раздел отдельно.


Для монтирования раздела из файла необходимо сначала узнать, где в файле, что раздел находится.

Используя Ваш вывод от file -s sdb.img мы находим startsectors для каждого раздела:

sdb.img: загрузочный сектор x86; раздел 1: ID=0x12, starthead 1, startsector 63, 10 233 342 сектора; раздел 2: ID=0xc, активный, starthead 0, startsector 10233405, 72 517 410 секторов; раздел 3: ID=0xc, starthead 0, startsector 82750815, 73 545 570 секторов, код сместил 0xc0

Раздел     Startsector
1                   63
2                   10233405
3                   82750815

Смонтировать единственный раздел, где X startsector того раздела, выполненного:

mount ~/sdb.img /mnt/sdb -o offset=$((X*512))

Таким образом для монтирования второго раздела необходимо будет работать:

mount ~/sdb.img /mnt/sdb2 -o offset=$((10233405*512))

заметка на полях: удостоверьтесь это /mnt/sdb2 существует перед выполнением этого.

Развлекайтесь!


обновление: В ответе я предположил, что размер сектора для Вас отображает, был 512, посмотрите этот вопрос о том, как вычислить это.

5
02.08.2011, 11:45
4 ответа

Это должно быть возможно, хотя я не столкнулся ни с какой программой для генерации файла в этом типе формата .raw.

Если Вы просто интересуетесь тем, как это работает и что должно быть записано, делают устройство, чтобы иметь звуковой вывод, можно изучить исходный код носков. Эта программа может использоваться, чтобы транскодировать данный входной файл и играть его выводом к /dev/dsp. (Запустите программу с -t oss опция).

Если бы Вы просто ищете самое простое для проигрывания звука от консоли, Вы были бы, вероятно, очень более обеспеченным использованием ALSA вместо OSS. Использовать aplay это - часть alsa-utils. Вам по всей вероятности просто установят его по умолчанию.

4
27.01.2020, 20:40

расширенное руководство по написанию сценариев на 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!

Есть ли комментарии к вычислениям ...

1
27.01.2020, 20:40

Если вы используете ALSA, вы можете использовать такую ​​игру, как:

cat foobar.wav | aplay

Результат выглядит так:

Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
0
27.01.2020, 20:40

По крайней мере, во FreeBSD /dev/dspожидается 8-битное -беззнаковое монофоническое аудио с частотой дискретизации 8000 Гц. Чтобы преобразовать существующий файл, например. music.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
1
13.03.2020, 20:20

Теги

Похожие вопросы