Как получить аудио (Mi c) вход, работающий на Android с python / kivy - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь заставить mi c работать на android, я использую в основном kivy и buildozer. Я получил аудио на аудиопотоке, однако этот модуль настолько устарел, что больше не будет работать, если использовать вход «запись» GITHub Issue . Хорошо, я не смог заставить работать запись на p c, потому что он говорит «неподдерживаемый», как только я использую функции записи, в документах он упоминает только мобильные устройства, так что это нормально. в любом случае его можно заменить на этих платформах на pyaudio.

Я попытался найти другие варианты, которые я могу использовать, поэтому я наткнулся на pyjnius и MediaRecorder, я очень новичок с java, (и пытаюсь изучите python атм, так что новичок там тоже), поэтому я не смог заставить его работать. Проблема заключается в том, что мне нужно получить все данные * * * * * в байтах, это легко с pyaudio, и это работает. причина, по которой я здесь, это android, где pyaudio не работает (по крайней мере, я еще не пробовал компилировать библиотеки в android, я знаю, что это возможно, но много работы ..)

Вот код, который я должен попытаться заставить это работать:

            MediaRecorder = autoclass('android.media.MediaRecorder')
            AudioSource = autoclass('android.media.MediaRecorder$AudioSource')
            OutputFormat = autoclass('android.media.MediaRecorder$OutputFormat')
            AudioEncoder = autoclass('android.media.MediaRecorder$AudioEncoder')
            FileOutputStream = autoclass('java.io.FileOutputStream')
            gaindata = io.BytesIO()

            mRecorder = MediaRecorder()
            mRecorder.setAudioSource(AudioSource.MIC)
            mRecorder.setOutputFormat(OutputFormat.THREE_GPP)

            mRecorder.setOutputFile(gaindata.getBytes())
            mRecorder.setAudioEncoder(AudioEncoder.AMR_NB)
            mRecorder.prepare()

Я знаю, что есть кое-что о FileDescriptor, есть некоторые примеры, но все они имеют пробелы в строках, поэтому я не знаю, как преобразовать их в python .. все, что я хочу, это setOutputFile -> gaindata

Если есть другой вариант, мне бы хотелось, чтобы мне понадобились данные bytesIO с микрофона (предпочтительнее 8000, моно, raw wav без заголовка ИЛИ GSM6.10), и я преобразую это со звуковым файлом (да, я сделал скомпилированный libsndfile.so для охраны) в gsm6.10 и поместил его в сокет, это приложение VoIP.

1 Ответ

0 голосов
/ 21 января 2020

audiostream

audiostream также использует pyjnius

https://github.com/kivy/audiostream/blob/master/audiostream/platform/plat_android.pyx

from jnius import autoclass
    AudioIn = autoclass('org.audiostream.AudioIn') 

Я думаю, что лучшим способом было бы исправить аудиострим, чтобы другие могли используйте это также, потому что в документации киви упоминается, что использовать это:

https://kivy.org/doc/master/api-kivy.core.audio.html

Note
The core audio library does not support recording audio. If you require this functionality, please refer to the audiostream extension.

Или вы извлекаете основную функциональность проекта так что вы можете использовать его.

pyaudio

Другой проект, который я нашел с помощью микрофона, - https://pypi.org/project/SpeechRecognition/, в котором используется pyaudio

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

https://github.com/jmercouris/speech_recognition

...