[View]  [Edit]  [Lock]  [References]  [Attachments]  [History]  [Home]  [Changes]  [Search]  [Help] 

[node8-android] Recording Audio from Bluetooth mic

This chunks of code are examples of simple audio recording on Android devices using bluetooth mic.

Prerequisites

This permisions are required by the application's AndroidManifest.xml
uses-permission android:name="android.permission.RECORD_AUDIO"
uses-permission android:name="android.permission.BLUETOOTH"
uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
uses-permission android:name="android.permission.BLUETOOTH_CONNECT"

Ensure you have that lines included in s8/sources/appS8/uses-permissions.st
And used to build the snapshot of your system.

Check for permissions to record audio

(AndroidApplication requestPermissionsFor: 'android.permission.RECORD_AUDIO'
) = true ifFalse: [ ^self error: 'Needs permission to record audio' ]


Activate Bluetooth SCO audio if available

| audioManager |
audioManager := MainActivity current getSystemService: #audio.
audioManager isBluetoothScoAvailableOffCall ifTrue: [
	audioManager startBluetoothSco.
	audioManager bluetoothScoOn: true.
	AM := audioManager
]

Note: AM global will be the audio manager after evaluating this chunk

Using MediaRecorder to record audio

| pathName recorder |
pathName := MainActivity current filesDir absolutePath ,'/recorded.mp4'.
recorder := MediaRecorder instance.
recorder
	audioSource: MediaRecorder audioSource @@ #VOICE_COMMUNICATION;
	outputFormat: MediaRecorder outputFormat @@ #MPEG_4;
	audioEncoder: MediaRecorder audioEncoder @@ #AAC;
	audioSamplingRate: 44100;
	audioEncodingBitRate: 128000;
	outputFile: pathName.
Rec := recorder


Prepare and start recoding

 Rec prepare; start 


Stop recoding

 Rec stop; release 


Reading the audio contents

self note: 'Size of audio file =' ,(MainActivity current filesDir absolutePath ,'/recorded.mp4') fileContents size ,'bytes.' 


Clean the globals we have used in this page

Smalltalk removeKey: #Rec ifAbsent: [].
Smalltalk removeKey: #AM ifAbsent: [].