Вверх ↑
Этот топик читают: Гость
Ответов: 54
Рейтинг: 1
#1: 2012-05-14 23:00:11 ЛС | профиль | цитата
Я, вот, пытаюсь сделать программу для изменения голоса.
Запись голоса я уже сделал, а как его изменить (тембр или еще что-то)
Вот то, что есть...
code_27910.txt
карма: 1

0
файлы: 1code_27910.txt [4.7KB] [109]
Ответов: 3889
Рейтинг: 362
#2: 2012-05-14 23:15:23 ЛС | профиль | цитата
В реальном времени - никак. Да и вообще на HiAsm это делать не оптимально. Но вполне возможно. Работайте с бинарными данными записи, клонируйте или разрежайте сэмплы пропорционально коэффициэнту пониженияповышения тембра, меняйте частоту дискретизации (но произвольная частота не поддерживается многими плеерами) и т.д. и т.п.
карма: 1

0
Ответов: 54
Рейтинг: 1
#3: 2012-05-14 23:20:41 ЛС | профиль | цитата
1nd1g0 писал(а):
пропорционально коэффициэнту пониженияповышения тембра

А вот как тембр менять?
карма: 1

0
Ответов: 3889
Рейтинг: 362
#4: 2012-05-14 23:54:50 ЛС | профиль | цитата
BogdashkaM писал(а):
А вот как тембр менять?

Я уже ответил на Ваш вопрос. Самый распространённый WAV состоит из цепочки целочисленных значений, в вашем случае - по два байта (16 бит) каждое. Если каждое второе вырезать, то тембр поднимется на октаву, если после каждого записать его копию, то понизится (так же - на октаву). Естественно, нужно корректировать заголовок файла под новый размер, иначе плеера будут считать его повреждённым и могут не заиграть или исказить ещё больше, чем Ваше творчество. Ищите в Сети описание формата WAV.
Да, чуть не забыл предупредить: если не хотите изменения СКОРОСТИ записи пропорционально тембру, то придётся жертвовать частью сэмплов в записи с пониженным тембром (в случае с понижением вдвое - каждым чётным периодом - придётся удалить), либо наоборот удваивать каждый период чтобы компенсировать удаление соседей при повышении тембра. Зато есть плюс - в идеале получите файл той же длины, можно не трогать заголовок
Перфекционистам можно порекомендовать не просто удваивать и вырезать сэмплы, а производить интерполяцию, хотя бы - линейную. Это значительно снижает количество паразитных высокочастотных гармоник, проявляющихся после обработки. Так, если Вам нужно вставить после сэмпла со значением 100 и перед сэмплом со значением 50 дубликат, Вы ставите не 100 и не 50, а сэмпл со значением (100+50)/2=75 . Вот это и есть простейшая линейная интерполяция. Вам наверняка хватит.

Изменение тембра на шаг, не кратный октаве, делается аналогично, только применяется дробная арифметика с последующей аппроксимацией шага вырезки или дублирования сэмплов.
карма: 1

0
Ответов: 8978
Рейтинг: 825
#5: 2012-05-15 00:00:06 ЛС | профиль | цитата
1nd1g0, такой путь внесёт искажения и понять речь "искажённого" голоса станет затруднительно
Правильнее раскладывать звук в Фурье, а обратное преобразование делать на более высокой (низкой) частоте, прибавляя (вычитая) к спектру по, скажем, 200 Гц. Метод может сдвинуть спектр на любую частоту (доступную звуковой карте )
карма: 19

0
Ответов: 3889
Рейтинг: 362
#6: 2012-05-15 00:04:36 ЛС | профиль | цитата
Леонид, надо быть реалистами, думаете ТС сможет изобразить рекомендуемое Вами на HiAsm? Описанный мною алгоритм самый часто используемый в обработке звука (особенно - реального времени), и результаты более чем удовлетворительные. Двунаправленные преобразования Фурье более ресурсоёмки и встречаются гораздо реже, преимущественно в компрессиидекомпрессии звука с потерями и в профессиональных студиях. Хотя сейчас машины становятся всё мощнее, ситуация может начать меняться, но у нас HiAsm и явно не профессиональные требования.
карма: 1

0
Гость
Ответов: 17029
Рейтинг: 0
#7: 2012-05-15 00:54:41 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2025-01-17 15:34:18
карма: 0

0
Ответов: 1946
Рейтинг: 176
#8: 2012-05-15 08:41:48 ЛС | профиль | цитата
Можете тут почитать: http://hi-asm.blogspot.com/2010/01/wav.html
карма: 10
0
8
Сообщение
...
Прикрепленные файлы
(файлы не залиты)