Конференция "Media" » Изменение голоса [D7, WinXP]
 
  • Inna-88 © (29.09.10 21:40) [0]
    Суть вопроса вот в чём. Я решила сделать программу для изменения голоса. На форуме много чего есть, но это не то, что нужно. Для её создания я взяла компоненты DE-Audio. Разобраться в них было несложно, но возникли некоторые проблемы.

    1)Неизвестно как синхронизировать моменты перезаписи буфера. Т.е. когда я считываю информацию со входного буфера, чтобы её изменить, он может быть ещё не перезаписан, или наоборот изменён дважды. Счётчики и таймеры толку не дают. Тоже самое и с выходом. deAudioConvertor1.ConvertAudio(SND,G) если G слишком большое, то происходят большие задержки (то же и со входным буфером), а если маленькое, то появляются разрывы звука, или при частом вызове этой функции воспроизведение встаёт в очередь и даже после прекращения выполнения обработки звук воспроизводится.

    2)Решение 1 проблемы я нашла в ConvertAudioStream и OutputStream, но пытаясь просто воспроизвести входящий поток без изменений вылетает ошибка, будто SOut=nil, хотя в нём данные:

    SOut:TStream;
    ...
    SOut:=deAudioConvertor2.OutputStream;
    deAudioConvertor1.ConvertAudioStream(SOut);

  • Сергей М. © (29.09.10 23:58) [1]
    > когда я считываю информацию со входного буфера

    А когда ты ее считываешь ?
    Полагаю, с обработчике соотв.события ?
  • Inna-88 © (30.09.10 11:00) [2]
    Считываю с помощью долгих "плясок с бубном".

    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]);


    Наверное это не совсем правильно.
  • Сергей М. © (30.09.10 11:59) [3]
    Что-то я не пойму нашиша тебе понадобился конвертер вообще ?

    У TdeAudioIn есть св-во Format, где можно выбрать нужный формат захватываемых аудиоданных (из списка доступных штатных кодеков)

    Остается только обрабатывать событие OnAudioRecorded, параметрами которого тебе передается адрес буфера захваченных данных (в указанном тобой формате) AudioData и размер данных в этом буфере AudioDataSize. При получении управления в этом обработчике следует максимально шустро скопировать к себе эти данные для дальнейшей их обработки уже вне контекста этого обработчика.

    Ы ?
  • Сергей М. © (30.09.10 12:14) [4]
    А вообще говоря компоненты пакета deAudio не приспособлены идеальным образом для DSP в реальном режиме времени - даже без какого-либо этапа обработки будут неизбежны ощутимые задержки (десятки миллисекунд) между вводом и выводом.
    Для таких задач следует использовать ASIO-интерфейс и соответствующее (т.е. поддерживающее ASIO) аудиооборудование. Технологию ASIO поддерживает, например, пакет компонентов NAC (New Audio Components)
  • Inna-88 © (30.09.10 21:37) [5]
    Через конвертер звук лучше идёт. Если, например, подключить напрямую deAudioIn к deAudioOut то звук будет сильно искажаться.
    К задержкам моя задача не критична. Даже 50мс это вполне нормально, да и 100. На деле незаметно. Проблема в плавном изменении звука или звукового потока.
    Попробую посмотреть NAC.
  • Сергей М. © (30.09.10 23:51) [6]

    > Через конвертер звук лучше идёт. Если, например, подключить
    > напрямую deAudioIn к deAudioOut то звук будет сильно искажаться.
    >


    У тебя ошибка в программе.


    > К задержкам моя задача не критична


    Сегодня-то она может быть и не критична)..А завтра, потратив кучу времени, ты возопишь "а почему ?"
    Аппетит-то во время еды приходит)
  • Inna-88 © (01.10.10 20:28) [7]
    Программу пофиксила, вроде без конвертеров работает, но дело того не меняет. Установила NAC. ASIO у меня не работает. И драйвера качала, и настройки меняла. Никак. А DXAudioOut1 и DXAudioIn1 так звук портят, что ужас. Хотя латентность небольшая, но это не так важно.
  • Сергей М. © (03.10.10 20:47) [8]
    Одно пофиксила, другое накосячила)
  • Inna-88 © (08.10.10 23:07) [9]
    Мда... Мне всё-таки кажется, что решение в stream de-audio.
  • Inna-88 © (10.10.10 21:29) [10]
    Недавно пересмотрела документацию. Stream это вроде используется при работе с файлами? Если я не ошибаюсь, то придётся искать метод синхронизации чтения и воспроизведения.
  • Сергей М. © (11.10.10 10:35) [11]

    > Stream это вроде используется при работе с файлами?


    Стрим - это стрим.
    Он сам по себе.
  • reallyman © (01.08.13 21:58) [12]
    Согласен, стрим!
    ____________________
    http://www.azbuka-style.ru/Go/SecondPage/cid=224
  • brother © (02.08.13 06:37) [13]
    спамеров на кол!
 
Конференция "Media" » Изменение голоса [D7, WinXP]
Есть новые Нет новых   [134427   +37][b:0][p:0.001]