Звук в Windows
От: Ruslan2  
Дата: 12.09.03 15:22
Оценка:
Hi коллеги.
Обращаюсь за срочной помощью. Необходимо в очень короткие сроки написать программу искажения речи (для мирных целей, проект не коммерческий). Ранее со звуком мне работать не приходилось, поэтому буду рад любым ссылкам на общедоступные русурсы, советам, конкретному коду. Программа должна работать под Win98 в стандартной конфигурации, разрабатываться на С++, MFC.
Меня интересуют следующие моменты:
— получение речи с микрофона,
— внесение искажения, так чтобы речь осталась понятной, но говорящий остался нераспознанным,
— вывод искажённой речи на колонки.
Заранее благодарен всем откликнувшимся.

12.09.03 19:47: Перенесено модератором из 'C/C++' — ПК
Re: Звук в Windows
От: xp_alp  
Дата: 15.09.03 06:38
Оценка:
Здравствуйте, Ruslan2, Вы писали:

R>Hi коллеги.

R>Обращаюсь за срочной помощью. Необходимо в очень короткие сроки написать программу искажения речи (для мирных целей, проект не коммерческий). Ранее со звуком мне работать не приходилось, поэтому буду рад любым ссылкам на общедоступные русурсы, советам, конкретному коду. Программа должна работать под Win98 в стандартной конфигурации, разрабатываться на С++, MFC.
R>Меня интересуют следующие моменты:
R>- получение речи с микрофона,
R>- внесение искажения, так чтобы речь осталась понятной, но говорящий остался нераспознанным,
R>- вывод искажённой речи на колонки.
R>Заранее благодарен всем откликнувшимся.

Достаточно простой вариант — сделать фильтр, который исменяет частоту звука,
т.е. немного растягивает, или сжимает звук.
Можно еще и шума накидать для большего "шифрования", но качество при этом естественно ухудшится,
так что смотри по задаче, что важней.
ИМХО лучший инструмент для этого — DirectX.
xp
Re[2]: Звук в Windows
От: Ruslan2  
Дата: 16.09.03 15:06
Оценка:
Здравствуйте, xp_alp, Вы писали:

_>Достаточно простой вариант — сделать фильтр, который исменяет частоту звука,

_>т.е. немного растягивает, или сжимает звук.
_>Можно еще и шума накидать для большего "шифрования", но качество при этом естественно ухудшится,
_>так что смотри по задаче, что важней.
_>ИМХО лучший инструмент для этого — DirectX.

Я полностью с этим согласен, и мне вполне хватит изменения высоты звучания голоса, но как получить в DX сигнал от микрофона, затем изменить его высоту и вывести на колонки. Повторяю, раньше ни со звуком, ни с DX я не работал.
Re[3]: Звук в Windows
От: elmm_ Украина http://herocraft.com
Дата: 16.09.03 15:26
Оценка:
Здравствуйте, Ruslan2, Вы писали:

R>Здравствуйте, xp_alp, Вы писали:


_>>Достаточно простой вариант — сделать фильтр, который исменяет частоту звука,

_>>т.е. немного растягивает, или сжимает звук.
_>>Можно еще и шума накидать для большего "шифрования", но качество при этом естественно ухудшится,
_>>так что смотри по задаче, что важней.
_>>ИМХО лучший инструмент для этого — DirectX.

R>Я полностью с этим согласен, и мне вполне хватит изменения высоты звучания голоса, но как получить в DX сигнал от микрофона, затем изменить его высоту и вывести на колонки. Повторяю, раньше ни со звуком, ни с DX я не работал.


Посмотри фул дуплекс фильтр в сдк дирекикса....
C.E.O. HeroCraft Ukraine — fun on the run.
Re[4]: Звук в Windows
От: Ruslan2  
Дата: 18.09.03 09:38
Оценка:
R>>Здравствуйте, xp_alp, Вы писали:

