2016-05-05 6 views
1

Есть ли способ использовать python (а не какое-либо внешнее программное обеспечение) для воспроизведения mp3-файла, такого как вход для микрофона?Воспроизведение mp3-файла через микрофон с помощью python

Например, у меня есть mp3-файл и с помощью скрипта python он будет воспроизводить его через мой микрофон, чтобы другие в голосовой комнате услышали его. Как я уже сказал, это всего лишь пример.

Конечно, я сделал некоторое исследование. Я узнал, что могу использовать программное обеспечение для создания виртуального устройства и делать несколько вещей, чтобы получить результат. Но я хочу сказать, что это возможно без установки программного обеспечения, но с каким-то скриптом python?

+0

Что вы подразумеваете под микрофоном ??? Вы имели в виду говорящего? Пожалуйста, не смешивайте их. Если у вас есть языковая проблема, обратитесь к словарю. – Dalen

+0

Нет, я не имел в виду динамики. Мой вопрос очень похож на этот: http://stackoverflow.com/questions/28918079/how-to-play-mp3-files-into-the-microphone-input-jquery, единственное отличие в том, что я хотел бы имеют решение в python. –

+0

Затем попробуйте переформулировать Q как-то или добавить объяснение, это комьюнити. Понимаете, микрофон и вход микрофона - две разные вещи. Я думал, что вы хотите использовать микрофон вместо динамика, что можно сделать, но нецелесообразно и разрушит микрофон, и я не понимаю, зачем кому-то это делать. Я отвечу на ваш Q ниже, в редактировании. – Dalen

ответ

0

Если вы имели в виду, как играть в MP3 с помощью Python, ну, это широкий вопрос.

Возможно ли, без каких-либо зависимостей, да, но это не стоит. Ну, играя несжатый звук, но MP3, ну, я объясню ниже.

Чтобы воспроизвести необработанные аудиоданные с Python без установки pyaudio или pygame или аналогичного, сначала вам нужно знать платформу, на которой будет запускаться ваш скрипт.

Затем реализуйте хороший набор функций для выбора аудиоустройства, устанавливая такие свойства, как частота дискретизации, скорость передачи данных, моно/стерео ..., подача потока на звуковую карту и прекращение воспроизведения.

Это не сложно, но для этого вам нужно использовать ctypes в Windows, PyObjC на Mac и Linux - это особый случай, поскольку он поддерживает многие аудиосистемы (возможно, для подключения к PulseAudio или для подключения к процессу типа aplay/paplay/mpeg123 ... или использовать gstreamer.).

Но зачем все это просто избегать зависимостей, когда у вас есть красивые библиотеки, где есть простые интерфейсы для доступа и использования аудиоустройств.

PyAudio отличный.

Ну, это ваша забота.

Но, проигрывая MP3 без внешних библиотек, в реальном времени, от чистого Python, ну, это не совсем невозможно, но этого очень трудно достичь, и насколько я знаю, никто даже не пытался это делать.

Существует чистая реализация декодера MP3 Python, но она в 10 раз медленнее, чем необходимо для воспроизведения в реальном времени звука. Он может быть оптимизирован для почти полной скорости, но никто не заинтересован в этом.

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

Это то, что вы должны сделать:

Установить Pygame и использовать его для воспроизведения MP3 непосредственно

или:

Установите PyAudio и некоторые библиотеки, декодирует MP3, есть довольно много из них на pypi.python.org и использовать его для декодирования MP3 и подачи вывода на PyAudio.

Есть еще несколько возможностей, в том числе pymedia, но я считаю эти самые простые решения.

Хорошо, поскольку мы разъяснили, что вам действительно нужно, это ответ.

Я оставлю первый ответ неповрежденным, так как вам нужна эта часть.

Теперь вы хотите воспроизвести аудио в поток записи, чтобы любое приложение, записывающее аудио вход, записывало материал, который вы играете.

В Windows это называется стереомикс и можно найти в регуляторе громкости под аудиовходом.

Вы выбираете стереомикс в качестве вашего ввода по умолчанию. Теперь, когда вы открываете приложение для записи, которое не выбирает текущий входной канал, но использует выбранный (например, Skype), он записывает все выходящие из ваших динамиков и входящие в ваш микрофон/линию.

I я не уверен на 100%, будет ли эта опция появляться на всех Windows или это особенность звуковой карты, которую у вас есть.

Я уверен, что звуковые карты Creative и Realtek поддерживают его.

Итак, исследуйте это.

Чтобы выбрать эту опцию из Python, вам необходимо подключиться к winmm.dll с помощью ctypes и вызвать соответствующую функцию. Я не знаю, какой из них и с какими аргументами.

Если эта опция отсутствует в регуляторе громкости, для нее нет ничего, кроме как установить виртуальную звуковую карту, чтобы сделать петлю для вас.

Может быть такое программное обеспечение, которое поставляется в виде библиотеки, так что вы можете использовать его с Python или что-то еще.

В Linux это должно быть легко с помощью Pulseaudio. Я не знаю, как, но я знаю, что вы можете это сделать, перенаправить потоки и т. Д. Там где-то есть учебник.

Затем вы можете вызвать эту команду из Python, установить ее и вернуться к нормальной работе.

На Mac, ну, я действительно понятия не имею, но это должно быть возможно.

Если вы хотите, чтобы ваш MP3 воспроизводился только в потоке записи, а не на ваших динамиках вообще, ну и в Windows вы не сможете сделать это без звукового устройства loopback.

В Linux, я уверен, что вы будете в состоянии сделать это, и на Mac должно быть возможно, но как это Q.

я в настоящее время нет времени, чтобы обнюхать библиотек и т.д., чтобы предоставить вам с некоторым полезным кодом, так что вам придется делать это самостоятельно. Но я надеюсь, что мои указания помогут вам.

+0

Нет, я не имел в виду играть в mp3-файл. Я имею в виду играть в mp3-файл через микрофон, так, например, в многопользовательской игре я могу играть музыку для других через мой микрофон. –

+0

Справа, прочитайте мое редактирование! – Dalen