Skip to content

Commit

Permalink
mtce
Browse files Browse the repository at this point in the history
  • Loading branch information
terryyin committed Oct 25, 2024
1 parent 5469ae6 commit 495c8f6
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 29 deletions.
2 changes: 1 addition & 1 deletion e2e_test/start/pageObjects/notePage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ export const assumeNotePage = (noteTopic?: string) => {
return this.toolbarButton('edit note image')
},
audioTools() {
this.toolbarButton('Upload audio').click()
this.toolbarButton('Audio tools').click()
return audioToolsPage()
},
switchToRichContent() {
Expand Down
51 changes: 27 additions & 24 deletions frontend/src/components/notes/accessory/NoteAudioTools.vue
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,8 @@
import useLoadingApi from "@/managedApi/useLoadingApi"
import { onUnmounted, ref, type PropType } from "vue"
import type { StorageAccessor } from "../../../store/createNoteStorage"
import {
createAudioRecorder,
type AudioRecorder,
} from "../../../models/recording"
import { createWakeLocker, type WakeLocker } from "../../../models/wakeLocker"
import { createAudioRecorder } from "../../../models/recording"
import { createWakeLocker } from "../../../models/wakeLocker"
import type { Note } from "@/generated/backend"
import Waveform from "./Waveform.vue"
Expand All @@ -59,39 +56,45 @@ const audioFile = ref<Blob | undefined>()
const errors = ref<Record<string, string | undefined>>()
const isRecording = ref(false)
const audioRecorder = ref<AudioRecorder>(createAudioRecorder())
const wakeLocker = ref<WakeLocker>(createWakeLocker())
const wakeLocker = createWakeLocker()
const processAudio = async (file: Blob) => {
audioFile.value = file
try {
const response = await managedApi.restAiAudioController.audioToText({
previousNoteDetails: "Lets start",
uploadAudioFile: file,
})
storageAccessor
.storedApi()
.appendDetails(note.id, response?.completionMarkdownFromAudio)
} catch (error) {
errors.value = error as Record<string, string | undefined>
}
}
const audioRecorder = createAudioRecorder()
audioRecorder.setProcessor(processAudio)
const startRecording = async () => {
errors.value = undefined
try {
await wakeLocker.value.request() // Request wake lock
await audioRecorder.value.startRecording()
await wakeLocker.request() // Request wake lock
await audioRecorder.startRecording()
isRecording.value = true
} catch (error) {
console.error("Error starting recording:", error)
errors.value = { recording: "Failed to start recording" }
await wakeLocker.value.release() // Release wake lock if recording fails
await wakeLocker.release() // Release wake lock if recording fails
}
}
const stopRecording = async () => {
isRecording.value = false
const file = audioRecorder.value.stopRecording()
audioFile.value = file
try {
const response = await managedApi.restAiAudioController.audioToText({
previousNoteDetails: "Lets start",
uploadAudioFile: audioFile.value,
})
storageAccessor
.storedApi()
.appendDetails(note.id, response?.completionMarkdownFromAudio)
} catch (error) {
errors.value = error as Record<string, string | undefined>
audioRecorder.stopRecording()
} finally {
await wakeLocker.value.release() // Release wake lock when recording stops
await wakeLocker.release() // Release wake lock when recording stops
}
}
Expand All @@ -116,7 +119,7 @@ const closeDialog = () => {
}
onUnmounted(() => {
wakeLocker.value.release() // Ensure wake lock is released when component is unmounted
wakeLocker.release() // Ensure wake lock is released when component is unmounted
})
</script>

Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/notes/core/NoteCoreToolbar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@
</template>
</PopButton>

<button class="btn" title="Upload audio" v-if="!audioTools" @click="$emit('show-audio-tools')">
<button class="btn" title="Audio tools" v-if="!audioTools" @click="$emit('show-audio-tools')">
<SvgResume />
</button>
</div>
Expand Down
17 changes: 14 additions & 3 deletions frontend/src/models/recording.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ import { getAudioRecordingWorkerURL } from "./audio/recorderWorklet"

export interface AudioRecorder {
startRecording: () => Promise<void>
stopRecording: () => File
stopRecording: () => void
setProcessor: (callback: (file: File) => void) => void
getAudioData: () => Float32Array[]
}

Expand All @@ -12,6 +13,7 @@ export const createAudioRecorder = (): AudioRecorder => {
let audioInput: MediaStreamAudioSourceNode | null = null
let workletNode: AudioWorkletNode | null = null
let audioData: Float32Array[] = []
let processorCallback: ((file: File) => void) | null = null

const audioRecorder: AudioRecorder = {
startRecording: async function (): Promise<void> {
Expand Down Expand Up @@ -45,7 +47,7 @@ export const createAudioRecorder = (): AudioRecorder => {
}
},

stopRecording: function (): File {
stopRecording: function (): void {
if (workletNode) {
workletNode.disconnect()
}
Expand All @@ -62,8 +64,17 @@ export const createAudioRecorder = (): AudioRecorder => {

// Reset the audioData
audioData = []
return file

// Call the callback with the file if it's set
if (processorCallback) {
processorCallback(file)
}
},

setProcessor: function (callback: (file: File) => void): void {
processorCallback = callback
},

getAudioData: function (): Float32Array[] {
return audioData
},
Expand Down

0 comments on commit 495c8f6

Please sign in to comment.