Я как раз и занимаюсь, что изучаю данную программу из SDK. В СтартБуфер происходит захват голоса, затем он проигрывается. Я пытаюсь перед g_pDSBOutput->Play( 0, 0, DSBPLAY_LOOPING ); поставить g_pDSBOutput->SetFrequency(200);, но эффекта не слышу. Уровень частоты я устанавливал различный, но без результата.
Программа записыват около одной секунды и затем проигрывает запись, новый сигнал накладывается на старый. А какой флаг надо установить или что надо сделать, чтобы сигнал не повторялся на выходе (как при обычном разговоре)?
Смысл этой программы мне не очень понятен. Если я беру сигнал 44Кгц и конвертирую в 8Кгц, то выходной звук получается глухим, но почти не изменяется. Если наоборот, то никакого эффекта не слышно.
Вообще возникает вопрос, нужно ли захватывать входной сигнал. Как я понял это делается только для его записи, но мне запись не нужна. Может ли DX изменять амплитуду сигнала или проще вернуться в стандартный Win32 и реализовать свою перемодуляцию?
Re[5]: Звук в Windows
От: xp_alp  
Дата: 19.09.03 12:09
Оценка:
Здравствуйте, Ruslan2, Вы писали:
R> Я как раз и занимаюсь, что изучаю данную программу из SDK. В СтартБуфер происходит захват голоса, затем он проигрывается. Я R> пытаюсь перед g_pDSBOutput->Play( 0, 0, DSBPLAY_LOOPING ); поставить g_pDSBOutput->SetFrequency(200);, но эффекта не слышу. R> Уровень частоты я устанавливал различный, но без результата.
R> Программа записыват около одной секунды и затем проигрывает запись, новый сигнал накладывается на старый. А какой флаг надо R> установить или что надо сделать, чтобы сигнал не повторялся на выходе (как при обычном разговоре)?
R> Смысл этой программы мне не очень понятен. Если я беру сигнал 44Кгц и конвертирую в 8Кгц, то выходной звук получается
R> глухим, но почти не изменяется. Если наоборот, то никакого эффекта не слышно.

Ну в общем так и должно быть. 44КГц и 8КГц – это не частота звука, это частота дискретизации. То есть, на сколько сэмплов разбили звук длительностью 1 секунда при оцифровке. Твою задачу изменением этого параметра не решить. При изменении с 44 на 8 килогерц у тебя просто примерно 5 сэмплов усредняются и записываются в один, а длительность их соответственно увеличивается при проигрывании. Поэтому ты получаешь потерю качества – «глухой» звук. При выполнении обратной операции, у тебя пишется пять одинаковых сэмплов вместо одного, поэтому разницы не слышно.

Тебе же необходимо менять частоту САМОГО звука.
см. рис. 1 http://www.rsdn.ru/File/21804/Изменение%20звука.JPG

Делается это примерно так (при одинаковых входной и выходной частоте дискретизации):
— берешь из входного буфера N сэмплов
— с помощью МЕТОДОВ ИНТЕРПОЛЯЦИИ рассчитываешь N-K или N+K выходных сэмплов.
(на рисунке http://www.rsdn.ru/File/21804/Изменение%20звука%202.JPG
показано, как из 5 сделать 6, ну или из 6 сделать 5, как угодно)
— валишь все это в выходной буфер (при этом не забываешь изменить размер выходного буфера)
Если не хочешь менять размер выходного буфера, то часть буфера можешь «растянуть», а часть «сжать» на ту же величину. Но при этом может лажа получиться (в смысле возможно тяжело будет речь понимать), но может и что-то прикольное получиться.

R> Вообще возникает вопрос, нужно ли захватывать входной сигнал. Как я понял это делается только для его записи, но мне запись R> не нужна.

Первоначально ты говорил, что тебе нужно брать звук с микрофона, а что это, если не захват входного сигнала?

R> Может ли DX изменять амплитуду сигнала или проще вернуться в стандартный Win32 и реализовать свою перемодуляцию?


DX позволяет изменять что угодно но реализовывать АЛГОРИТМ ИЗМЕНЕНИЯ ЧАСТОТЫ ЗВУКА тебе прийдется в влюбом случае, хоть под DX, хоть под чем.(ну в смысле если не реализовывать, то найти готовый)
АМПЛИТУДУ СИГНАЛА тебе менять не нужно — это громкость звука.

В понедельник выложу на наш сайт программу, которая поднимает и играет звуковой файл и при этом
прогоняет звук через фильтр, в этот фильтр и вставишь свой алгоритм. Как выложу, дам ссылку.
xp
Re[6]: Звук в Windows
От: xp_alp  
Дата: 19.09.03 12:13
Оценка:
Здравствуйте, xp_alp, Вы писали:

_>см. рис. 1 http://www.rsdn.ru/File/21804/Изменение%20звука.JPG

