Есть ли у Delphi будущее? Голосуйте!
NewAC
Page
NewAC
Documentation in English
Какова минимальная латентность при воспрозведении и записи звука с помощью DirectSound?
Как сохранить фрагмент аудио-файла?
Как превратить «сырое» аудио в файл wav (или другой формат)?
Как с помощью NewAC и Delphi записать передачу сетевой радиостанции?
Практика показывает, что даже на медленных компьютерах при воспроизвдении аудио из файла свойство Latency клмплнента TDxAudioOut можно уатновить равным 60 (задержка 0.06 секунды). Для компонента TDxAudioIn (запись) этому свойству можно присвоить значение 80 (задержка 0.08 секунды). При работе с стетью лучше использовать значение 100, что составляет 0.1 секунды.
Допустим, у вас есть файл flac 44100 Гц и вы хотите сохранить десятую секунду из этого файла в формате wav. Создайте цепочку TFLACIn -> TWaveOut, установите свойство TFLACIn.StartSample = 441000 (начало 10-й секунды), а свойство TFLACIn.EndSample = 485100 (начало 11-й секунды) и командуйте WaveOut.Run.
Предположим, у вас на диске записан файл сырого аудио (целочисленные чередующиеся аудио-семплы) и вы хотите конвертировать этот файл в один из аудио-форматов, поддерживаемых NewAC, например, в формат wav. Для этого нужно воспользоваться двумя компонентами: TStreamIn и TWaveOut. Компонент TStreamIn позволяет читать аудио из объекта-потока (TFileStream, TMemoryStream, TResourceStream и т.п.). Компонент TWaveOut сохраняет аудио-данные в формате wav. Размещаем эти компоненты в форме:
Свойству Input объекта WaveOut1 назначаем ссылку на объект StreamIn1. Для сохранения сырого аудио в формате wav напишем такой код:
var FS : TFileStream; begin // Открываем файл "сырого" аудио в объекте-потоке для чтения FS := TFileStream.Create('samples.raw', fmOpenRead); // Присваиваем ссылку на объект-поток свойству Stream объекта StreamIn1 StreamIn1.Stream := FS; // Объект StreamIn1 "не знает" таких параметров аудио как количество бит на семпл, // частота дискретизации и количество каналов. Мы должны сообщить ему эти данные. StreamIn1.InBitsPerSample := 16; StreamIn1.InSampleRate := 44100; StreamIn1.InChannels := 2; // Назначаем имя файла для сохранения данных в формате wav WaveOut1.FileName := 'samples.wav'; // Запускаем процесс преобразования WaveOut1.Run; end;
Метод Run сразу же возвращает управление, а сам процесс преобразования выполняется в отдельном потоке. По завершении процесса будет вызвано событие OnDone объекта WaveOut1.
В состав NewAC входит компонент TWMStreamedIn, который позволяет записывать и прослушивать передачи сетевых радиостанций, транслируемые в форматах WMA и mp3. Компонент TWMStreamedIn работает так же, как и компоненты, предназначенные для чтения данных с диска, только свойству FileName присваивается не имя файла, а сетевая ссылка на сервер радиостанции. Полученные из сети данные компонент декодирует в обычный аудио-поток который можно прослушивать, конвертировать и сохранять в различных форматах с помощью других компонентов New Audio Components. Одна из тонкостей, связанных с компонентом TWMStreamedIn заключается в том, какую именно ссылку следует передавать свойству FileName. Обычно ссылки на радио в интернете имеют вид http://www.site.com/radio.asax или http://www.site.com/radio.m3u такие ссылки (и им подобные) указывают не на сами серверы, транслирующие интернет-радио, а на «интернет-ярлыки» - XML-файлы. в которых содержатся описания радиостанции и прямые ссылки на серверы. Свойству FileName компонента TWMStreamedIn следует присваивать прямую ссылку на сервер, а не ссылку на ярлык (извлекать ссылки из файлов-ярлыков сам компонент пока не умеет). Прямая ссылка на сервер-источник сетевого аудио выглядит так: http://joe.relay.c9radio.net:8000/ или так: mms://livewmstream-ws.bbc.co.uk.edgestreams.net/reflector:38288. Эти ссылки и следует назначать свойству FileName.
В пакет NewAC входит демо-программа, которая показывает, как можно одновременно прослушивать и сохранять на диске (в формате WMA) передачи сетевых радиостанций с помощью компонента TWMStreamedIn (эта программа расположена в каталоге demos\Recorders-Rippers\RadioRecorder). Для упрощения тестирования вместе с этой программой поставляется файл station.ini, который содержит прямые ссылки на несколько серверов сетевого радио. В процессе запуска программа RadioRecorder считывает содержимое этого файла и позволяет выбрать одну из предустановленных ссылок. Если вы пишете собственную программу прослушивания/записи сетевого радио с помощью компонента TWMStreamedIn, вы, конечно, можете придумать другой механизм передачи ссылок компоненту.
Еще про NewAC по-русски Страница NewAC На главную
© 2008 Андрей Боровский <anb @ symmetrica.net>