С# Audio - Как растянуть время (разные темпы, одинаковый шаг)

Я пытаюсь создать приложение winform на С# (VS2008), которое может загружать mp3 (другие форматы были бы хороши, но mp3 как минимум) и иметь возможность регулировать скорость воспроизведения (темп), не влияя на высоту тона. Мне действительно не нужны никакие другие звуковые эффекты. Я пробовал использовать DirectShow, но, похоже, не предлагает возможности для увеличения времени. Я смог включить irrklang, но, похоже, не имеет возможности растягивания времени. Итак, теперь я перешел на SoundTouch. Это, безусловно, имеет возможности, но я не совсем понимаю, как реализовать на С#.

Через несколько дней обо всем, что я сделал, используется DLLImport в SoundTouch DLL и я могу успешно получить номер версии. На данный момент я даже не уверен, могу ли я делать то, что я пытаюсь сделать с SoundTouch. Может ли кто-нибудь предложить какое-то руководство по использованию SoundTouch или другой библиотеки с возможностями, которые я ищу? Спасибо.

Ответ 1

Если кому-то все еще интересно, я написал класс оболочки .Net для библиотеки SoundTouch. http://code.google.com/p/soundtouchnet/

Ответ 2

Ответ заключается в том, что SoundTouch может делать то, что вы хотите сделать.

Взгляните на примерную программу SoundStretch. В нем приводятся примеры использования библиотеки SoundTouch для изменения темпа (без изменения высоты), а также изменения высоты тона (без изменения темпа) и скорости воспроизведения (изменение темпа и темпа). Я бы посмотрел исходный код и использовал то, что вам нужно.

Единственная проблема, которую я вижу, это то, что вы используете формат mp3, и это использует WAV-формат, поэтому вам нужно сначала преобразовать файл. Я действительно не думаю, что вы найдете программу, которая делает то, что вы хотите, прямо на любом сжатом файле из-за природы метода, используемого для такого рода вещей. Он использует фазовый вокодер, если вы хотите посмотреть на весь процесс немного больше.

Ответ 3

Другим способом использования SoundTouch в С# является использование звуковой библиотеки BASS (http://un4seen.com) с оберткой BASS.NET и BASS_FX плагин. BASS_FX использует SoundTouch для выполнения TimeStretching.

Ответ 4

Вот один из возможных способов вызова из С#. Вам нужно написать COM-обертку на С++, чтобы обернуть вокруг SoundTouch DLL. После того, как у вас есть готовая оболочка COM, вы можете импортировать ее в свой проект .NET(С#) и вызвать базовую библиотеку SoundTouch DLL через COM Wrapper. Надеюсь, это поможет.