Аудио C# - Как к фрагменту времени (другой темп, та же подача)

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

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

12
задан heath 23 February 2010 в 18:49
поделиться

2 ответа

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

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

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

6
ответ дан 2 December 2019 в 20:17
поделиться

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

-1
ответ дан 2 December 2019 в 20:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: