From 24a67a1ec39a238bed0e6f38d9684d234a3d454f Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Tue, 16 Mar 2021 11:00:22 +1100 Subject: [PATCH] record voice message as opus --- package.json | 12 ++++++------ .../session/conversation/SessionCompositionBox.tsx | 2 +- .../session/conversation/SessionRecording.tsx | 4 +++- ts/models/message.ts | 3 ++- ts/types/MIME.ts | 1 + 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index ff3427d1a..dcb3e9a18 100644 --- a/package.json +++ b/package.json @@ -129,13 +129,8 @@ }, "devDependencies": { "@types/backbone": "^1.4.2", - "@types/bytebuffer": "^5.0.41", "@types/blueimp-load-image": "^2.23.8", - "@types/emoji-mart": "^2.11.3", - "@types/moment": "^2.13.0", - "@types/react-mentions": "^3.3.1", - "@types/react-mic": "^12.4.1", - "@types/styled-components": "^5.1.4", + "@types/bytebuffer": "^5.0.41", "@types/chai": "4.1.2", "@types/chai-as-promised": "^7.1.2", "@types/classnames": "2.2.3", @@ -143,6 +138,7 @@ "@types/config": "0.0.34", "@types/dompurify": "^2.0.0", "@types/electron-is-dev": "^1.1.1", + "@types/emoji-mart": "^2.11.3", "@types/filesize": "3.6.0", "@types/fs-extra": "5.0.5", "@types/jquery": "3.3.29", @@ -151,12 +147,15 @@ "@types/lodash": "4.14.106", "@types/mkdirp": "0.5.2", "@types/mocha": "5.0.0", + "@types/moment": "^2.13.0", "@types/node-fetch": "^2.5.7", "@types/pify": "3.0.2", "@types/qs": "6.5.1", "@types/rc-slider": "^8.6.5", "@types/react": "16.8.5", "@types/react-dom": "16.8.2", + "@types/react-mentions": "^3.3.1", + "@types/react-mic": "^12.4.1", "@types/react-portal": "^4.0.2", "@types/react-redux": "7.1.9", "@types/react-virtualized": "9.18.12", @@ -164,6 +163,7 @@ "@types/rimraf": "2.0.2", "@types/semver": "5.5.0", "@types/sinon": "9.0.4", + "@types/styled-components": "^5.1.4", "@types/uuid": "3.4.4", "arraybuffer-loader": "1.0.3", "asar": "0.14.0", diff --git a/ts/components/session/conversation/SessionCompositionBox.tsx b/ts/components/session/conversation/SessionCompositionBox.tsx index ae77ed217..c167ba3de 100644 --- a/ts/components/session/conversation/SessionCompositionBox.tsx +++ b/ts/components/session/conversation/SessionCompositionBox.tsx @@ -929,7 +929,7 @@ export class SessionCompositionBox extends React.Component { const audioAttachment: Attachment = { data: fileBuffer, flags: SignalService.AttachmentPointer.Flags.VOICE_MESSAGE, - contentType: MIME.AUDIO_MP3, + contentType: MIME.AUDIO_OPUS, size: audioBlob.size, }; diff --git a/ts/components/session/conversation/SessionRecording.tsx b/ts/components/session/conversation/SessionRecording.tsx index 065740865..10d9d5e9b 100644 --- a/ts/components/session/conversation/SessionRecording.tsx +++ b/ts/components/session/conversation/SessionRecording.tsx @@ -473,7 +473,9 @@ class SessionRecordingInner extends React.Component { } // Start recording the stream - const media = new window.MediaRecorder(stream, { mimeType: 'audio/webm' }); + const media = new window.MediaRecorder(stream, { + mimeType: 'audio/webm;codecs=opus', + }); media.ondataavailable = (mediaBlob: any) => { this.setState({ mediaBlob }, async () => { // Generate PCM waveform for playback diff --git a/ts/models/message.ts b/ts/models/message.ts index 1b83fa83c..dd5a44545 100644 --- a/ts/models/message.ts +++ b/ts/models/message.ts @@ -23,6 +23,7 @@ import { import autoBind from 'auto-bind'; import { saveMessage } from '../../ts/data/data'; import { ConversationModel } from './conversation'; +import { getSuggestedFilenameSending } from '../types/Attachment'; export class MessageModel extends Backbone.Model { public propsForTimerNotification: any; public propsForGroupNotification: any; @@ -802,7 +803,7 @@ export class MessageModel extends Backbone.Model { const filenameOverridenAttachments = finalAttachments.map( (attachment: any) => ({ ...attachment, - fileName: window.Signal.Types.Attachment.getSuggestedFilenameSending({ + fileName: getSuggestedFilenameSending({ attachment, timestamp: Date.now(), }), diff --git a/ts/types/MIME.ts b/ts/types/MIME.ts index 8766c1557..049095cad 100644 --- a/ts/types/MIME.ts +++ b/ts/types/MIME.ts @@ -5,6 +5,7 @@ export const APPLICATION_JSON = 'application/json' as MIMEType; export const AUDIO_AAC = 'audio/aac' as MIMEType; export const AUDIO_WEBM = 'audio/webm' as MIMEType; export const AUDIO_MP3 = 'audio/mp3' as MIMEType; +export const AUDIO_OPUS = 'audio/ogg' as MIMEType; export const IMAGE_GIF = 'image/gif' as MIMEType; export const IMAGE_JPEG = 'image/jpeg' as MIMEType; export const IMAGE_BMP = 'image/bmp' as MIMEType;