Мне нужно смоделировать процесс записи аудиофайла, используя существующую запись.
Я запускаю 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: решил закрыть это, поскольку, похоже, он больше не привлекает внимания.