_>(на рисунке http://www.rsdn.ru/File/21804/Изменение%20звука%202.JPG

Ссылки почему-то не полностью отобразились, чтобы посмтомреть, бери всю сроку, до конца,
а не только выделенную часть.
xp
Re[7]: Звук в Windows
От: Ruslan2  
Дата: 19.09.03 15:42
Оценка:
Здравствуйте, xp_alp, Вы писали:

Чем больше я занимаюсь задачей создания простого фильтра в рельном времени, тем больше сомнений в возможности его реализации. Сигнал от микрофона подаётся на АЦП звуковой платы, затем он подаётся на выход. Драйвера платы задают характеристики выходного сигнала. Windows в этой цепочке кажется вообще отсутствует. Попробуйте получить сигнал от микрофона, записать его, но при этом, чтобы ничего не было слышно на колонках. Я пока этого сделать не могу.
Про амлитуду я лоханулся, понял это сразу как отправил сообщение бывает.
Re: Звук в Windows
От: Аноним  
Дата: 25.09.03 06:09
Оценка:
Здравствуйте, Ruslan2, Вы писали:

R>Hi коллеги.

R>Обращаюсь за срочной помощью. Необходимо в очень короткие сроки написать программу искажения речи (для мирных целей, проект не коммерческий). Ранее со звуком мне работать не приходилось, поэтому буду рад любым ссылкам на общедоступные русурсы, советам, конкретному коду. Программа должна работать под Win98 в стандартной конфигурации, разрабатываться на С++, MFC.
R>Меня интересуют следующие моменты:
R>- получение речи с микрофона,
R>- внесение искажения, так чтобы речь осталась понятной, но говорящий остался нераспознанным,
R>- вывод искажённой речи на колонки.
R>Заранее благодарен всем откликнувшимся

Изменение речи есть на сайте http://www.spiritcorp.com/voice_changer.html или на сайте http://www.seestorm.com/voicedisguisesdk.jsp. У них вроде была демка.

tg
Re[8]: Звук в Windows
От: PSP Беларусь  
Дата: 01.10.03 10:40
Оценка:
Здравствуйте, Ruslan2, Вы писали:

R>Здравствуйте, xp_alp, Вы писали:


R> Чем больше я занимаюсь задачей создания простого фильтра в рельном времени, тем больше сомнений в возможности его реализации. Сигнал от микрофона подаётся на АЦП звуковой платы, затем он подаётся на выход. Драйвера платы задают характеристики выходного сигнала. Windows в этой цепочке кажется вообще отсутствует. Попробуйте получить сигнал от микрофона, записать его, но при этом, чтобы ничего не было слышно на колонках. Я пока этого сделать не могу.


Сделай "mute" микрофону в микшере
Всегда Ваш, PSP.
Re: Звук в Windows
От: xp_alp  
Дата: 28.10.03 06:01
Оценка:
Здравствуйте, Ruslan2, Вы писали:

R>Hi коллеги.

R>Обращаюсь за срочной помощью. Необходимо в очень короткие сроки написать программу искажения речи (для мирных целей, проект не коммерческий). Ранее со звуком мне работать не приходилось, поэтому буду рад любым ссылкам на общедоступные русурсы, советам, конкретному коду. Программа должна работать под Win98 в стандартной конфигурации, разрабатываться на С++, MFC.
R>Меня интересуют следующие моменты:
R>- получение речи с микрофона,
R>- внесение искажения, так чтобы речь осталась понятной, но говорящий остался нераспознанным,
R>- вывод искажённой речи на колонки.
R>Заранее благодарен всем откликнувшимся.


Мы сделали пример программы, которая изменяет частоту звука,
при этом голос естественно искажается.
Можешь отсюда скачать, там есть искохдники на Visual C++.

Alparysoft Audio Modifier


Гарантированно работает на 44.1 кГц, 16 бит, стерео
xp
Re: Звук в Windows
От: Dimonka Верблюд  
Дата: 28.10.03 13:26
Оценка:
Здравствуйте, Ruslan2, Вы писали:

R>Hi коллеги.

R>Обращаюсь за срочной помощью. Необходимо в очень короткие сроки написать программу искажения речи (для мирных целей, проект не коммерческий). Ранее со звуком мне работать не приходилось, поэтому буду рад любым ссылкам на общедоступные русурсы, советам, конкретному коду. Программа должна работать под Win98 в стандартной конфигурации, разрабатываться на С++, MFC.
R>Меня интересуют следующие моменты:
R>- получение речи с микрофона,
R>- внесение искажения, так чтобы речь осталась понятной, но говорящий остался нераспознанным,
R>- вывод искажённой речи на колонки.
R>Заранее благодарен всем откликнувшимся.

Если надо изменять только частоту звука, то эффект называется PitchShift.
Обычно делается очень просто: звук разбивается на фреймы с перехлёстом, каждый фрейм растягивается/сжимается по частоте (интерполяция/децимация) и накладывается на предыдущий используя кроссфейдинг..
Простой питч не нашёл, нашёл навороченный, с использованием FFT:
http://www.dspdimension.com/html/pscalestft.html
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.