2015-04-27 5 views
1

Я хочу изменить частоту записи голоса, изменив частоту дискретизации на Mac OS X.Mac OS X: Изменение частоты звука путем изменения частоты дискретизации?

Это исследовательский проект, предназначенный для людей, которые заикаются. Очень важно, чтобы задержка была очень низкой - это, например, почему я не рассматриваю Fast Fourier Transforms. Вместо этого я хочу собирать образцы со скоростью, скажем, 44 кГц, а затем делать одну из двух вещей:

1) Воспроизводите образцы дважды в два раза (то есть 22 кГц). Это приведет к увеличению асинхронности с источником. Было бы полезно, если бы я мог перезапустить выборку каждые 1 секунду или около того, чтобы асинхронность не стала слишком заметной.

2) Воспроизведите образцы дважды в два раза быстрее. Очевидно, что это невозможно сделать непрерывно (т. Е. Не воспроизводить образцы, которые еще не собраны). Чтобы обойти это, я собираюсь запустить воспроизведение с квадратной волной. Образцы будут воспроизводиться в два раза быстрее, чем они были записаны во время пика квадратной волны. Ничего не будет слышно (но образцы все равно будут собраны) во время прогиба квадратной волны.

Я подготовил PDF, который описывает проект более подробно здесь:

https://www.dropbox.com/s/8u3tz7d9hhxd3t9/Frequency%20shift%20techniques.pdf?dl=0

Друг помог мне с некоторыми из программирования для этого с помощью Portaudio. К сожалению, у нас очень большие задержки. Я думаю, это может быть потому, что PortAudio работает на слишком высоком уровне. Из кода мне кажется, что PortAudio буферизует входящий аудиопоток, а затем делает изменения, которые являются prima facie похожими на те, которые я описал выше, но которые фактически являются операциями с буферизованным потоком.

Это совсем не то, чего я хочу. Очень важно, чтобы процессор работал как можно меньше. Ссылаясь на условия (1) и (2) выше, весь компьютер должен делать это: (1) воспроизводить образцы без каких-либо манипуляций, но в два раза медленнее; или (2) хранить входящие образцы, а затем воспроизводить их дважды в два раза быстрее. Не должно быть никакой другой обработки. Я думаю, что это единственный способ получить самые низкие задержки, которые я ищу.

Я задавался вопросом, было бы лучше попробовать это прямо в Core Audio для OS X, вместо использования PortAudio? Это ограничило бы совместимость платформы. Но низкая латентность гораздо важнее совместимости.

Возможно, я смогу сделать то, что хочу, используя услугу среднего уровня, например, аудиоустройства? Или мне нужно будет писать напрямую для низкоуровневого сервиса, такого как I/O Kit? Как я могу это сделать?

+1

Почему латентность имеет значение, если вы все равно останетесь на полсекунды каждую секунду? Было бы намного лучше, если бы вы синтезировали речь на другом уровне и делали это в ближайшем реальном времени. Это общий эффект. Помните, хотя вы сражаетесь с физикой. Вы не можете ничего знать, пока не захватите несколько полных сигналов, и поэтому вы не можете сдвинуться без задержки. Кроме того, есть много полей эффектов от 50 до 100 долларов, которые делают это для вас без необходимости писать программное обеспечение. – Brad

+0

Меня интересует время отклика в реальном времени нейронов в стволе мозга. Это порядка 1 мс. Внедрение латентности 10 мс или более путем манипуляции волновыми формами не является хорошим. Я мог менять частоту без задержки, аналогично тому, как работает проигрыватель. Когда вы замедляете скорость вращения записи, частота падает. Нет никакой задержки. Звуковые карты Delta-sigma делают аналого-цифровые преобразования в 0,25 мс для кругового движения 0,5 мс. Я бы хотел, чтобы возвращаемые образцы воспроизводились медленнее. Никаких других манипуляций. Просто записывайте с одной скоростью и выходите с меньшей скоростью. –

+0

Вы не найдете компьютерного звука, который может работать при низких задержках. Вам нужно специальное оборудование. И мне жаль говорить, но вы ошибаетесь в том, что можете снизить частоту с такой небольшой задержкой. Вам нужна целая миллисекунда только для одной длины волны на частоте 1 кГц. Если вы опустите его на октаву до 500 Гц, вам понадобится 2 миллисекунды только для одной длины волны. Мозг не реагирует на это быстро. Вы не можете воспринимать шаг на одной длине волны. И снова, если вы замедляете частоту дискретизации, в чем смысл? Вы быстро наращиваете задержку. – Brad

ответ

0

Похоже, что для вас лучше всего использовать что-то вроде Max/MSP или Pure Data. Это позволит вам избежать работы с текстовыми языками и должно быть хорошо для вас, быстро развивайте то, что вы хотите сделать. Набор I/O немного слишком низкий для того, что вы пытаетесь сделать.

Поскольку max не является текстовым языком, совместное использование самого кода немного сложно на сайтах, таких как переполнение стека. Я включил screengrab. Вы можете скопировать и вставить максимальный код, но для этого это немного уродливо и непринужденно.

Max/MSP method

вот краткое описание. Ящик, который говорит rect ~ 1, генерирует прямоугольную волну при Гц. Коробка моментального снимка захватывает значения, которые выплевываются. Коды if проверяют, когда оно больше нуля или меньше нуля (пики и впадины).Если он получает корыто, запись ~ записывает сигнал из микрофона и сохраняет его в буфере. поле канавки ~ - это сэмплер, воспроизводящий звук в этом буфере, когда он извлекает звук из поля if, он воспроизводит звук. Сиг-поле используется для управления скоростью воспроизведения.

Кроме того, вы можете не знать этого, но .PDF, который вы пытаетесь предоставить, недоступен.

Другое дело, если задержка важна, вы должны узнать о чем-то, что называется кликом. Это в основном, когда вы посылаете сигнал с одним 1 в начале и в течение времени, которое требуется для того, чтобы это значение проходило через вашу систему.

+0

Спасибо, я проверил Max и Pure Data. В вашей диаграмме описано, что я хочу делать. Моя единственная проблема заключается в том, будет ли это на самом деле то, что компьютер будет делать, или если это абстрактное описание, которое даст идентичные результаты с помощью какого-то типа моделирования, которое не показано. Если последнее, я получу задержки дольше, чем я хочу. –

+0

Я добавил еще одну копию PDF: http://tinyurl.com/lhjguv8 –

Смежные вопросы