[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: [].