Я, вот, пытаюсь сделать программу для изменения голоса.
Запись голоса я уже сделал, а как его изменить (тембр или еще что-то)
Вот то, что есть...
code_27910.txt
Этот топик читают: Гость
|
Ответов: 54
Рейтинг: 1
|
|||
| карма: 1 |
| ||
| файлы: 1 | code_27910.txt [4.7KB] [109] |
|
Ответов: 3889
Рейтинг: 362
|
|||
|
В реальном времени - никак. Да и вообще на HiAsm это делать не оптимально. Но вполне возможно. Работайте с бинарными данными записи, клонируйте или разрежайте сэмплы пропорционально коэффициэнту пониженияповышения тембра, меняйте частоту дискретизации (но произвольная частота не поддерживается многими плеерами) и т.д. и т.п.
|
|||
| карма: 1 |
|
|
Ответов: 54
Рейтинг: 1
|
|||
|
1nd1g0 писал(а): пропорционально коэффициэнту пониженияповышения тембраА вот как тембр менять? |
|||
| карма: 1 |
|
|
Ответов: 3889
Рейтинг: 362
|
|||
|
BogdashkaM писал(а): А вот как тембр менять?Я уже ответил на Ваш вопрос. Самый распространённый WAV состоит из цепочки целочисленных значений, в вашем случае - по два байта (16 бит) каждое. Если каждое второе вырезать, то тембр поднимется на октаву, если после каждого записать его копию, то понизится (так же - на октаву). Естественно, нужно корректировать заголовок файла под новый размер, иначе плеера будут считать его повреждённым и могут не заиграть или исказить ещё больше, чем Ваше творчество. Ищите в Сети описание формата WAV. Да, чуть не забыл предупредить: если не хотите изменения СКОРОСТИ записи пропорционально тембру, то придётся жертвовать частью сэмплов в записи с пониженным тембром (в случае с понижением вдвое - каждым чётным периодом - придётся удалить), либо наоборот удваивать каждый период чтобы компенсировать удаление соседей при повышении тембра. Зато есть плюс - в идеале получите файл той же длины, можно не трогать заголовок Перфекционистам можно порекомендовать не просто удваивать и вырезать сэмплы, а производить интерполяцию, хотя бы - линейную. Это значительно снижает количество паразитных высокочастотных гармоник, проявляющихся после обработки. Так, если Вам нужно вставить после сэмпла со значением 100 и перед сэмплом со значением 50 дубликат, Вы ставите не 100 и не 50, а сэмпл со значением (100+50)/2=75 . Вот это и есть простейшая линейная интерполяция. Вам наверняка хватит. Изменение тембра на шаг, не кратный октаве, делается аналогично, только применяется дробная арифметика с последующей аппроксимацией шага вырезки или дублирования сэмплов. |
|||
| карма: 1 |
|
|
Ответов: 8978
Рейтинг: 825
|
|||
|
1nd1g0, такой путь внесёт искажения и понять речь "искажённого" голоса станет затруднительно
Правильнее раскладывать звук в Фурье, а обратное преобразование делать на более высокой (низкой) частоте, прибавляя (вычитая) к спектру по, скажем, 200 Гц. Метод может сдвинуть спектр на любую частоту (доступную звуковой карте |
|||
| карма: 19 |
|
|
Ответов: 3889
Рейтинг: 362
|
|||
|
Леонид, надо быть реалистами, думаете ТС сможет изобразить рекомендуемое Вами на HiAsm? Описанный мною алгоритм самый часто используемый в обработке звука (особенно - реального времени), и результаты более чем удовлетворительные. Двунаправленные преобразования Фурье более ресурсоёмки и встречаются гораздо реже, преимущественно в компрессиидекомпрессии звука с потерями и в профессиональных студиях. Хотя сейчас машины становятся всё мощнее, ситуация может начать меняться, но у нас HiAsm и явно не профессиональные требования.
|
|||
| карма: 1 |
|
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
|
Редактировалось 1 раз(а), последний 2025-01-17 15:34:18 |
|||
| карма: 0 |
|
|
Ответов: 1946
Рейтинг: 176
|
|||
|
Можете тут почитать: http://hi-asm.blogspot.com/2010/01/wav.html
|
|||
| карма: 10 |
|
8




Поиск
Друзья
Администрация