Назад | Перейти на главную страницу

cat аудиофайл в микрофон / записывающее устройство

Мне нужно смоделировать процесс записи аудиофайла, используя существующую запись.

Я запускаю ubuntu 8.10 и думал, что это будет довольно просто, но теперь это, похоже, не так просто.

Моя «концепция» того, чем я хочу заниматься, такова:


$ cat myaudio.wav > /dev/mic

Есть другая программа, которая слушает / ожидает ввода.

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


$ cat /dev/dsp > myfile.au 

для захвата необработанного ввода и


$ cat myfile.au > /dev/dsp

для потоковой передачи записанного входного сигнала на мои динамики, поэтому я немного не понимаю, почему я не могу сделать что-то аналогичное с функцией микрофона / записи? Я до сих пор почти ничего не знаю о звуках низкого уровня в Linux, но мне кажется странным, что это невозможно.

Замените узел устройства чем-нибудь другим

Отодвиньте узел устройства или перекомпилируйте звуковую библиотеку, чтобы открыть что-нибудь еще. Таким образом, вы можете вставить свой собственный FIFO, звуковой драйвер с фиктивной петлей или что-то в этом роде.

Vsound также поможет вам в этом. И что самое интересное, вы можете зациклить звук на что угодно. попробуйте. vsound.org

PulseAudio позволит вам это сделать, если ваш инструмент записи также использует PulseAudio. Я уверен, что ALSA можно настроить на использование другого источника звука. Я предполагаю, что ответ действительно зависит от того, какое приложение вы используете для записи и какой стек они используют.

Запишите себя, играя это

Проверьте, не можете ли вы установить источник записи на выход, затем Сыграй. Я думаю, что это обычная особенность звуковых карт, но вам придется убедить оборудование сделать это.

Первым шагом была установка пакета alsa-utils (при условии, что RHEL / CentOS и только командная строка): yum install alsa-utils

Затем включите воспроизведение с помощью текстового пользовательского интерфейса командной строки микшера alsa: alsamixer

Для проверки настроек я использовал утилиту тестирования динамиков: Speaker-test -c2

Немного увлекся тем, что на самом деле может делать тест динамика, поэтому вот забавный тест, который будет раздражать маленьких животных: динамик-тест -c2 -t sine -f 4400

Последняя часть заключалась в том, чтобы проверить, работает ли запись с помощью этой команды: arecord -v -f cd> soundfile.sound

И воспроизведите его с помощью: aplay soundfile.sound

Спасибо за все ответы. Это оказался весьма полезный опыт. В частности, я узнал, что в linux все еще есть некоторые непонятные области, и настройка звука (возможно, самая большая) одна из них.

Достаточно легко перехватить ввод микрофона в файл (или сокет), и интуитивно должно быть так же просто переместить файл во все, что микрофон читает, - чтобы все, что читает с микрофона, могло прочитать указанный звуковой файл. Однако, к сожалению, это не так.

В результате я модифицировал программу прослушивания, чтобы она могла прослушивать сокет, а не исходный микрофонный вход. Затем я написал простой клиент Perl для перенаправления микрофонного входа в сокет,



#!/usr/bin/perl -w                                                                                                           
use strict;
use warnings;
use IO::Socket;

my $dspdev = '/dev/dsp';
my $port   = 8000;
my $host   = "127.0.0.1";

my $sock = new IO::Socket::INET(
    PeerAddr => $host,
    PeerPort => $port,
    Type     => SOCK_STREAM,
    Proto    => "tcp",
    ) || die "Couldn't open socket: $!\n";

open(DSP, "<", $dspdev)||die "can't open $dspdev: $!\n";

while( 1 ) {
    my $rbuf = "";
    sysread(DSP, $rbuf, 4096);
    syswrite($sock, $rbuf);
}

На данном этапе это все, что мне нужно, однако, похоже, это потребовало немного больше усилий, чем следовало бы. Я нашел решение, но на самом деле не ответил на свой первоначальный вопрос, поэтому оставлю его открытым.

edit: решил закрыть это, поскольку, похоже, он больше не привлекает внимания.