audio_streamer 2.2.0+1 audio_streamer: ^2.2.0+1 copied to clipboard
Streaming of Pulse-code modulation (PCM) audio from Android and iOS
Audio Streamer #
Streaming of PCM audio from Android and iOS with a sample rate of 44,100 Hz
Permissions #
On Android add the audio recording permission to AndroidManifest.xml
:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
On iOS enable the following:
- Capabilities > Background Modes > Audio, AirPlay and Picture in Picture
- In the Runner Xcode project edit the
Info.plist
file. Add an entry for 'Privacy - Microphone Usage Description'
When editing the Info.plist
file manually, the entries needed are:
<key>NSMicrophoneUsageDescription</key>
<string>YOUR DESCRIPTION</string>
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
- Edit the
Podfile
to include the permission for the microphone:
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
# for more infomation: https://github.com/BaseflowIT/flutter-permission-handler/blob/master/permission_handler/ios/Classes/PermissionHandlerEnums.h
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
'PERMISSION_MICROPHONE=1',]
end
end
end
Example #
See the file example/lib/main.dart
for a fully fledged example app using the plugin.
AudioStreamer _streamer = AudioStreamer();
bool _isRecording = false;
List<double> _audio = [];
void onAudio(List<double> buffer) {
_audio.addAll(buffer);
double secondsRecorded = _audio.length.toDouble() / _streamer.sampleRate.toDouble();
print('$secondsRecorded seconds recorded.');
}
void start() async {
try {
_streamer.start(onAudio);
setState(() {
_isRecording = true;
});
} catch (error) {
print(error);
}
}
void stop() async {
bool stopped = await _streamer.stop();
setState(() {
_isRecording = stopped;
});
}