Пример микрофона телефона Android с использованием AudioRecord с BeewareAndroid

Форум для тех, кто программирует под Android
Ответить
Гость
 Пример микрофона телефона Android с использованием AudioRecord с Beeware

Сообщение Гость »


Beeware делает доступными классы android.media MediaPlayer, Media.Recorder и AudioRecord из скрипта Python и Мне уже удалось воспроизвести и записать звук на Galaxy23 с помощью Beeware. Однако MediaRecorder не обеспечивает вывод в формате PCM, который необходим для моего приложения, занимающегося обработкой аудиосигнала. AudioRecord способен сэмплировать сигнал микрофона в PCM, однако, когда я пытаюсь прочитать кадры данных PCM (согласно документации AudioRecord https://developer.android.com/reference ... udioRecord) ) с read(byte[] ...) с использованием массива numpy с dtype=np.int8 или dtype=np.byte или даже пытаясь использовать read(float[] ...) с массивом numpy с dtype=np.float32, я всегда получаю одну и ту же ошибку неоднозначности

android.media.AudioRecord.read неоднозначен для аргументов (ndarray, int, int): параметры — int android.media.AudioRecord.read(byte[], int, int), int android.media. AudioRecord.read(short[], int, int)

Мне кажется, что AudioRecord не может распознать мой массив numpy в формате byte[], хотя np.int8 или np.byte оба являются подписанный байт как byte[] находится в Java или даже не может распознать его как формат float[] с помощью np.float32. Может ли кто-нибудь помочь мне выяснить, что не так с тем, что я делаю? любая подсказка будет высоко оценена

Я хотел бы иметь возможность правильно использовать AudioRecord, поскольку все известные мне аудиомодули сторонних производителей недоступны в Beeware даже для преобразования (в телефоне) выходного файла MediaRecorder в PCM

ОБНОВЛЕНИЕ: после ответа mhsmith ниже Я попробовал это предложение, и оно ОТЛИЧНО РАБОТАЕТ! большое спасибо! Я включаю соответствующий фрагмент кода
def Record_file(self,widget): #Создаем объект AudioRecord. self.source=MediaRecorder.AudioSource.MIC self.sampleRate=8000 self.channel=AudioFormat.CHANNEL_IN_MONO self.encoding=AudioFormat.ENCODING_PCM_16BIT self.minBufferSize=AudioRecord.getMinBufferSize(self.sampleRate,self.channel,self.encoding) self.recorder=AudioRecord(self.source,self.sampleRate,self.channel,self.encoding,self.minBufferSize) self.recorder.startRecording() # Создайте массив байтов для хранения аудиоданных. self.byteRate=2*self.sampleRate self.readTimePeriod=self.minBufferSize/self.byteRate self.readArray=np.zeros(self.minBufferSize,dtype=np.int8) пока правда: #Подождем, пока буфер заполнится time.sleep(self.readTimePeriod) # Чтение аудиоданных из буфера. self.bytesRead = self.recorder.read(jarray(jbyte)(self.readArray),0,self.minBufferSize) # Получить аудиоданные из массива байтов. self.audioData = self.readArray[:self.bytesRead]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»