How to transcribe Thai speech in videos into text.
-
Google Cloud or Firebase project with billing enabled.
-
ffmpeg
or Docker.
# https://www.youtube.com/watch?v=vz1oG-YlvAY | |
# https://www.reddit.com/r/adventofcode/comments/zu3pat/2022_day_24_part_2_terminal_visualization/?utm_source=share&utm_medium=web2x&context=3 | |
require 'paint' | |
lines = $stdin.readlines.map(&:chomp) | |
directions = { | |
'^' => [0, -1], | |
'v' => [0, 1], | |
'<' => [-1, 0], | |
'>' => [1, 0] |
const customInspectSymbol = Symbol.for('nodejs.util.inspect.custom') | |
export type Input<T> = T | Output<T> | |
export interface Output<T> { | |
resolveWithContext(ctx: Context): Promise<T> | |
} | |
class OutputImpl<T> implements Output<T> { | |
private promise?: Promise<T> |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <time.h> | |
int iCurNumChannels; | |
int vecChannelOrder[100]; | |
unsigned int vecChannels[100]; | |
#define INVALID_CHANNEL_ID 101 | |
void InitChannel(int iNewChanID, unsigned int InetAddr) |
# wget -O- https://gist.githubusercontent.com/dtinth/b8d23de26a1820ec6f7a7238bc895f44/raw/jamulus-debian.sh | sudo bash | |
set -eo pipefail | |
JAMULUS_FILE=jamulus_headless_3.8.0_ubuntu_amd64.deb | |
JAMULUS_URL=https://github.com/jamulussoftware/jamulus/releases/download/r3_8_0/$JAMULUS_FILE | |
NUM_STEPS=5 | |
echo "Step 1/$NUM_STEPS - Download Jamulus" | |
wget -O"$JAMULUS_FILE" "$JAMULUS_URL" |
file_list = Dir['original/*.wav'] | |
file_list.each_with_index do |original_wav, index| | |
basename = File.basename(original_wav) | |
target_wav = "processed/#{basename}" | |
gain = case basename | |
when /^piano/; 4 | |
else; 0 | |
end | |
puts "[#{index + 1}/#{file_list.length}] #{basename} (#{gain})" | |
system "sox", original_wav, target_wav, "gain", "#{gain}" or raise "Cannot convert" |
dataset |
How to transcribe Thai speech in videos into text.
Google Cloud or Firebase project with billing enabled.
ffmpeg
or Docker.
// Note: Using non-standard V8 feature | |
// https://code.google.com/archive/p/v8-i18n/wikis/BreakIterator.wiki | |
// | |
// The standard is now Intl.Segmenter but no browser implements it yet. | |
// | |
function cut(text) { | |
const iterator = new Intl.v8BreakIterator(["th"]); | |
iterator.adoptText(text); | |
const result = []; | |
let pos = iterator.first(); |
import * as functions from 'firebase-functions' | |
import * as admin from 'firebase-admin' | |
import 'firebase-functions' | |
import express from 'express' | |
import { middleware, Client } from '@line/bot-sdk' | |
admin.initializeApp() | |
export const bot = functions.https.onRequest((req, res) => { | |
const config = { | |
channelAccessToken: functions.config().line.channel.accesstoken, | |
channelSecret: functions.config().line.channel.secret |