feat: Send voice messages from web

This commit is contained in:
Krille 2024-08-06 11:55:01 +02:00
parent 3286b19387
commit 47481eb676
No known key found for this signature in database
GPG key ID: E067ECD60F1A0652
2 changed files with 31 additions and 5 deletions

View file

@ -39,10 +39,16 @@ class RecordingDialogState extends State<RecordingDialog> {
Future<void> startRecording() async {
try {
final useOpus =
await _audioRecorder.isEncoderSupported(AudioEncoder.opus);
final codec = kIsWeb
// Web seems to create webm instead of ogg when using opus encoder
// which does not play on iOS right now. So we use wav for now:
? AudioEncoder.wav
// Everywhere else we use opus if supported by the platform:
: await _audioRecorder.isEncoderSupported(AudioEncoder.opus)
? AudioEncoder.opus
: AudioEncoder.aacLc;
fileName =
'recording${DateTime.now().microsecondsSinceEpoch}.${useOpus ? 'ogg' : 'm4a'}';
'recording${DateTime.now().microsecondsSinceEpoch}.${codec.fileExtension}';
String? path;
if (!kIsWeb) {
final tempDir = await getTemporaryDirectory();
@ -64,7 +70,7 @@ class RecordingDialogState extends State<RecordingDialog> {
autoGain: true,
echoCancel: true,
noiseSuppress: true,
encoder: useOpus ? AudioEncoder.opus : AudioEncoder.aacLc,
encoder: codec,
),
path: path ?? '',
);
@ -238,3 +244,23 @@ class RecordingResult {
required this.fileName,
});
}
extension on AudioEncoder {
String get fileExtension {
switch (this) {
case AudioEncoder.aacLc:
case AudioEncoder.aacEld:
case AudioEncoder.aacHe:
return 'm4a';
case AudioEncoder.opus:
return 'ogg';
case AudioEncoder.wav:
return 'wav';
case AudioEncoder.amrNb:
case AudioEncoder.amrWb:
case AudioEncoder.flac:
case AudioEncoder.pcm16bits:
throw UnsupportedError('Not yet used');
}
}
}

View file

@ -29,7 +29,7 @@ abstract class PlatformInfos {
static bool get usesTouchscreen => !isMobile;
static bool get platformCanRecord => (isMobile || isMacOS);
static bool get platformCanRecord => (isMobile || isMacOS || isWeb);
static String get clientName =>
'${AppConfig.applicationName} ${isWeb ? 'web' : Platform.operatingSystem}${kReleaseMode ? '' : 'Debug'}';