ipcMain.on('update-recorder', updateRecorder);
// utility function used by play func.
-function bufSplit(input: Array<Buffer>): Array<Buffer> {
- const result: Buffer[] = [];
- input.forEach((b: Buffer) => {
- // split buffer into two.
- result.push(b.slice(0, b.length / 2), b.slice(b.length / 2, b.length));
- });
- return result;
+function bufSplit(buf: Buffer, len: number): Array<Buffer> {
+ let chunks = [];
+ let i = 0;
+ let L = len;
+
+ while(i < buf.byteLength) {
+ chunks.push(buf.slice(i, L));
+ i = L;
+ L += len;
+ }
+
+ return chunks;
}
// main audio function run by run.ts module.
ai.on('data', (chunk: string) => {
if (record) {
+ console.log('recording...')
audioContainer.input += chunk;
} else {
if (audioContainer.input.length) audioContainer.input = "";
}
// play audio buffers.
-export function play(input: Array<Buffer>): void {
+export function play(input: string): void {
let i = 0;
+ console.log(Buffer.from(input, encoding));
// format buffers into half their size to account for writable highwaterMark.
- const audio = bufSplit(input);
+ const audio = bufSplit(Buffer.from(input), 8192);
+ console.log(audio);
+
// call this fuction after last audio chunk has been written.
const callback = () => {
// TODO: clear portAudio writable buffer on write end.
import WebSocket from 'ws';
import { backgroundMitt } from './emitter';
import { ipcMain } from "electron";
+import { play } from './audio';
interface RenderMessage {
content: {
text: string;
- audio: boolean | Buffer;
+ audio: string;
};
context: string;
modifier: string;
}
const parsed: RenderMessage = JSON.parse(message);
- console.log('message received', parsed);
+ console.log('message received', parsed.content.text);
if (parsed.content.audio) {
+ console.log('audio received');
+ play(parsed.content.audio);
}
backgroundMitt.emit('ipc-renderer', {
endpoint: 'render-message',
};
const sendMessage = (_event, payload: TextMessage): void => {
+ console.log('sending message')
socket.send(JSON.stringify(payload));
}
export const sendAudio = (content: Buffer) => {
+ console.log('sending audio')
socket.send(content);
}
ia.start();
ia.on('data', (chunk) => {
if (record) {
- console.log('recording data')
+ console.log('recording data');
audioContainer.input += chunk;
- // audioContainer.buffers.push(Buffer.from(chunk, 'base64'));
} else {
if (audioContainer.input.length) audioContainer.input = "";
}
const tests = [];
function testCallback() {
- tests.forEach(t => console.log(t))
- console.log(tests[0])
play(tests[0])
}
-function play(bufArray) {
+function splitArrayIntoChunksOfLen(buf, len) {
+ let chunks = [];
+ let i = 0;
+ let L = len;
+ console.log(buf.byteLength)
+ while(i < buf.byteLength) {
+ chunks.push(buf.slice(i, L));
+ i = L;
+ L += len;
+ }
+
+ chunks.forEach(c => console.log(c))
+ return chunks;
+}
+
+function play(input) {
let i = 0;
+ const buf = Buffer.from(input, 'base64');
// format buffers into half their size to account for writable highwaterMark.
- const audio = bufSplit(bufArray);
+ const audio = splitArrayIntoChunksOfLen(buf, 8192);
// call this fuction after last audio chunk has been written.
const callback = () => {
// TODO: clear portAudio writable buffer on write end.
- console.log('Finished writing test number %d', counter)
- if (counter === 3) {
- console.log('finished test writing!')
- }
}
write();
// iterate through audio array and write buffers to portAudio writable.
transcribeSpeech({
content: Buffer.from(audioContainer.input, 'base64')
});
- tests.push(audioContainer.buffers)
+ tests.push(audioContainer.input)
counter++;
console.log('audio string length:', audioContainer.input.length)
console.log('buffers written: ', audioContainer.buffers.length)
setTimeout(async () => {
record = false;
test()
-}, 3000);
-
-setTimeout(() => {
- record = true;
-}, 6000)
-
-setTimeout(async () => {
- record = false;
- test();
-}, 9000);
-
-setTimeout(() => {
- record = true;
-}, 11000)
-
-setTimeout(async () => {
- record = false;
- test();
-}, 14000);
-
+}, 4000);
+
+// setTimeout(() => {
+// record = true;
+// }, 6000)
+//
+// setTimeout(async () => {
+// record = false;
+// test();
+// }, 9000);
+//
+// setTimeout(() => {
+// record = true;
+// }, 11000)
+//
+// setTimeout(async () => {
+// record = false;
+// test();
+// }, 14000);
+//
setTimeout(async () => {
ia.quit();
- // testCallback()
+ testCallback()
return;
-}, 16000);
+}, 6000);