На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Сжатие/растяжение звука
    Поскажите алгоритм временного сжатия/растяжения сигнала(звука). Зараннее благодарен
      Линейное интерполирование! - быстро и сердито!
        А в случае сжатия просто выбрасывать часть отсчетов?
          Цитата Joss @
          А в случае сжатия просто выбрасывать часть отсчетов?

          Вообще не знаю, но точно могу сказать, что если будешь выбрасывать то не избежать потери качества звука...
            Цитата Joss @
            А в случае сжатия просто выбрасывать часть отсчетов?
            Лучше уж как-то усреднять сжимаемые фрагменты
              При таком подходе изменяется тональность звука, т.е. при растяжении голос становится более низким, при сжатии - высоким. Как избавиться от этого эффекта?
                Я краем уха слышал, что помогает делать преобразование Фурье, и затем на его основе генерировать сигнал с тем же набором частот, но бОльшей длительности. Сам я этим никогда не занимался, но могу предположить, что процесс состоит из следующих частей:

                1. поделить сигнал на маленькие блоки
                2. сделать Фурье каждого блока
                3. сгенерировать на их основе сигнал бОльшей длительности, чем у оригинального блока
                4. как-то "склеить" границы блоков, чтобы не было слышно щелчков. насколько я знаю, человеческий слух нечувствителен к фазе колебаний, только к частоте/амплитуде, так что можно попробовать двигать фазы для достижения эффекта...

                всё это очень приблизительно, т.к. область не моя
                  Цитата Joss @
                  А в случае сжатия просто выбрасывать часть отсчетов?
                  Это же спектр только расширит.. Как раз вот это и получится:
                  Цитата Joss @
                  При таком подходе изменяется тональность звука, т.е. при растяжении голос становится более низким, при сжатии - высоким.


                  Подход shadeofgray здесь мне кажется более действенным.
                    Цитата Rikkie @
                    Это же спектр только расширит..

                    Я, честно гогворя, и представлял себе растяжение/сжатие сигнала как сжатие/растяжение спектра. А результат не совсем такой...

                    Цитата shadeofgray @
                    3. сгенерировать на их основе сигнал бОльшей длительности, чем у оригинального блока


                    Будем получать периодическую последовательность отсчетов!
                      Цитата ors_archangel @
                      Линейное интерполирование! - быстро и сердито!


                      Нельзя так просто. Нужно кроме собственно интерполяции произвести цифровую фильтрацию.
                        Цитата gena_dj @
                        Нужно кроме собственно интерполяции произвести цифровую фильтрацию.


                        А именно?
                          Цитата gena_dj @
                          Нельзя так просто. Нужно кроме собственно интерполяции произвести цифровую фильтрацию.

                          В принципе, линейная интерполяция - вид цифровой фильтрации, но, может быть, gena_dj, ты имеешь в виду препроцессинг? Честно говоря, не представляю, что бы это могло быть.
                            странно, что вы задаете это вопрос в этом форуме, а не в "обработке звука" или "речевых технологиях"

                            итак, при увеличении/уменьшении скорости воспроизведения (что эквивалентно сжатию/растяжению) частоты также сдвигаются - становятся во столько раз ниже/выше во сколько раз изменили скорость. Тем не менее, мы наблюдаем, что многие медиаплейеры умеют ускорять/замедлять воспроизведение (в разумных пределах) так, чтобы голос и музыка не становились писклявыми или растянутыми. Такие медиаплейеры не просто изменяют скорость воспроизведения, они манипулируют с основным тоном сигнала. Идея (похожая на ту, что с БПФ была представлена выше) заключается в том, чтобы разбить сигнал на кусочки, где сигнал более-менее стационарен (не особенно меняется) и повторять эти кусочки (если нужно замедлить) или выбрасывать их (если нужно ускорить) добиваясь так сжатия/растяжения сигнала. Однако, грубое применение этого метода приведет к проблемам с основным тоном - ухо очень чувствительно к его изменению и если выбирать кусочки так, что туда будут попадать нецелые куски основного тона, это будет неприятно. Выход в том, чтобы выбирать кусками, например, периоды основного тона или использовать алгоритмы типа PSOLA
                              Цитата ors_archangel @
                              gena_dj, ты имеешь в виду препроцессинг


                              В принципе, да - ФНЧ высокого порядка такой, что после "растяжения" звукового фрагмента подавляются высокочастотные вомпоненты выше предельной частоты звукового. К примеру, пусть исходная частота дискретезации сигнала, к примеру, F_0=48000Гц. После "растяжения" мы получаем звуковой фрагмент с большей частотой дискретезации F_1>F_0, но воспроизводим на прежней частоте. Отсюда эффект "растяжения". Нужно отфильтровать частоты выше чем F_0^2/(2*F1).

                              "Сжатие" фрагмнта эквивалентно случаю F_1<F_0. Критерий фильтрации тот же. Здесь можно сначала применить up-sampling, потом фильтрацию, потом down-sampling до нужной частоты.

                              По поводу сжатия/растяжения без изменения основного тона. Здесь действительно используются повторы фрагментов. Выбирается частота повтора ~несколько десятков Гц. Для устранения разрывов на границах блоков используется частичное перекрытие блоков.
                                Разобрался, спасибо всем за советы!
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0745 ]   [ 15 queries used ]   [ Generated: 19.07.25, 19:24 GMT ]