-
Суть вопроса вот в чём. Я решила сделать программу для изменения голоса. На форуме много чего есть, но это не то, что нужно. Для её создания я взяла компоненты DE-Audio. Разобраться в них было несложно, но возникли некоторые проблемы. 1)Неизвестно как синхронизировать моменты перезаписи буфера. Т.е. когда я считываю информацию со входного буфера, чтобы её изменить, он может быть ещё не перезаписан, или наоборот изменён дважды. Счётчики и таймеры толку не дают. Тоже самое и с выходом. deAudioConvertor1.ConvertAudio(SND,G) если G слишком большое, то происходят большие задержки (то же и со входным буфером), а если маленькое, то появляются разрывы звука, или при частом вызове этой функции воспроизведение встаёт в очередь и даже после прекращения выполнения обработки звук воспроизводится. 2)Решение 1 проблемы я нашла в ConvertAudioStream и OutputStream, но пытаясь просто воспроизвести входящий поток без изменений вылетает ошибка, будто SOut=nil, хотя в нём данные:
SOut:TStream;
...
SOut:=deAudioConvertor2.OutputStream;
deAudioConvertor1.ConvertAudioStream(SOut);
-
> когда я считываю информацию со входного буфера
А когда ты ее считываешь ? Полагаю, с обработчике соотв.события ?
-
Считываю с помощью долгих "плясок с бубном".
I = array[0..2204] of Smallint;
MYZ = ^I;
...
zyg:MYZ;
DIG:pointer;
...
DIG:=deAudioConvertor1.BufferOut;
zyg:=DIG;
for ffd:=0 to 10 do
Label1.Caption:=Label1.Caption+ ' ' + inttostr(zyg^[ffd]);
Наверное это не совсем правильно.
-
Что-то я не пойму нашиша тебе понадобился конвертер вообще ?
У TdeAudioIn есть св-во Format, где можно выбрать нужный формат захватываемых аудиоданных (из списка доступных штатных кодеков)
Остается только обрабатывать событие OnAudioRecorded, параметрами которого тебе передается адрес буфера захваченных данных (в указанном тобой формате) AudioData и размер данных в этом буфере AudioDataSize. При получении управления в этом обработчике следует максимально шустро скопировать к себе эти данные для дальнейшей их обработки уже вне контекста этого обработчика.
Ы ?
-
А вообще говоря компоненты пакета deAudio не приспособлены идеальным образом для DSP в реальном режиме времени - даже без какого-либо этапа обработки будут неизбежны ощутимые задержки (десятки миллисекунд) между вводом и выводом. Для таких задач следует использовать ASIO-интерфейс и соответствующее (т.е. поддерживающее ASIO) аудиооборудование. Технологию ASIO поддерживает, например, пакет компонентов NAC (New Audio Components)
-
Через конвертер звук лучше идёт. Если, например, подключить напрямую deAudioIn к deAudioOut то звук будет сильно искажаться. К задержкам моя задача не критична. Даже 50мс это вполне нормально, да и 100. На деле незаметно. Проблема в плавном изменении звука или звукового потока. Попробую посмотреть NAC.
-
> Через конвертер звук лучше идёт. Если, например, подключить > напрямую deAudioIn к deAudioOut то звук будет сильно искажаться. >
У тебя ошибка в программе.
> К задержкам моя задача не критична
Сегодня-то она может быть и не критична)..А завтра, потратив кучу времени, ты возопишь "а почему ?" Аппетит-то во время еды приходит)
-
Программу пофиксила, вроде без конвертеров работает, но дело того не меняет. Установила NAC. ASIO у меня не работает. И драйвера качала, и настройки меняла. Никак. А DXAudioOut1 и DXAudioIn1 так звук портят, что ужас. Хотя латентность небольшая, но это не так важно.
-
Одно пофиксила, другое накосячила)
-
Мда... Мне всё-таки кажется, что решение в stream de-audio.
-
Недавно пересмотрела документацию. Stream это вроде используется при работе с файлами? Если я не ошибаюсь, то придётся искать метод синхронизации чтения и воспроизведения.
-
> Stream это вроде используется при работе с файлами?
Стрим - это стрим. Он сам по себе.
-
-
спамеров на кол!
|